ATtiny13

Základy programování ATtiny13A

Tak, jako u ostatních mikrokontrolerů, i ATtiny dokáže v podstatě jen číst stav vstupů, nebo řídit výstupy.
V následujících jednoduchých příkladech předvedu ty nejzákladnější operace.

Základní struktura programu je podobná, jako při tvorbě programu pro Arduino.
Na začátku je část "setup()", která se vykoná 1x při startu. A pak následuje nekonečná smyčka "loop()".

V programu je možné používat podprogramy, podmínky, smyčky a další běžné řídící struktury - tak jako při programování Arduina.
Vzhledem k malé velikosti paměti RAM, do které se při běhu programu ukládají hodnoty proměnných a návratové adresy podprogramů, je třeba při psaní kódu dávat pozor na přeplnění paměti.

 

1) Nastavení směru jednotlivých pinů a ovládání logických výstupů

Hned na začátku projektu je třeba si rozmyslet, které z vývodů obvodu budou sloužit pro vstupy a které pro výstupy.
K dispozici je celkem 6 vývodů, které jsou označeny jako PB0 až PB5.

Pokud budete používat ATtiny jen pro logické signály, tak na tom až tolik nezáleží - každý z vývodů může být nastaven jako logický vstup, nebo výstup.

Pokud ale chcete v projektu využít i analogové vstupy, je výběr trochu omezenější. Pro obyčejné analogové vstupy je možné použít jen vývody PB5, PB2, PB4 a PB3. Zbylé piny (PB0 a PB1) je možné použít pro analogový komparátor.

Poznámka:

Trochu problémový je pin PB5, který má přednastavenou funkci RESET. Když ho budete potřebovat využít, musíte nejdřív nahrát do ATtiny program, a pak teprve pomocí FUSE bajtu změnit funkci pinu PB5 z RESETU na obyčejný IN/OUT.
Od tohoto okamžiku ale přestane fungovat komunikace, takže když budete chtít provést nějakou změnu v programu, tak budete muset nejdříve provést vysokonapěťový reset pojistek a pak teprve nahrát upravený program.
Pokud to tedy není nutné a v projektu vám stačí jen 5 vstupně/výstupních pinů, tak ten resetovací pin nepoužívejte, nebo ho použijte v tom zamýšleném významu "RESET". 

Takže první příklad - nastavení směru PB0 až PB2 na vstup a PB3 a PB4 na výstup.

DDRB = 0b00011000;  // nastaveni smeru signalu na portu B ("1" = vystup ; "0" = vstup)

 

DDRB v tomto případě není běžná proměnná, ale je to jméno vnitřního registru v ATtiny. Podle binární hodnoty tohoto registru se nastaví piny na vstup, nebo výstup. Použitých je jen spodních 6 bitů (PB0 až PB5).

S nastavením směru jednotlivých vývodů souvisí ještě jeden registr s názvem PORTB
Pokud je vývod nastaven jako vstupní, nastavením příslušného bitu v registru PORTB se k tomuto vývodu připojí vnitřní Pull-Up odpor.
Pokud je vývod nastaven jako výstupní, příslušný bit v registru PORTB ho ovládá.

PORTB = 0b0011100; // pull-up pro vstup (PB2) a zaroven vystupy PB3 a PB4 nastavit do HIGH 

 

 

Pokud je třeba například výstup PB4 přepnout z HIGH do LOW, dělá se to touto konstrukcí:

PORTB &= 0b11101111; // prepnuti vystupu PB4 do LOW - ostatni hodnoty jsou beze zmeny

 

 

Podobnou konstrukcí je možné stejný výstup přepnout z LOW do HIGH beze změny ostatních bitů:

PORTB |= 0b00010000; // prepnuti vystupu PB4 do HIGH - ostatni hodnoty jsou beze zmeny

 

 

 

2) Čtení logického stavu na vstupním pinu

 Pro čtení stavu vstupního pinu slouží registr s názvem PINB.

Takže jednoduchý příklad na čtení pinu PB2 by vypadal třeba takhle:

if ((PINB & 0b00000100) == 0)  
  {
    // na vstupu PB2 je logicka "0"
  }
else 
  {
    // na vstupu PB2 je logicka "1"
  }
 

 


S těmito znalostmi už se můžeme pustit do prvního "HelloWorld" prográmku:

Na pinu PB2 bude tlačítko.
Na pinech PB3 a PB4 budou LED diody.

Požadovaná funkce:
Když bude tlačítko rozepnuté (kvůli vnitřnímu Pull-Up odporu bude na pinu PB2 udržovaná logická "1") bude svítit LED na pinu PB4. LEDka na PB3 je zhasnutá. Když se tlačítko sepne (přizemní) PB4 zhasne a rozsvítí se PB3.


(celé schéma na kliknutí)

Poznámka:

Program se do ATtiny nahrává přes standardní ISP komunikaci (MISO / MOSI / SCK / RESET)
Nahrávání programu se budu věnovat v další lekci, teď jen upozorním na to, že pokud je ke komunikačním vývodům něco připojeno, mohou být s nahráním programu problémy. LED s odpory nevadí - na nich je vidět blikání při nahrávání programu. Problémem jsou ale tlačítka, nebo analogové vstupy. Ty je lepší před nahráním programu rozepnout nebo odpojit.

// Program pro stridave pepinani LED na pinech PB3 a PB4 v zavislosti na logickem stavu na pinu PB2.

void setup()
 { 
   DDRB  = 0b00011000;  // nastaveni smeru signalu na portu B ("1" = vystup ; "0" = vstup)
   PORTB = 0b00001100;  // pull-up pro vstup (PB2) a zaroven vystupy PB3 rozsvitit a PB4 zhasnout 
 }

void loop()
 {
   if ((PINB & 0b00000100) == 0)  
     {
         // na vstupu PB2 je logicka "0" = (tlacitko sepnuto) 
       PORTB &= 0b11101111; // prepnuti vystupu PB4 do LOW - ostatni hodnoty jsou beze zmeny
       PORTB |= 0b00001000; // prepnuti vystupu PB3 do HIGH - ostatni hodnoty jsou beze zmeny
     }
   else 
     {
         // na vstupu PB2 je logicka "1" = (tlacitko rozepnuto)
       PORTB &= 0b11110111; // prepnuti vystupu PB3 do LOW - ostatni hodnoty jsou beze zmeny
       PORTB |= 0b00010000; // prepnuti vystupu PB4 do HIGH - ostatni hodnoty jsou beze zmeny
  
     }
 }
 

 

 

 

 


úvodní strana webu AstroMiK.org

poslední úprava stránky 18.8.2015