Fyzika s Arduinom
Programovanie mikrokontrolérov tinyAVR v prostredí Arduino
V tomto príspevku predstavím rodinu mikrokontrolérov tinyAVR® 0., 1. a 2. série, ktoré môžu byť vhodnou náhradou za staršie mikrokontroléry od Atmelu ako napr. ATtiny84, ATtiny85, ale môžeme ich použiť vo svojich projektoch aj namiesto obľúbeného ATMega328P, či podobných 8-bitových mikrokontrolérov. Prvýkrát som sa s nimi zoznámil, keď som hľadal do svojich projektov náhradu za populárny ATMega328P, ktorý je použitý aj v Arduino UNO. Potreboval som mikrokontrolér, s podobnými možnosťami aké ponúka ATMega328P, ktorý bude v rozumnom púzdre, aby sa s ním dobre pracovalo a hlavne, aby sa dal programovať na platforme Arduino.
Poďme sa teda na rodinu mikrokontrolérov tinyAVR pozrieť bližšie.
Prehľad mikrokontrolérov tinyAVR®
Obrázok 1 Niektoré mikrokontroléry z rodiny tinyAVR
Rodina mikrokontrolérov tinyAVR® zahŕňa 3 série, či rodiny, 8 bitových mikrokontrolérov od firmy Microchip. Jednotlivé mikrokontroléry sa líšia hardvérovou výbavou a počtom nožičiek. K dispozícii sú v rôznych typoch puzdier. V tomto príspevku sa budeme venovať tým, ktoré sa vyrábajú v puzdre SOIC, pretože s týmto puzdrom sa v amatérskych podmienkach dobre pracuje a na spájkovanie stačí bežná mikrospájkovačka. Rýchly pohľad na technické parametre napovie viac:
- Interný 20 MHz oscilátor
- Až 32 KB pamäte Flash
- Až 3KB pamäte SRAM
- Až 2 10-bitové analógovo-digitálne prevodníky
- Periférny dotykový ovládač (PTC)
- Kontrola cyklickej redundancie (CRC).
- 16-bitové hodiny reálneho času a časovač periodických prerušení
- Periférne zariadenie s konfigurovateľnou vlastnou logikou (CCL).
- Až 6-kanálový systém periférnych udalostí
- Analógový komparátor so škálovateľným referenčným vstupom
- Konfigurovateľné, interne generované referenčné napätie
- USART/SPI/dvojrežimový TWI
- Rozsah prevádzkového napätia 1,8V–5,5V
- Rozsah prevádzkových teplôt –40˚ až 125˚C
Toto sú maximálne hodnoty technických parametrov všetkých sérií. Konkrétny mikrokontrolér môže mať technické parametre iné, najmä čo sa týka pamäte SRAM, Flash, ale aj iných parametrov.
Mikrokontroléry tinyAVR sú vhodné pre širokú škálu aplikácií vrátane priemyselných, tiež pre automobilový priemysel a uplatnenie nájdu aj v low-power aplikáciach, teda všade, kde kladieme dôraz na nízku spotrebu energie, teda pre aplikácie napájané z batérií. Praktické skúsenosti z projektov, kde som použil najmä tie typy, ktoré ponúkajú viac pinov a bohatšie hardvérové vybavenie, konkrétne ATtiny3226, ATtiny1614 a ATtiny1624, mi potvrdili, že stoja za to, aby som ich využitiu venoval pozornosť.
Mikrokontroléry používajú jednotné označenie, ktoré je odvodené od veľkosti pamäte Flash, poradového čísla série, či „rodiny“ a počtu vývodov púzdra:
Obrázok 2 Označenie mikrokontrolérov tinyAVR
Obrázok 3 Prehľad mikrokontrolérov tinyAVR
Obrázok 4 Technické parametre mikrokontrolérov tinyAVR 0. a 1. série
Porovnanie všetkých mikrokontrolérov tiny AVR 0., 1. a 2. série nájdete na:
http://www.technoblogy.com/show?3UKFPríprava prostredia Arduino IDE
Teraz bude naším cieľom vysvetliť, ako pripraviť prostredie Arduino IDE, aby sme v ňom mohli programovať mikrokontroléry rodiny tinyAVR®. Predpokladám, že čitateľ má aspoň základné skúsenosti s programovaním niektorej z oficiálnych dosiek Arduino, či už Arduino UNO, Arduino Nano alebo inej.
„Čo je potrebné, aby som mohol v Arduino IDE programovať mikrokontroléry tinyAVR?“
Originálna inštalácia prostredia Arduino IDE neobsahuje podporu pre túto rodinu mikrokontrolérov. Prvým krokom je teda doinštalovanie tzv. dosky, teda podpory pre mikrokontroléry tinyAVR z externého zdroja. Skôr než si povieme ako na to, treba upozorniť, že autor rozširujúcej dosky, ktorú použijeme (Spence Konde), dôrazne odporúča verziu Arduino IDE 1.8.13, staršie verzie nie sú vhodné, novšie môžu zasa pri inštalácii dosky hlásiť chybu. Verzia Arduino IDE 2 nie je podľa autora rozširujúcej dosky podporovaná. Pre získanie podrobných informácií odporúčam preštudovať informácie, prípadne zdrojový kód balíčka rozširujúcej dosky na GitHube: https://github.com/SpenceKonde/megaTinyCore/blob/master/README.md
Ja mám nainštalované prostredie Arduino IDE 1.8.19 pod Windows 11 a nemal som žiaden problém pri inštalácii balíčka pre tinyAVR. Osobne radšej používam prostredie Visual Studio Code, pretože sa v ňom pracuje oveľa komfortnejšie, no vyžaduje si trocha zložitejšiu konfiguráciu, ku ktorej sa dostanem v niektorom z ďalších príspevkov.
Pozn. autora 18.10.2024 - Balíček bezproblémovo funguje aj v aktuálnej verzii Arduino IDE 2.3.3. Programovanie Arduina vo Visual Studio Code som prestal používať, pretože podpora doplnku Arduino vo VSC skončila.
Takže pustime sa do inštalácie dosky s názvom "megaTinyCore":
- Klikneme v menu na „Súbor -> Vlastnosti“ a otvorí sa okno:
Obrázok 5 Zobrazenie okna Vlastnosti
Obrázok 6 Do okna Vlastnosti zapíšeme URL adresu balíčka
- Do poľa Manažér prídavných dosiek URL napíšeme adresu:
http://drazzy.com/package_drazzy.com_index.json
A potvrdíme OK. - V Manažéri Dosiek vyhľadáme a nainštalujeme balíček pre tinyAVR.
Vyberieme „Nástroje-> Doska->Manažér dosiek“
Obrázok 7 Otvorenie manažéra dosiek
- Do vyhľadávacieho riadku napíšeme:
megatinycore
Obrázok 8 Výber balíčka megaTinyCore v Manažérovi dosiek
- Vyberieme balíček „megaTinyCore“ od Spence Konde a najnovšiu verziu (momentálne 2.6.10). Klikneme na Nainštalovať. Inštalácia trvá niekoľko minút, podľa rýchlosti pripojenia k internetu a výkonu počítača.
Po úspešnej inštalácii pribudne zoznam podporovaných mikrokontrolérov tinyAVR v položke:
„Nástroje -> Doska -> megaTinyCore“Obrázok 9 Výber mikrokontroléra, pre ktorý vytvárame program
Z ponuky zvolíme typ mikrokontroléra, pre ktorý vytvárame program. Stačí si všimnúť prvé štyri riadky, ktoré nekončia na „w/Optiboot“. Vyberieme riadok so skupinou mikrokontrolérov, ktorá obsahuje náš mikrokontrolér. Potom v riadku „Chip:“ vyberieme konkrétny typ mikrokontroléra. V ďalšom riadku môžeme nastaviť taktovaciu frekvenciu procesora. Predvolená frekvencia je 20 MHz. Ak budete mikrokontrolér napájať nižším napätím ako 5 V, bude potrebné taktovaciu frekvenciu znížiť. Viac informácii nájdete v datasheete.
Ďalej vyberieme, ktorý programátor použijeme na nahratie programu. Je na výber napr. MPLAB PICkit 4, prípadne si môžeme programátor vyrobiť z USB prevodníka FT232RL, vtedy vyberieme Serial UPDI, prípadne iný, podľa toho, ktorý máme k dispozícii.
Nakoniec vyberieme Port, na ktorom je pripojený programátor, napr. COM6.
Obrázok 10 Výber mikrokontroléra a podrobné nastavenia
V tomto okamihu je všetko pripravené na nahratie programu do mikrokontroléra.
Náš prvý program
Na naše dnešné experimentovanie som vybral Attiny1624 v púzdre SOIC14. Aby sme mohli mikrokontrolér pripojiť do kontaktného poľa tzv. breadboardu, musíme použiť adaptér z SOIC na DIP.
Na výber sú dve možnosti. Môžeme si zaobstarať alebo vyrobiť doštičku plošného spoja s kolíkovými lištami a mikrokontrolér na ňu prispájkovať, alebo si môžeme zakúpiť adaptér, do ktorého mikrokontrolér jednoducho vložíme a po použití ho môžeme z adaptéra vybrať.
Obrázok 11 Adaptér SOIC16 na DIP16 na prispájkovanie mikrokontroléra
Obrázok 12 Adaptér zo SOIC20 na DIP20 kúpime za pár eur na Aliexprese
Naprogramujeme jednoduchý blikač s tlačítkom a LED. Keď je tlačítko stlačené LED bliká rýchlo, keď nie je stlačené bliká pomaly.
Obrázok 13 Rozloženie nožičiek ATtiny1624
Anódu diódy Led pripojíme cez rezistor 220 R na pin PB1 a katódu na GND. Tlačítko pripojíme na pin PB0 a GND.
Vstupné a výstupné piny sa v programe odporúča pomenovať konštantami s názvom „PIN_názovPinu“ napr. PIN_PB0 a PIN_PB1, nie len číslom napr. 2.
Do breadboardu zapojíme LEDku, rezistor, tlačidlo a mikrokontrolér s prepojovacími vodičmi. Vpravo na fotografii vidíme prevodník FT232RL, ktorý použijeme ako programátor na nahratie programu do mikrokontroléra.Obrázok 14 Zapojenie s ATtiny1624. Vpravo vidíme programátor vyrobený z FT232RL
Do Arduino IDE napíšeme program:const int led = PIN_PA4;
const int tlacidlo = PIN_PA5;const int cas1 = 500; //cas pomaleho blikania v milisekundach
const int cas2 = 50; //cas rychleho blikania v milisekundachint cas;
void setup() {
pinMode(tlacidlo, INPUT_PULLUP);
pinMode(led, OUTPUT);
}void loop() {
if (digitalRead(tlacidlo) == HIGH)
cas = cas1;
else
cas = cas2;digitalWrite(led, HIGH);
delay(cas);
digitalWrite(led, LOW);
delay(cas);
}Nahratie programu do mikrokontroléra
Na nahratie programu do mikrokontroléra potrebujeme programátor. Asi najjednoduchšou a najlacnejšou cestou je použitie prevodníka USB na Serial FT232RL, ktorý sa dá zohnať za cca 3 € napr. na https://techfun.sk/produkt/prevodnik-ft232rl-s-mini-usb-5v-3-3v/. Prevodník prispôsobíme tak, aby sme ho mohli pripojiť na programovací pin mikrokontroléra UPDI.
Obrázok 15 Úprava sériového prevodníka na UPDI
K prevodníku pripojíme Schottkyho rýchlu spínaciu diódu D1 a rezistor R1 1k podľa schémy vyššie. K mikrokontroléru pripojíme tri vodiče VCC, GND a UPDI. Na prevodníku treba prepojku (jumper) dať do pozície 5V. Prevodník tak bude dodávať aj napájacie napätie pre mikrokontrolér vo vodiči VCC.
- V položke menu Nástroje vyberieme dosku, ktorá obsahuje náš mikrokontrolér, teda Attiny3224/1624/...
- V riadku Chip vyberieme Attiny1624. Ostatné nastavenia môžeme ponechať bez zmeny.
- Port vyberieme podľa toho, na ktorom je pripojený náš prevodník FT232RL.
- Programátor vyberieme SerialUPDI – 230400 baud.
Klikneme na tlačidlo Nahrať
Po nahratí programu do mikrokontroléra by sa mala začať pomaly blikať LED-ka a po stlačení tlačidla by mala blikať rýchlo.
Záver
Takže naše dnešné experimentovanie je na konci. Vieme si už nakonfigurovať prostredie Arduino tak, aby sme v ňom mohli písať programy pre ľubovoľný mikrokontrolér tinyAVR. Tiež sme si ukázali, ako vyrobíme programátor, ktorý potrebujeme na nahratie hotového programu do mikrokontroléra. Vyrobili sme ho z prevodníka FT232RL.
Verím, že bol tento príspevok pre vás užitočný a pomohol vám hlbšie vniknúť do tajov programovania mikrokontrolérov.
Užitočné odkazy
- Technické info (datasheets)
- Prevodník FT232RL https://techfun.sk/produkt/prevodnik-ft232rl-s-mini-usb-5v-3-3v/
- Kde kúpiť?
Mgr. Martin Janček
29.1.2024
jancekm@gsa.sk