Zápisník experimentátora
Hierarchy: ATtiny85
Naše dieťa malo nedávno dva roky a jeho najobľúbenejšie slová sú auto a blik. Poďme si takýto blik vyrobiť pomocou mikrokontroléra ATtiny85. Program Blik
je najzákladnejším programom pre Arduino, na ktorom sa naučíte základy ovládania vývodov z mikrokontroléra. V tomto článku si preberieme tieto základy a pridáme k nim aj čosi navyše.
Jednoduchý príklad basic-blink.ino
, ktorý bliká LED diódou každú sekundu na pine 0. Pin 0 je nastavený ako výstup, ktorý je jednu sekundu v stave logickej jednotky a jednu sekundu v stave logickej nuly. Pretože máme na výstup pripojenú LED diódu s rezistorom, budeme vidieť logickú jednotku ako svietiacu LED diódu a logickú nulu ako vypnutú LED diódu.
Bude to tak preto, lebo nastavenie logickej jednotky nastaví na pine napätie blízke napájaciemu napätiu Vcc. Prúd bude tiecť z pinu do rezistora a cez LED diódu na GND. V prípade logickej nuly bude na pine napätie blízke GND a preto nebude cez LED diódu tiecť žiaden prúd. Hodnota rezistora sa stanovuje tak, aby ste neprekročili maximálny prúd na pine. Presnú hodnotu si môžete nájsť v datasheete v časti Absolute Maximum Ratings
. Pre ATtiny85 je maximum 40 mA. Na rozsvietenie LED diódy toľko nepotrebujeme a preto použijeme rezistor 1k a modrú LED diódu. Nemusíte sa trápiť s tým, prečo som použil práve takéto hodnoty. Zapamätajte si, že to na tento typ experimentov stačí a že je to ďaleko pod povoleným limitom.
Príklad síce nepredstavuje nič objavné, ale pri vývoji niektorých obvodov aj takéto jednoduché zapojenie uľahčí život. Ak sa pozrieme bližšie na preložený program, zistíme, že má síce iba pár riadkov, ale zaberá 898 bajtov (IDE 1.8.5). Je jasné, že je v tom skrytá aj réžia na spustenie programu a nejaké nastavenie, ktoré je pred nami vďaka Arduinu skryté, ale aj tak sa to javí byť dosť v porovnaní s celkovým množstvom cca 8000 bajtov, ktoré máme k dispozícii. Dá sa s tým niečo urobiť? Možné riešenie nájdete v nasledujúcej kapitole.
const int led = 0;
const int sleep = 1000;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(sleep); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(sleep); // wait for a second
}
V predchádzajúcej kapitole sme blikali LED diódou a spotrebovali sme na jednoduché blikanie 10% dostupnej pamäte. Teraz použijeme program basic-blink-pin.ino
. Po jeho preložení zistíte, že zaberá 468 bajtov. Rozdiel je 430 bajtov.
const int led = 0;
const int sleep = 1000;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
bitSet(DDRB, led);
}
// the loop routine runs over and over again forever
void loop() {
bitSet(PINB, led);
delay(sleep);
}
Rozdiely:
Na príkladoch som chcel ukázať, že keď je to potrebné, máme priestor na skracovanie kódu. Pochopiteľne treba používať zdravý sedliacky a rozum a používať to len vtedy, keď to má zmysel. Treba si uvedomiť, že:
Aby ste mohli mikrokontrolér naprogramovať, potrebujete mať:
Programujete pomocou Arduina, alebo cez USBasp.
Obvod môžete zapojiť na breadboarde, alebo si na to poskladáte vlastnú vývojovú dosku, ktorá vám ušetrí veľa práce pri opakovanom zapájaní obvodu.
Vzorec na výpočet rezistora je R = (Usrc - ULED) / I.
Zdrojový kód sa nachádza na serveri GitHub.
Po niekoľkých rokoch som skontroloval, či kód stále funguje aj pre IDE 1.8.12. Oba programy pracujú spoľahlivo. Zmenila sa len veľkosť skompilovaného kódu v prvom príklade. Kód má teraz len 880 bajtov. Veľkosť druhého kódu ostala nezmenená. Z toho, že sa trochu zmenšila veľkosť skompilovaného kódu môžeme usúdiť, že došlo alebo k vylepšeniu kompilátora, alebo je Arduino jadro lepšie navrhnuté a spotrebuje trochu menej pamäte.
21.12.2017