2014 m. lapkričio 26 d., trečiadienis

AVR mikrovaldiklių programavimas: nuo ko pradėti?

Internete pilna informacijos, kaip ir su kuo programuoti AVR mikrovaldiklius, tačiau nusprendžiau tokį pasirašyti ir aš. Pirmiausia dėl to, kad sau turėti informaciją vienoje vietoje, ir nebeieškoti po visus forumus, tačiau jei mano rašliavos dar kam nors padės susigaudyti - džiugu. Nesu labai jau specialistas nei elektronikoje, nei programavime - tiesiog mokausi iš kitų ir savo klaidų, todėl ir čia pateiktas mintis laikyti absoliučia tiesa turbūt nerekomenduočiau :). Žinoma, yra keli būdai, kokia programa rašyti programas, todėl gal ir gerai, kad yra daug straipsnių - galima pačiam pasirinkti, ko reikia ir ko ne. Tačiau aš čia aprašysiu, ko reikia pačiam pirmam startui su man labiausiai patikusia programine įranga.

Laikysim, kad programatorių mes jau turim (čia yra manasis), o ir neturint - nesunku pasidaryti, pavyzdžiui, jungiamą per nuoseklųjį prievadą (COM) (čia yra schema), arba lygiagretųjį (LPT) (čia schema, jeigu penkių laidukų ir trijų rezistorių prilitavimą galima pavadinti schema :) )
Norint pradėti programuoti mikrovaldiklį, būtini du komponentai: programavimo aplinka c arba asemblerio kalbai bei sukompiliuotos programos įrašymo programa. Pirmoji gali atlikti ir antrosios funkcijas, tačiau reikia kiek kitokio programatoriaus - jis bus truputį sudėtingesnis, todėl pirmam kartui jo neaptarinėsiu.
Pirmoji programinė įranga, skirta programos rašymui, gali būti pasirinkta iš kelių variantų, apie kuriuos internete pilna informacijos. Aš gi pasirinkau AVR studio programą, kuri sukurta AVR mikrovaldiklių gamintojo. Ji nemokama ir bent jau mane kol kas tenkina. Jos aplinkoje galima rašyti programas tiek C kalba, tiek asembleriu. Pastaba: prieš diegiant šį programinį paketą reikia įdiegti WinAVR, nuorodos bus žemiau.
Rašymui į mikrovaldiklį reikia iš C kalbos perversti į šešioliktainio kodo failą, tačiau tuo mums rūpintis nereikia. Už mus tai padarys AVR Studio programa, ir mums reikia tik rasti failą, kurio plėtinys yra hex. Ir šitą failą reikia įrašyti į mikrovaldiklį.
Tam gi naudojausi programa PonyProg.
Kas dėl elementarių programų - turbūt smagiausia pradėti nuo šviesos diodų mirksinimo. Tam tereikia per 1-2K rezistorius prie kažkurio mikrovaldiklio porto prijungti 8 šviesos diodus, žinoma, laikant, kad tinkamai pajungti maitinimo, reset ir programavimo išvadai. Pirmam kartui kvarcinio rezonatoriaus jungti nebūtina, nes mikrovaldiklis ir taip sėkmingai veikia nuo vidinio generatoriaus 1MHz dažniu - o pirmai pradžiai to tikrai užtenka.
Elementarios programos tekstas - diodai sekundę dega ir sekundę būna užgesę:

#include <avr/io.h>
#include <util/delay.h> // užkraunama užlaikymo biblioteka

int main(void) {
DDRB=255; // PORTB nurodomas kaip išėjimas - visi bitai nustatomi 1

while (1) { // amžinas ciklas
PORTB=255; // visi PORTB bitai nustatomi 1, t.y. visi diodai įjungiami
_delay_ms(1000); // užlaikymas 1 sekundę
PORTB=0; // visi PORTB bitai nustatomi 0, t.y. visi diodai išjungiami
_delay_ms(1000); // užlaikymas 1 sekundę
}
}

delay.h galima ir nenaudoti, tačiau tada reiktų daryti tuščią ciklą ar kitaip užlaikyti mikrovaldiklio darbą. Aš manau, kad su šia biblioteka paprasčiau.
DDRB yra nurodoma PORTB kryptis (Data DiRection portB): t.y. jeigu tam tikras bitas nustatytas 1, išvadas tarnauja kaip išėjimas, tuo tarpu jeigu bitas nustatytas 0 - išvadas tarnauja kaip įėjimas, taigi, dvejetainis 11111111 yra lygus dešimtainiui 255 (vietoj 255 galima rašyti 0b11111111).
Tada pradedamas amžinas ciklas while, ir kas sekundę PORTB bitai nustatomi arba vienetams, arba nuliams. Tokiu būdu šviesos diodai, jeigu jie tinkamai prijungti prie PORTB, mirksi.

Nuorodos:
WinAVR - reikia įdiegti prieš diegiant AVR Studio
AVR Studio
PonyProg2000

Komentarų nėra:

Rašyti komentarą