Programování Arduino a ATtiny pro MPPT měnič Siton v Linuxu

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
ATtiny85 pinout
Arduino Nano ATmega 328P pinout
Ukázka finálního zapojení

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ří!

Comments are closed.