Led blink sa ATmega48/88/168

 

slika_hardver

 Led blink je jednostavan program kojim se pali i gasi led dioda povezana na mikrokontroler. Program je napisan koristeći C programski jezik. Za pisanje i prevođenje programa koristi se AVR studio. Prevođenjem programskog koda dobija se odgovarajuća hex datoteka koja se pomoću programatora prenosi u mikrokontroler. Šema spajanja mikrokontrolera i led diode prikazana je na sljedećoj slici:


slika_shema

Šema spoja (klikni na sliku da uvećaš)

Sa šeme se vidi da je led dioda povezana na PORTD, pin P4 preko otpornika od 330 ohm. U praktičnom primjeru na mikrokontroler je priključen kvarc kristal od 10 MHz. Potrebno je obratiti pažnju da se mikrokontroleri ATmega48, ATmega88 i ATmega168 isporučuju podešeni tako da rade koristeći interni RC oscilator podešen na frekvenciju rada od 1 MHz. Ukoliko se koristi interni oscilator, tada se mogu izostaviti elektronske komponente C6, C7 i kristal Q, čime se dobija još jednostavnija šema. Bez obzira koji se oscilator koristi i koja je frekvencija rada u pitanju, prije prevođenja programskog koda potrebno je u AVR studiu postaviti odgovarajuću vrijednost frekvencije, što će biti pokazano u toku kreiranja projekta.

Program se piše u AVR studiu, pa je potrebno pokrenuti AVR studio i kreirati novi projekat klikom na Project->New Project pri čemu se otvara prozor prikazan na slici 1. Na ovom prozoru potrebno je selektovati tip projekta AVR GCC, a u Project name upisati naziv projekta, u ovom slučaju naziv je Led_blink. Upisivanjem naziva projekta automatski se upisuje i ime programskog koda sa .c ekstenzijom. Dio Location odnosi se na putanju do mjesta na kojem će projekat biti sačuvan, a u ovom primjeru to je D:\My Documents\AVR projekti\Led blink.

 

slika_1

Slika 1 (klikni na sliku da uvećaš)

 

Klikom na tipku Next otvara se prozor u kome je potrebno selektovati odgovarajući programator ili razvojno okruženje i tip mikrokontrolera (slika 2).

 

slika_2

Slika 2 (klikni na sliku da uvećaš)

 

U ovom slučaju potrebno je selektovati AVR Dragon (iako se AVR Dragon u ovom slučaju ne koristi za programiranje mikrokontrolera, koristiće se programator prethodno opisan ovdje) i mikrokontroler Atmega48. Klikom na tipku Finish kreira se odgovarajući projekat i otvara se prozor za pisanje programskog koda.
Programski kod kojim se pali i gasi led dioda svake sekunde izgleda ovako:

 

 /*********************************
*        Led Blink       

*    Naziv: Led_blink.c      

*     Autor: Elektrospin.info       

*     Datum: 25.05.2009        

*     Mikrokontroler: ATmega48  

********************************/

#include <avr/io.h> // uključuje definisanje IO za odgovarajući mcu
#include <util/delay.h> //potrebno za funkcije za čekanje, busy-wait delay loops

// funkcija za cekanje jedne sekunde
void f_cekaj(void)
{
    for(int i=0;i<40;i++)
    _delay_ms(25); // funkcija za čekanje 25ms

}
int main(void)
{
    // inicijalizacija
    DDRD = (1<<PD4); //Inicijalizacija PORTD, Pin4 kao izlazni Pin
    // start petlja
        while(1)
    {
        PORTD = 0x10; // upali led diodu
        f_cekaj(); // sačekaj 1 sekundu
        PORTD = 0x00; // ugasi led diodu
        f_cekaj(); // sačekaj 1 sekundu
    }
}

 

Napisan program u AVR studiu izgleda kao na sljedećoj slici (slika 3):

 

slika_3

Slika  3 (klikni na sliku da uvećaš)

 

Prije nego što se izvrši prevođenje programskog koda i generisanje hex datoteke, potrebno je podesiti frekvenciju rada mikrokontrolera, a to se radi otvaranjem prozora za podešavanje parametara Project->Configuration Options pri čemu se otvara sljedeći prozor:

 

slika_4

Slika 4 (klikni na sliku da uvećaš)

 

U ovom slučaju potrebno je unjeti vrijednost od 10 MHz u polje Frequency. Potrebno je obratiti pažnju da se u polje unosi vrijednost frekvencije u hercima (HZ), tako da se upisuje vrijednost 10000000. Ovdje se može uočiti da nije bitno koji se tip oscilatora koristi, nego samo frekvencija rada mikrokontrolera tj. ako se koristi fabrički podešen mikrokontroler onda se frekvencija postavlja na 1 MHz.

Potrebno je napomenuti da maksimalna vrijednost argumenta funkcije delay_ms(double _ms) zavisi od frekvencije rada i da maksimalna vrijednost podatka iznosi 262.14 ms / F_CPU u MHz, a to znači da za frekvenciju rada od 10 MHz iznosi 26.214 ms, dok za frekvenciju od 1 MHz iznosi 262.14. S obzirom da mi koristimo vrijednost od 25 ms nije potrebno niša mijenjati u programskom kodu.

Na kraju je potrebno sagraditi projekat, tj. prevesti i generisati hex datoteku, a to se jednostavno radi preko Build->Build.
U folderu u kome je sačuvan projekat, u ovom slučaju u D:\My Documents\AVR projekti\Led blink, u folderu default biće generisana hex datoteka (pored ove datoteke biće generisane još neke dodatne datoteke koje sad nisu od interesa).

Prenosom podataka iz hex datoteke u mikrokontroler preko odgovarajućeg programatora izvršeno je programiranje mikrokontrolera i puštanjem u rad mikrokontroler pali i gasi led diodu svake sekunde.
Programski kod i hex datoteku možete preuzeti ovdje.