Programování Arduino a ATtiny pro MPPT měnič Siton v Linuxu
Siton 210 je stavebnice MPPT měniče určeného pro optimalizaci využití fotovoltaických panelů a jejich připojení k bojleru (kdy měnič převádí stejnosměrný proud na střídavý). Pro tuto stavebnici je potřeba jednodeskový počítač Arduino Nano a (volitelně) mikroprocesor ATtiny85, které je potřeba naprogramovat. V tomto článku ukážu, jak naprogramovat Arduino Nano Atmega328P a mikroprocesor ATtiny85 v Linuxu (konkrétně Fedora 38) právě pro tento měnič.
Nejprve ukážu jak si nastavit systém, nainstalovat potřebný software a připojit a otestovat Arduino. V druhém kroku si naprogramujeme ATtiny85 pomocí onoho Arduina a to tak, že Arduino využijeme jako ISP programátor. Ve třetím a posledním kroku nahrajeme do Arduina kód pro Siton.
Součástky
- Klon Arduino Nano Atmega 328P micro USB (z AliExpressu)
- ATtiny85 (z AliExpressu)
- Kondenzátor 10uF
- Micro USB kabel
- Drátky a breadboard
Příprava systému
Přístup k sériovému portu
Úplně prvním krokem bude přidání vašeho uživatele do dialout grupy. To je skupina, která jejím uživatelům poskytuje plný přístup k sériovým portům, což bude potřeba na programování dvou zmíněných čipů:
$ sudo usermod -a -G dialout $USER
Teď doporučuji restart systému (teoreticky by mělo stačit odhlášení a opětovné přihlášení, ale prakticky je to lepší vypnout a zapnout).
Instalace Arduino IDE v2
Arduino IDE v2 je dostupné ve formě flatpaku na FlatHubu – https://flathub.org/apps/cc.arduino.IDE2 stačí jít na stránku a kliknout na “Install”, případně zavolat instalaci z příkazové řádky:
$ sudo dnf install fedora-flathub-remote
$ sudo flatpak install cc.arduino.IDE2
Instalace podpory Attiny do Arduino IDE v2
V Arduino IDE menu “File > Preferences…”
Do “Additional board managers URLs:” přidat “https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json”
Pokud už tam máte jiné adresy, tak je jen oddělit čárkou “,” (mezera ani středník nefungují) a kliknutím na OK zavřít nastavení.
Pak v menu “Tools > Board > Boards Manager…”, najít “attiny” balíček a nainstalovat jej kliknutím na “INSTALL”.
Test Arduina
Připojení Arduina k počítači
Připojte Arduino Nano přes USB do počítače.
Dioda PWR
na Arduinu by se měla rozsvítit.
Kernel by měl Arduino detekovat, což si ověříme přes dmesg
:
$ dmesg
...
[ 4027.947930] usb 1-2: new full-speed USB device number 8 using xhci_hcd
[ 4028.076113] usb 1-2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.34
[ 4028.076129] usb 1-2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 4028.076136] usb 1-2: Product: USB Serial
[ 4028.084685] ch341 1-2:1.0: ch341-uart converter detected
[ 4028.085568] usb 1-2: ch341-uart converter now attached to ttyUSB0
Ještě si můžeme zkusit vypsat všechny sériové zařízení:
$ ls -l /dev/ttyUSB* /dev/ttyACM*
ls: cannot access '/dev/ttyACM*': No such file or directory
crw-rw----. 1 root dialout 188, 0 6. kvě 10.24 /dev/ttyUSB0
Tím že mám sériové zařízení připojeno jen jedno a to ono Arduino, tak je to jednoduché a vidím, že se hlásí jako /dev/ttyUSB0
.
Naprogramování testovacího programu
V Arduino IDE v2 v menu “Tools > Board > Arduino AVR boards” vybrat “Arduino Nano”
Zvolit port “Tools > Port” (v mém případě ono “/dev/ttyUSB0”)
Zvolit procesor “Tools > Processor > ATmega328P (Old bootloader)” (ve vašem případě možná bude třeba zvolit jiný procesor, chce to vyzkoušet)
Do skeče zkopírujte testovací program na blikání diody:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
for(int i=0; i < 3; i++) {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
}
Program zkompilujeme a nahrajeme do Arduina pomocí ikony upload (ikona “šipky doprava” v horní liště Arduino IDE). Na konci logu by jsme měli vidět něco jako:
....
avrdude: 934 bytes of flash written
avrdude done. Thank you.
Nyní by měla na Arduinu blikat druhá dioda (Na mém kusu označená jako “L
”).
Pokud se nahrání (uploading) nedaří a vidíte něco jako:
...
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
avrdude done. Thank you.
Failed uploading: uploading error: exit status 1
tak zkuste změnit typ procesoru. Například z “ATmega328P (Old bootloader)” na “ATmega328P” atp.
Programování ATtiny85
Jak jsem psal v úvodu, pro naprogramování ATtiny85 nebudu používat dedikovaný ISP programátor, ale místo něj využiji přímo Arduino Nano, proto taky nejdříve naprogramujeme ATtiny a až poté Arduino.
Nahrání ISP programu do Arduina
Připojíme Arduino přes USB.
Otevřeme odpovídající zdrojový kód: V Arduino IDE v2 v menu:
“File > Examples > 11.ArduinoISP > ArduinoISP”.
Zvolíme programátor “Tools > Programmer > AVRISP mkII” ten by tam měl být ve výchozím stavu, ale pokud jste si už s Arduino IDE hráli, tak si to pro jistotu zkontrolujte.
Deska, port i procesor jsou pořád stejné tak jak jsme je nastavili v předchozím kroku, kdy jsme Arduino testovali.
Nyní program nahrajeme pomocí ikony upload a tím z našeho Arduina uděláme ISP programátor.
Propojení Arduina a ATtiny85
Nyní Arduino odpojíme od počítače a propojíme je s ATtiny85. Ideální bude je propojit na breadboardu, ale pokud breadboard nemáte, tak bude fungovat i přímé propojení nožiček drátky.
V tomto kroku budeme potřebovat kondenzátor 10uF, který zapojíme mezi RST (RESET) a GND Arduina, aby jsme zabránili restartu během nahrávání kódu do ATtiny85.
Propojení bude následující:
- Arduino Nano pin D13 -> ATtiny85 pin 2 (vývod z pouzdra číslo 7)
- Arduino Nano pin D12 -> ATtiny85 pin 1 (vývod z pouzdra číslo 6)
- Arduino Nano pin D11 -> ATtiny85 pin 0 (vývod z pouzdra číslo 5)
- Arduino Nano pin D10 -> ATtiny85 Reset (vývod z pouzdra číslo 1)
- Arduino Nano pin +5V -> ATtiny85 5V (vývod z pouzdra číslo 8)
- Arduino Nano pin GND -> ATtiny85 GND (vývod z pouzdra číslo 4)
- Arduino RST -> Anoda (+) kondenzátoru 10uF
- Arduino GND -> Katoda (-) kondenzátoru 10uF
Nastavení Arduino IDE k programování ATtiny85 skrze Arduino
Nejdříve si otevřeme zdrojový kód pro Attiny “I2C_Podsvetleni_LCD_Attiny.ino
”, který je zabalený v archivu s firmwarem verze 5.3: http://tnweb.tode.cz/wp-content/uploads/2022/01/FW_53.zip
Teď provedeme nastavení:
V menu “Tools > Board > attiny” vybrat “ATtiny25/45/85”.
V menu “Tools > Clock” vybrat “Internal 1MHz”.
V menu “Tools > Processor” vybrat “ATtiny85”.
V menu “Tools > Programmer” vybrat “Arduino as ISP”.
Nyní připojíme Arduino k počítači přes USB.
V menu “Tools > Port” by jsme měli mít nastavený správný port, který se tam objevil po té co jsme připojili USB Arduina k počítači (v mém případě onen “/dev/ttyUSB0”).
Programování ATtiny85
Jako první krok dáme:
V menu “Tools > Burn Bootloader”
Ve skutečnosti nevypálíme žádný bootloader, ale nastavíme tím do ATtiny85 naši zvolenou frekvenci hodin (těch Internal 1MHz).
Vše by mělo proběhnout úspěšně a na konci logu by jsme měli vidět něco jako:
...
avrdude: Device signature = 0x1e930b (probably t85)
avrdude: Send: Q [51] [20]
avrdude: Recv: . [14]
avrdude: Recv: . [10]
avrdude done. Thank you.
Jako druhý krok provedeme samotné programování:
V menu “Sketch > Upload Using Programmer”.
Tímto se zkompiluje a nahraje onen zdrojový kód “I2C_Podsvetleni_LCD_Attiny.ino
” co máme aktuálně otevřený. Vše by opět mělo proběhnout úspěšně a na konci logu by jsme měli vidět něco jako:
avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/home/tojaj/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf"
User configuration file is "/home/tojaj/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/ttyUSB0
Using Programmer : stk500v1
Overriding Baud Rate : 19200
AVR Part : ATtiny85
Chip Erase delay : 400000 us
PAGEL : P00
BS2 : P00
RESET disposition : possible i/o
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 12 4 0 no 512 4 0 4000 4500 0xff 0xff
flash 65 6 32 0 yes 8192 64 128 30000 30000 0xff 0xff
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
Programmer Type : STK500
Description : Atmel STK500 Version 1.x firmware
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e930b (probably t85)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/home/tojaj/.var/app/cc.arduino.IDE2/cache/arduino/sketches/F817E3EE3F023C1070150E0947C6A447/I2C_Podsvetleni_LCD_Attiny.ino.hex"
avrdude: writing flash (1246 bytes):
Writing | ################################################## | 100% 1.85s
avrdude: 1246 bytes of flash written
avrdude done. Thank you.
ATtiny85 je hotovo
V tuto chvíli máme procesor ATtiny85 naprogramovaný pro zabudování do Sitonu a můžeme odpojit Arduino od USB a rozpojit zapojení na breadboardu.
Programování Arduina Nano
Otevřeme si zdrojový kód pro Arduino “Solar_inverter54.27.ino
”, který je zabalený v archivu s firmwarem verze 5.4:
http://tnweb.tode.cz/wp-content/uploads/2022/06/FW_5.4.27.ino_.zip
Připojíme již samotné Arduino přes USB do počítače a ujistíme se, že veškeré nastavení, je opět přizpůsobeno programování Arduina a nikoli ATtiny skrze Arduino:
“Tools > Board > Arduino AVR boards” vybrat “Arduino Nano”
“Tools > Port” (v mém případě ono “/dev/ttyUSB0”)
“Tools > Processor > ATmega328P (Old bootloader)”
“Tools > Programmer” vybrat “AVRISP mkII”
Nyní program nahrajeme zkompilujeme a nahrajeme pomocí ikony upload a tím je naše Arduino Nano připraveno pro zabudování do Sitonu.
avrdude: 20906 bytes of flash written
avrdude done. Thank you
Závěr
Ještě poznámka, ač můj klon Arduina jsem programoval s nastavením procesoru jako “ATmega328P (Old bootloader)”, tak jsem (zatím) nenarazil na problém s nekorektně fungujícím bootloaderem (http://tnweb.tode.cz/optiboot-v-arduino-nano-a-pro-mini/), před kterým autor Sitonu u Arduin se starším typem bootloaderů varuje.
Ať se daří!