31. januarja, 2010

SD kartica in AVR-DOS datotečni sistem

Slike PZBA PZBA 134 - SD kartica in AVR-DOS datotečni sistemDatotečni sistem AVR-DOS je napisal Josef Franz Vögel. Ni dovoljeno uporabljati v komercialne namene. V takem slučaju potrebujete posebno licenco. Sistem deluje z Compact – Flash Cards in je namenjen za vgrajene sisteme (embedded systems) za vodenje dnevnika podatkov. (for data logging).

Če sestavljate napravo, ki naj bi trajno delovala, recimo upravljala vašo hišo, delavnico, varovala pred vlomi, vdorom vlage ali ognja, potem potrebujete voditi dnevnik dogajanja za morebitno kasnejšo analizo incidenta. Vedeti želite, kdaj se je pooblaščena oseba prijavila preko kode, ki jo je vtipkala v tipkovnico, kdaj je zmanjkalo električne energije, kdaj se je sprožilo alarmiranje in zaradi katerega senzorja in podobno.

Ali pa, če sestavljate napravo, ki vodi vstop v skupno parkirišče, kdaj je kdo parkiral in ali je uporabil več kot en parkirni prostor.

Slike PZBA PZBA 134b - SD kartica in AVR-DOS datotečni sistem

Moj projekt je bil vodenje sistema centralne kurjave, in poleg vodenja evidence posameznih temperature in vklopom in izklopov naprav (kotla, obtočnih črpalk, mešalnega ventila ) sem imel tudi prav neprijetno dogajanje, – nekajkrat dnevno se mi je mikroprocesor resetiral, in iz samega študija programa nisem mogel ugotoviti, zakaj.

V program sem dodal dodatno pisanje na MMC kartico s pomočjo AVR-DOS-a kjer sem beležil vsak vstop v kak podprogram in vsak izstop tako, da sem na začetku in koncu dodal odgovarjajoči Print ukaz, recimo tako:

Branjetemp:
Print #2 , Hex(sph) ; Hex(spl) ; " E: Branjetemp"
. . . .
Print #2 , Hex(sph) ; Hex(spl) ; " R: Branjetemp T="; temperatura
Return

Kot vidite (Hex(sph) ; Hex(spl)) sem želel celo vedeti, kako je z odložiščem, ali se mi odložišče kako pokvari, kajti sumil sem celo, da se tam kaj sfiži. In v ta namen sem uporabil spominsko kartico, podobno, kot jo imajo fotoaparati, ima veliko kapaciteto, vanjo lahko pišem cel mesec, in ne bo polna. A je zato potrebno programje – AVR-DOS. Na žalost pa, AVR-DOS potrebuje tudi precej RAM prostora, tako da je možno to uporabiti na mikroprocesorjih z dovolj RAM-a. Jaz sem uporabil ATMEGA32. Na levi je 10-pinski IDC Speedy konektor za povezavo z Minipin testnim okoljem, na desni je MMC-konektor s kartico.

MMC kartica se napaja s 3V. Torej če naš mikroprocesor dela na 5V, tedaj je potreben regulator napetosti na 3V, na primer GL1117. Tudi signali, ki prihajajo iz mikroprocesorja, (SS, MOSI, CLK) so z uporovnimi delilniki prilagojeni MMC kartici. Signal ki gre iz MMC kartice k mikroprocesorju (MISO) je že tako na treh voltih, in to naš mikroprocesor že bere kot 1.

Vsi ti štirje signali (MISO, MOSI, CLK in SS) vežemo na poljubne proste vhodno-izhodne pine mikroprocesorja, kasneje bomo AVR-DOS informirali, kako smo jih vezali. LED dioda in tipka nista potrebni. Lahko na pa LED dioda pokaže, kdaj je MMC kart v povezavi z AVR-DOSom, se pravi dela, in je ne smemo izvleči. Tipko pa za krmiljenje programa v mikroprocesorju, recimo, da pritisk na tipko zaključi delo z MMC kartico, (CLOSE FILE) LED dioda ugasne in kartico lahko izvlečemo.

Povezava kartice z AVR-DOS programjem

Najprej moramo definirati, kam smo vezali kontakte MMC kartice. V pomoč nam je priložena datoteka Config_MMC.bas ki jo seveda lahko imenujete tudi kako drugače, a v vaš program jo potegnete z $include ukazom. Pred tem jo morate malo prirediti.

Datoteka ima dve sekciji, HW in SW, vedno se izbere le ena od obeh in to pri definiciji konstante:

Const Cmmc_soft = 1

Potem pa se z

#if Cmmc_soft = 0

Izbere ena ali druga sekcija. Testiral sem samo z software varianto. V tej sekciji definiramo, kam smo vezali katere kontakte mikroprocesorja: