• 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, na ktorom je elektronická súčiastka, súčiastka obvodu, pasívna súčasť obvodu, elektrinžinierstvo

Automaticky generovaný popis

          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, na ktorom je text, písmo, snímka obrazovky, diagram

Automaticky generovaný popis

          Obrázok 2 Označenie mikrokontrolérov tinyAVR

          Obrázok, na ktorom je text, snímka obrazovky, číslo, rovnobežný

Automaticky generovaný popis

          Obrázok 3 Prehľad mikrokontrolérov tinyAVR

           

          Obrázok, na ktorom je text, snímka obrazovky, číslo, rovnobežný

Automaticky generovaný popis

          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?3UKF

          Prí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.

          Takže pustime sa do inštalácie dosky s názvom "megaTinyCore":

          1. Klikneme v menu na „Súbor -> Vlastnosti“ a otvorí sa okno:

          Obrázok, na ktorom je text, elektronika, snímka obrazovky, displej

Automaticky generovaný popis

          Obrázok 5 Zobrazenie okna Vlastnosti

          Obrázok, na ktorom je text, snímka obrazovky, softvér, webová stránka

          Obrázok 6 Do okna Vlastnosti zapíšeme URL adresu balíčka

          1. 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.
          2. V Manažéri Dosiek vyhľadáme a nainštalujeme balíček pre tinyAVR.
            Vyberieme „Nástroje-> Doska->Manažér dosiek“

          Obrázok, na ktorom je text, snímka obrazovky, číslo, písmo

Automaticky generovaný popis

          Obrázok 7 Otvorenie manažéra dosiek

           

          1. Do vyhľadávacieho riadku napíšeme: megatinycore

          Obrázok, na ktorom je text, elektronika, snímka obrazovky, softvér

Automaticky generovaný popis

          Obrázok 8 Výber balíčka megaTinyCore v Manažérovi dosiek

           

          1. 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, na ktorom je text, elektronika, snímka obrazovky, softvér

Automaticky generovaný popis

          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, na ktorom je text, snímka obrazovky, písmo, dokument

Automaticky generovaný popis

          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ť.


          LCQT-SOIC16 - Aries - IC Adapter, 16-SOIC to 16-DIP, 2.54mm Pitch Spacing

          Obrázok 11 Adaptér SOIC16 na DIP16 na prispájkovanie mikrokontroléra



          Obrázok, na ktorom je elektronika, súčiastka obvodu, elektronická súčiastka, pasívna súčasť obvodu

Automaticky generovaný popis

          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, na ktorom je text, snímka obrazovky, písmo, diagram

Automaticky generovaný popis

          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, na ktorom je elektrinžinierstvo, súčiastka obvodu, elektronická súčiastka, elektronika

Automaticky generovaný popis

          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 milisekundach

          int 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, na ktorom je text, diagram, rad, písmo

Automaticky generovaný popis

          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.


          Obrázok, na ktorom je text, snímka obrazovky, písmo, čísloAutomaticky generovaný popis

           

          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

          Mgr. Martin Janček

          29.1.2024

          jancekm@gsa.sk