Zápisník experimentátora
Hierarchy: ATtiny85
Naše dítě mělo nedávno dva roky a jeho nejoblíbenější slova jsou auto a blik. Pojďme si takovýto blik vyrobit pomocí mikrokontroléru ATtiny85. Program Blik
je nejzákladnějším programem pro Arduino, na kterém se naučíte základy ovládání vývodů z mikrokontroléru. V tomto článku si probereme tyto základy a přidáme k nim i cosi navíc.
Jednoduchý příklad basic-blink.ino
, který bliká LED diodou každou sekundu na pinu 0. Pin 0 je nastaven jako výstup, který je jednu sekundu ve stavu logické jednotky a jednu sekundu ve stavu logické nuly. Protože máme na výstup připojenou LED diodu s rezistorem, budeme vidět logickou jednotku jako svítící LED diodu a logickou nulu jako vypnutou LED diodu.
Bude to tak proto, že nastavení logické jednotky nastaví na pinu napětí blízké napájecímu napětí Vcc. Proud bude téct z pinu do rezistoru a přes LED diodu na GND. V případě logické nuly bude na pinu napětí blízké GND a proto nebude přes LED diodu téct žádný proud. Hodnota rezistoru se stanoví tak, abyste nepřekročili maximální proud na pinu. Přesnou hodnotu si můžete najít v datasheetu v části Absolute Maximum Ratings
. Pro ATtiny85 je maximum 40 mA. Na rozsvícení LED diody tolik nepotřebujeme a proto použijeme rezistor 1k a modrou LED diodu. Nemusíte se trápit s tím, proč jsem použil právě takové hodnoty. Zapamatujte si, že to na tento typ experimentů stačí a že je to daleko pod povoleným limitem.
Příklad sice nepředstavuje nic objevné, ale při vývoji některých obvodů i takové jednoduché zapojení usnadní život. Pokud se podíváme blíže na přeložen program, zjistíme, že má sice jen pár řádků, ale zabírá 898 bajtů (IDE 1.8.5). Je jasné, že je v tom skrytá i režie na spuštění programu a nějaké nastavení, které je před námi díky Arduinu skryté, ale i tak se to jeví být dost v porovnání s celkovým množstvím cca 8000 bajtů, které máme k dispozici. Dá se s tím něco udělat? Možné řešení najdete v následující 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 předchozí kapitole jsme blikali LED diodou a spotřebovali jsme na jednoduché blikání 10% dostupné paměti. Nyní použijeme program basic-blink-pin.ino
. Po jeho přeložení zjistíte, že zabírá 468 bajtů. Rozdíl je 430 bajtů.
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);
}
Rozdíly:
Na příkladech jsem chtěl ukázat, že když je to potřeba, máme prostor na zkracování kódu. Pochopitelně je třeba používat zdravý selský a rozum a používat to jen tehdy, když to má smysl. Je třeba si uvědomit, že:
Abyste mohli mikrokontrolér naprogramovat, potřebujete mít:
Programujete pomocí Arduina, nebo přes USBasp.
Obvod můžete zapojit na nepájivém poli, nebo si na to poskládáte vlastní vývojovou desku, která vám ušetří spoustu práce při opakovaném zapojování obvodu.
Vzorec na výpočet rezistoru je R = (Usrc - ULED) / I.
Zdrojový kód se nachází na serveru GitHub.
Po několika letech jsem zkontroloval, zda kód stále funguje i pro IDE 1.8.12. Oba programy pracují spolehlivě. Změnila se jen velikost zkompilovaného kódu v prvním příkladu. Kód má nyní jen 880 bajtů. Velikost druhého kódu zůstala nezměněna. Z toho, že se trochu zmenšila velikost zkompilovaného kódu můžeme usoudit, že došlo nebo k vylepšení kompilátoru, nebo je Arduino jádro lépe navrženo a spotřebuje trochu méně paměti.
09.02.2021