Als MiniEVB werden kleine Boards in verschiedenen Größen angeboten, die zum größten Teil zum Arduino kompatibel sein sollen. Es handelt sich dabei um Mikrocontroller vom Typ LGT8F328P des Herstellers LogicGreen (jetzt: Prodesign Semiconductor) mit einem zum ATmega328P weitestgehend kompatiblen Befehlssatz, jedoch mit einigen Erweiterungen. In diesem Beitrag wird das sog. Nano Style LQFP32 MiniEVB näher betrachtet, wobei die Pin und ihre Positionen an den langen Seiten denen des Arduino Nano entsprechen.
Dieses Board besitzt zwei Ausfertigungen:
LGT8F328P | ATmega328P | |
---|---|---|
Systemtakt | bis zu 32 MHz (1,8V bis 5,5V) |
bis zu 20 MHz (4,5V bis 5,5V) bis zu 10 MHz (2,7V bis 5,5V) bis zu 4 MHz (1,8V bis 5,5V) |
Interner Oszillator | 32 MHz | 8 MHz |
Timer |
2× 8bit, 2× 16bit Frequenz bis zu 64MHz |
2× 8bit, 1× 16bit Frequenz bis zu 20MHz |
ADC |
12 Kanäle (12bit Auflösung) Verstärkung: 1×, 8×, 16×, 32× Differenzmessung möglich |
8 Kanäle (10bit Auflösung) Verstärkung: 1× keine Differenzmessung |
DAC |
vorhanden mit 8bit-Auflösung (Port PD4 / Arduino GPIO 4) |
nicht vorhanden |
Interne Referenzspannungen | 1,024V, 2,048V, 4,096V (±1mV) | 1,1V (±100mV) |
EEPROM | Simuliertes EEPROM im Flash-Speicher | 1 kB EEPROM |
Stromaufnahme (GPIO) | ≤ 30mA | ≤ 20mA |
Die Anschlüsse des LGT8F328P Nano Boards entsprechen nahezu denen des Arduino Nano mit einigen
Unterschieden:
Es gibt 5 zusätzliche digitale Ein-/Ausgänge; AREF, A6 und A7 sind digital nutzbar und hinzu kommen die
Pins SWC und SWD.
Um Sketches mit der Arduino-IDE für LGT8F328P Nano Boards kompilieren und hochladen zu können, müssen zunächst
einige Vorbereitungen getroffen werden.
Man fügt unter "Voreinstellungen → Zusätzliche Boardverwalter-URLs" folgende URL hinzu:
https://raw.githubusercontent.com/dbuezas/lgt8fx/master/package_lgt8fx_index.json
Falls schon eine andere URL
in diesem Feld steht, kann diese mit einem Komma separiert werden:
Als nächste muss das LGT8F328P Nano Board hinzugefügt werden. Dazu geht man unter "Werkzeuge → Boards → Boardverwalter". Hier sucht man nach "lgt8fx" und installiert dann "LGT8fx Boards von dbuezas".
Nun kann der LGT8FX an den USB-Port des PC angesteckt werden und man wählt nun den Port aus
im Menu "Werkzeuge → Port:".
Falls unter Windows der COM Port nicht wählbar ist, muss noch zusätzlich die
USB to UART Bridge installiert werden.
Als ersten Test habe ich einen etwas modifizierten Blink-Sketch verwendet. Dieser kann -wie vom Arduino gewohnt- kompiliert und hochgeladen werden:
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
for (byte i = 0; i < 7; i++) {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
delay(75);
}
delay(2000);
}
Da der ADC mit einer höheren Auflösung und Referenzspannung umgehen kann, können analoge Signale feiner aufgelöst werden. Der folgende Versuch entspricht vom Aufbau dem aus (LDR) GL55xx (ohne die LED). Es können aber auch statt dem LDR ein Potentiometer, ein Piezo-Wandler o.ä. verwendet werden.
/*
Parameter: Voltage reference:
----------------------------------------
DEFAULT VCC
EXTERNAL External Reference (REF)
INTERNAL1V024 Internal 1.024 volts
INTERNAL2V048 Internal 2.048 volts
INTERNAL4V096 Internal 4.096 volts
*/
void setup()
{
Serial.begin(9600);
analogReference(INTERNAL4V096);
// 10, 11 or 12 bit
analogReadResolution(12);
}
void loop()
{
int v = analogRead(A0);
float voltage = v * 4.096 / 4096.0;
Serial.print("Value: " + String(v) + "\t\t");
Serial.println("Voltage: " + String(voltage) + " V");
delay(50);
}
An Pin #4 (D4 / PD4 / DAO) kann ein echtes analoges Signal mit einer Auflösung von 8 bit erzeugt werden:
void setup()
{
analogReference(DEFAULT);
pinMode(DAC0, ANALOG);
analogWrite(DAC0, 69); // 0...255
}
void loop(){}
Da der Watchdog etwas anders funktioniert als beim Arduino Nano,
sollte statt der Library avr/wdt.h besser die Library
dbuezas/WDT
verwendet werden.
Im folgenden Sketch muss nur die Zeile wdt_reset()
einkommentiert werden, dann läuft der
Sketch kontinuierlich.
/*
Parameter WDT reset period
--------------------------------
WTO_64MS 64 ms
WTO_128MS 128 ms
WTO_256MS 256 ms
WTO_512MS 512 ms
WTO_1S 1 s
WTO_2S 2 s
WTO_4S 4 s
WTO_8S 8 s
WTO_16S 16 s
WTO_32S 32 s
*/
#include "WDT.h"
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Serial.begin(9600);
Serial.println("Start");
wdt_enable(WTO_4S);
}
void loop()
{
Serial.println("Elapsed time: " + String(millis()) + "ms");
delay(888);
// wdt_reset();
}