LGT8F328P MiniEVB
« | 21 Nov 2020 | »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
Mikrocontroller.
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 …
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.
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).
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 Mikrocontrollerprojekt, 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)