Pirmas darbas programuojant bet kokia programavimo kalba kompiuteryje yra parašyti “Hello World” programą. Visokiuose mikrokontroleriuose tai mirksiukas. T.y. kažkokia koja turi mirksėti kažkokiu priimtinu ir detektuojamu dažniu. Nu koja nemirksi, bet koks nors šviesos diodas tai tikrai. Labiau “advanced mirksiukas” tai mirksiukas kuris reaguoja į kokį nors išorinį vaiksmą. Šiuo atveju į kitos kojos būklę.
SAM7 mikrokontroleris turi gana daug kojų. Kai kurios turi ne vieną paskirtį. Tačiau męs čia giliai nekapstysim- PA1 koją panaudosim kaip išėjimą, o PA2 kaip įėjimą. Mano PCB visos kojos išestos į standartinio (0.1″) žingsnio skylutes. Pačios skylutės kiek didesnio diametro, tai ten puikiausiai laikosi oscilografo čiupiklis.
Kol kas nesinagrinėjau aš to MCU hardwarės, tai nieko protingo nepadariau- tik užprogramavau vieną koją išėjimui. Kitos tikriausiai pagal nutylėjima pasidaro kaip įėjimai. Kaip ten organizuojami pull-up aš nežinau, bet po standartinės inicializacijos viskas veikia.
Kuo šitas skiriasi nuo paprastos ATMEGOS iš softo pusės? Dar nežinau daug, bet pirmas bugas kuris man pasirodė nesuprantamas, tai kad reikia paprogrames daryti STATIC. Jei neparašai, viskas susikompiliuojasi, bet kažkaip neveikia. Čia jau aš dar nesupratau. Dar klaustukas dėl VOLATILE kintamųjų. Bet kadangi viskas nudrožta nuo oficialaus Atmelio pavyzduko, tai matyt taip turi būti.
Softas veikia taip- amžinam cikle sėdi kitas ciklas kuris skaičiuoja pauzės dydį. Nuo minimalios iki kiek didesnės. Nuo PIN2 reikšmės priklauso pauzė vienokia ar didesnė 10 kartų.
T.y. kai nenuspaustas (kaip foto) pauzė keičiasi nuo 0 iki 9*5 tuščių ciklų. Pauzė ir mygtuko tikrinimas daromas prieš kiekvieną signalo pokytį.
Per nuotraukoje apibrėžtas 800ns įvyksta: signalo pakeitimas iš 0 iki 1, mygtuko reikšmės nuskaitymas per paprogramę, pauzės skaičiavimas =0*5*1, pačios pauzės paprogramės iškvietimas ir nepavykęs for ciklas, važiavimas atgal iš paprogramės ir signalo pakeitimas iš 1 į 0.
Taktinis procesoriuko dažnis kažkoks defaultinis skirtas USB. Kažkur apie 48MHz. Bent jau toks turi būti. Čia jau labiau patyrę turi pakomentuoti ar gerai man gavosi.
Ir aišku: Source code ir hex.
Volatile neleidžia kompiliatoriui optimizuoti kodo, kur naudojamas tas kintamasis. Pvz iš
foo = 0;
while (foo != 255)
kompiliatorius gali lengvai padaryti:
foo = 0;
while (true)
O čia jau blogai, nes galbūt foo reikšmė keisis jei koks nors interuptas rašys tiesiai į atminties vietą, kur yra tas kintamasis.
O dėl static, tai čia standartinis C kalbos keyword’as, kiek žinau neturi jokios specifinės paskirties programuojant ARM.
Labai rekomenduoju šitą skaitinį prieš miegą, apie programavimą C: http://publications.gbdirect.co.uk/c_book/
Dėl “volatile” tai man padėjo guglis ir dar prisiminiau iš AVR (dėl kintamojo pasikeitimo pertraukime). Bet va “static” kodėl naudojamas būten čia aš ir nesupratau. Deja, šiuo metu vėl programuoti AVR nes gavau naują PCB su 4 tiltų valdymo čipais. Čia vėl žingsniniai varikliai, tik šį kartą su motorolos/freescale čipu ir su softwariniu PWM.