LGT8F328P MiniEVB

Eigentlich habe ich ausreichend ATMEGA328p Chips zu Hause … doch wenn ein Klon um 70 Cent (Dollar-Cent) angeboten wird, kann ich auch nicht wiederstehen und ein paar dieser Teile mitbestellen.

Es handelt sich dabei um einen LGT8F328P Mikrokontroller.

Dieser Chip soll zum Arduino Pro Mini kompatibel sein … aber so ganz stimmt das nicht.


Ich habe seit Jahren ein paar Pro-Mini Nachbauten herumliegen, aber deren fehlender USB Anschluss lässt mich immer zu den Schwesterchips greifen, wenn ich mal was ausprobieren will, weil man die so praktisch anstöpseln kann.

Doch … das war bevor ich versehentlich eine Schachtel CP2102 und CH340E USB to Serial-TTL Adapter geordert hatte (ja die Dinger sind auch verdammt billig, 10 Stück für ein paar Euro in Fernost - versus 1 Stück für 5-10 Euro im hiesigen Fachhandel). Vermutlich werde ich bis zu meinem Tod gar nicht mehr alle verbauen können …

LGT8F328P MiniEVB

Das bedeutet also, ich kann mit so einem USB-Adapter auch die Pro-Mini Klone zügig per Arduino IDE (ohne einen zusätzlichen UNO) programmieren.

LGT8F328P CH340E

Und das funktionierte tatsächlich problemlos, kaum war der Sketch-Upload fertig blinkte die übliche LED … aber leider nicht in dem Intervall, das vorgeschrieben war, es war vieeeeeeeeel langsamer.

Das riecht streng nach der falschen Chipkonfiguration oder dem falschen CPU Takt.
Doch wozu hat man Suchmaschinen?
Und zum Glück existiert ein Github Projekt unter https://github.com/LGTMCU/Larduino_HSP/ mit den Quellcodes und angepassten Bootloadern für den Chip. Dieses Board-Package wandert ins Unterverzeichnis %HOMEPATH%\Documents\Arduino\hardware und nach dem Neustart der IDE kann man LGT8F328P Chips im Menü auswählen.

Meiner ist der LGT8F328P-LQFP32 MiniEVB (16 MHz)

Wenn man sich die Datei boards.txt der neuen Hardware ansieht, fällt einem der unterschiedliche Bootloader auf, der mitgeliefert wird, wie auch, dass ein paar Konfigurations-Bits anders gesetzt sind:

 1# %HOMEPATH%\Documents\Arduino\hardware\LGT\avr\boards.txt
 2lardu_328p.name= LGT8F328P-LQFP32 MiniEVB (16 MHz)
 3lardu_328p.upload.tool=avrdude
 4lardu_328p.upload.protocol=arduino
 5lardu_328p.upload.maximum_size=29696
 6lardu_328p.upload.speed=57600
 7lardu_328p.bootloader.tool=avrdude
 8lardu_328p.bootloader.high_fuses=0xff
 9lardu_328p.bootloader.low_fuses=0xff
10lardu_328p.bootloader.extended_fuses=0x07
11lardu_328p.bootloader.path=lgt8fx8p
12lardu_328p.bootloader.file=lgt8fx8p/optiboot_lgt8f328p.hex
13lardu_328p.bootloader.unlock_bits=0x3f
14lardu_328p.bootloader.lock_bits=0x3f
15lardu_328p.build.mcu=atmega328p
16lardu_328p.build.f_cpu=16000000L
17lardu_328p.build.core=lgt8f
18lardu_328p.build.variant=lgt8fx8p
19lardu_328p.build.board=AVR_LARDU_328E

Im Vergleich zu den Einstellungen der Pro Mini Arduino Boards:

 1##############################################################
 2pro.name=Arduino Pro or Pro Mini
 3pro.upload.tool=avrdude
 4pro.upload.protocol=arduino
 5pro.bootloader.tool=avrdude
 6pro.bootloader.unlock_bits=0x3F
 7pro.bootloader.lock_bits=0x0F
 8pro.build.board=AVR_PRO
 9pro.build.core=arduino
10pro.build.variant=eightanaloginputs
11## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328P
12## --------------------------------------------------
13pro.menu.cpu.16MHzatmega328=ATmega328P (5V, 16 MHz)
14pro.menu.cpu.16MHzatmega328.upload.maximum_size=30720
15pro.menu.cpu.16MHzatmega328.upload.maximum_data_size=2048
16pro.menu.cpu.16MHzatmega328.upload.speed=57600
17pro.menu.cpu.16MHzatmega328.bootloader.low_fuses=0xFF
18pro.menu.cpu.16MHzatmega328.bootloader.high_fuses=0xDA
19pro.menu.cpu.16MHzatmega328.bootloader.extended_fuses=0xFD
20pro.menu.cpu.16MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex
21pro.menu.cpu.16MHzatmega328.build.mcu=atmega328p
22pro.menu.cpu.16MHzatmega328.build.f_cpu=16000000L

Was die PINs anbelangt, ist der Klon nicht wirklich “geklont”, sondern was ganz anderes und kleiner. Während der echte Pro Mini alle Pins führt, die ein Arduino UNO auch bereitstellt (28), bietet der LGT8F328P auf seinen 20 Pins nur ein reduziertes Set.

Es sieht so aus, als wären die digitalen Pins 5 und 6 mit 0 (RX) und 1 (TX) vereint, wie auch 3 mit 4, 8 mit 9 und 10 mit 11, wobei TX/RX zusätzlich an der Seite hinausgeführt sind. Die analogen Pins 2 und 3 fehlen generell.
Nun das erschwert auf jeden Fall schon mal SPI, das üblicherweise auf den Arudino Pins 10, 11, 12 und 13 betrieben wird.

Vermutlich muss man hier vom üblichen Arduino-Standard abweichen, um ordentlichen kommunizieren zu können. Immerhin ist I2C ist nicht betroffen (A4 und A5).

LGT8F328P-mini-micro

Man findet im Netz auch kritische Töne gegenüber dem Stiefbruder aus Fernost. Er besitzt keinen eigenen EEPROM, sondern kann über andere Konfigurationsbits genötigt werden den Programmspeicher dafür zu nutzen und die Doku ist nicht so frei und offen (heißt: nur chinesisch), damit man alles verstehen kann.

Das lässt natürlich Spielraum für Spekulationen was sich eventuell anders verhält als beim echten 328P von ATMEL. Auch soll der A/D Wandler 12 bits genau sein und nicht nur 10 wie üblich.

Fazit

Ich gehe mal davon aus, dass viele kleine Mikrokontrollerprojekt, die nur ein paar Pins ein und ausschalten oder Sensoren auslesen, recht kompatibel zum Arduino ATMEL Standard sind.

Vor geraumer Zeit hatte ich den STM8 Chip gelobt, der ähnlich potent ist wie ein 328P aber auch unter einem Dollar kostet. Sein großer Nachteil war, dass er nur einen C-Compiler aber kein Arduino C++ mitbrachte, womit viele Arduino Bibliotheken schlicht nicht liefen oder mit C-Funktionen nachgebaut werden mussten.

Mit dem LGT8F328P hätten wir jetzt quasi das erweiterte Programm:

  • Ein Stück kostet unter einem Dollar (70-80 Cent)
  • Arduino C++ tauglich
  • Wir haben die meisten Pins, die ein Arduino Pro Mini auch hat (nur bei SPI sollte man aufpassen)

Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!