Įvadas
Čia aprašomi pirmi žingsniai programuojant AVR mikrovaldiklius, tam tereikia sulituoti pateiktą schemą ir pradėti programuoti. Programavimui gali būti naudojamas „PonyProg“ programatorius.
Schemai reikalingi šviesos diodai, pas save naudojau 3 mm raudonos spalvos. Iš principo, galima naudoti bet kokius diodus. Tada reikia apskaičiuoti varžų reikšmes prie tiems diodams leistinų srovių. „Atmel“ kompanijos AVR mikrovaldiklis AT90S2313, bet vietoj jo galima pritaikyti bet kokį AVR tipo mikrovaldiklį.
Programavimo pradžia
Programas mikrovaldikliui rašysime su „IAR Embedded Workbench“, 30 dienų veikiančią versiją galite parsisiųsti iš gamintojo puslapio. Parsisiuntus ir įdiegus programą bei ją paleidus, matosi pagrindinis langas. Tada File meniu New (arba Ctrl+N), sukuriam darbo langą:
Pasirenkame vieną iš meniu punktų Source/Text:
Atsidariusį langą išsaugojam norimu vardu su .cpp plėtiniu. Pakartoję tuos pačius žingsnius sukuriame nauja projektą. Pasirinkus „Project“ punktą, pasirodo projekto sukūrimo langas:
Atitinkamu vardu išsaugojame projektą pasirinktame kataloge. Geriausia, kad jūsų *.cpp laikmena būtų tame pačiame kataloge, kaip ir sukurtas projektas. Po projekto išsaugojimo reikia pereiti prie meniu punkto Projects, toliau Files:
Pažymėję prieš tai išsaugotą laikmeną, skirta programos kodui su .cpp plėtiniu, paspaudžiame Add mygtuką. Po tokių veiksmų reikia nustatyti programos parametrus pagal jūsų turimą mikrovaldiklį. Parametrai nustatomi pasirinkus meniu Projects, Options punktą:
Pasirenkame procesoriaus tipą. Šiuo atveju parenkamas AT90S2313. Taip pat nustatome laikmenos pavadinimą, kuriuo bus išsaugojamas sukompiliuotas valdikliui programos kodas. Taip pat nustatome saugojimo formatą Intel-standart.
Kas antro šviesos diodo įjungimas
Dabar jau esame pasiruošę programuoti. Pabandykime įjungti kas antrą šviesos diodą:
// Reikalingas „Includas“, aprašantis pasirinktą 8 bitų AVR mikrovaldiklį
#include "io2313.h"
void main() // Prasideda pagrindinė procedūra
{
// Tai yra registras, nustatantis duomenų kryptį
// tai reikalinga diodams įjungti,
// 255 atitinka dvejetainį 1111 1111.
DDRB = 255;
// Nurodom, kuriuos diodus įjungti,
// 170 atitinka dvejetainį 1010 1010.
PORTB=170;
// Amžinas ciklas, reikalingas, kad procesorius tik
// vieną kartą atliktų duomenų siuntimą į portą B.
while(1)
{ }
}
Sukompiliavus ir iš //Banadom/Debug/Exe/bandymas.a90 katalogo laikmeną įrašius į mikrovaldiklį, gauname tokį rezultatą, padavus valdikliui maitinimą:
Kaip matyti iš paveiksliuko, pagal tai, kas buvo įrašyta į PORTB registrą, atitinkamai įsijungia šviesos diodai.
Vėlinimo funkcija
Jei su šviesos diodų įjungimu viskas tvarkoje, tada galime padaryti, kad jie mirksėtų, tam reikės pasidaryti laiko vėlinimą. Kadangi kvarcinio rezonatoriaus dažnis yra 4 MHz, tai norint pamatyti mirksėjimą, prireiks vėlinimo funkcijos.
#include "io2313.h"
void Laikas();
void main() // Prasideda pagrindinė procedūra
{
// Tai yra registras, nustatantis duomenų kryptį
// tai reikalinga diodams įjungti,
// 255 atitinka dvejetainį 1111 1111.
DDRB = 255;
// Amžiną ciklą naudosim diodų junginėjimui
while(1){
// Įjungiami visi diodai
PORTB=255;
// Kreipiamės į vėlinimo funkciją
// užlaikome įjungtus šviesos diodus
Laikas();
// išjungiame visus šviesos diodus
PORTB=0;
// Kreipiamės į vėlinimo funkciją
// užlaikome išjungtus šviesos diodus
Laikas();
}
}
void Laikas() // vėlinimo funkcijos pradžia
{
// Tuščio ciklo vykdymas 100 000 kartų
long i=0; for (i=0; i<100000; i++){}
}
Sukompiliavus ir iš //Banadom/Debug/Exe/bandymas.a90 katalogo laikmeną įrašius į mikrovaldiklį, gauname tokį rezultatą, padavus mikrovaldikliui maitinimą:
Bėganti eilutė
Bėganti eilutė padaroma tokiu pačiu principu, kaip prieš tai pateiktame pavyzdyje. Tik atitinkamai siunčiami į PORTB registrą reikiami skaičiai:
#include "io2313.h"
void Laikas();
// Prasideda pagrindinė procedūra
void main()
{
// Tai yra registras, nustatantis duomenų kryptį
// tai reikalinga diodams įjungti,
// 255 atitinka dvejetainį 1111 1111.
DDRB = 255;
// Amžiną ciklą naudosim diodų junginėjimui
while(1)
{
// Diodų įjunginėjimas į vieną pusę
PORTB=0;
Laikas();
PORTB=1;
Laikas();
PORTB=2;
Laikas();
PORTB=4;
Laikas();
PORTB=8;
Laikas();
PORTB=16;
Laikas();
PORTB=32;
Laikas();
PORTB=64;
Laikas();
PORTB=128;
Laikas();
//----------------------
PORTB=0; // Diodų įjunginėjimas į priešingą pusę
Laikas();
PORTB=128;
Laikas();
PORTB=64;
Laikas();
PORTB=32;
Laikas();
PORTB=16;
Laikas();
PORTB=8;
Laikas();
PORTB=4;
Laikas();
PORTB=2;
Laikas();
PORTB=1;
Laikas();
PORTB=0;
Laikas();
}
}
// vėlinimo funkcijos pradžia
void Laikas()
{
long i=0;
// Tuščio ciklo vykdymas 100 000 kartų
for (i=0; i<10000; i++){}
}
Sukompiliavus ir iš //Banadom/Debug/Exe/bandymas.a90 katalogo laikmeną įrašius į mikrovaldiklį, gauname tokį rezultatą, padavus valdikliui maitinimą:
Keičiant siunčiamus į portą skaičius, galima keisti diodų įjungimo algoritmą. Bėgančią eilutę taip pat galima padaryti naudojant ciklą ir dalinimą bei dauginimą iš 2. Tokiu atveju kodas gaunasi trumpesnis.
Tai tiek pradžiai, tikiuosi šis aprašymas duos kam nors naudos.