Programovanie pamäte programu typu FLASH

Úloha:

Čo budeme potrebovať:

Obvod AT89S8252 alebo AT89S51, AT89S52, AT89S53 Ja používam AT89S8252, pretože je to zlepšená 8051. Je síce dosť drahý, ale zato má najviac možností a bezproblémovo sa programuje pomocou programovacieho softvéru PonyProg. Kto chce šetriť kúpi obvod AT89S51. Ten je najjednoduchší a najlacnejší. Plne však postačuje aj na hodne zložité projekty.
kryštál Kryštál slúži ako rezonančný prvok v obvode oscilátora mikroradiča, ktorý vyráva hodinové impulzy potrebné pre chod mikroradiča. Pre programovanie vyhovuje akýkoľvek z pracovného rozsahu, teda menší ako 24 MHz.
dva kondenzátory 20pF - 40pF Pripájajú sa medzi vývody kryštála a zem. Zabezpečujú rozbeh a chod oscilátora.
ISP programátor Slúži na manipuláciu s vnútornou pamäťou mikroradiča. Sú rôzne typy. Používam ISP programátor pripojený na paralelný port. Pôvodné označenie je STK200. Dá sa kúpiť hotový, alebo postaviť zo stavebnice, alebo postaviť amatérsky. Stavebnicu programátora ISP01 si môžete objednať aj na mojej adrese adresa.gif, 1 kB . Existujú ďalšie druhy programátorov napríklad na sériový port,USB port.
Napájací zdroj K napájaniu je potrebný zdroj stabilizovaného jednosmerného napätia 5V. Predpokladám že takýto zdroj sa nájde vo výbave každého záujemcu o eletrotechniku. Dá sa jednoducho postaviť z hocijakého adaptéra s jednosmerným napätím okolo 9V a integrovaného stabilizátora 7805.
Kontaktné pole Pre pohodlné a rýchle zapájanie, overovanie činnosti obvodov je to neoceniteľný prostriedok. Dá sa zakúpiť v obchode s elektrotechnickými súčiastkami.
Osobný počítač Vyhovuje akýkoľvek PC aj veľmi chabej konfigurácie s OS Windows alebo Linux. Kedže Windows je trochu viac rozšírený budem sa lekcia uberať windowsowskou cestou. Linuxový užívateľ bude postupovať analogicky a určite si podľa windows návodu poradí.
Program PonyProg PonyProg je voľne dostupný program pre programovanie rôznych obvodov pomocou rôznych typov ISP programátorov. Autorom je Claudio Lanconelli a získať sa dá z jeho web stránky. Existuje vo verzii pre OS Windows aj OS Linux. Treba používať verziu označenú ako PonyProg2000. Ja mám momentálne verziu 2.06c.
Katalógový list AT89S8252 I keď sa dá veľa informácií získať na webových stránkach, často sa tu nachádzajú drobné chybičky spôsobené preklepmi a niekedy aj poriadne chyby spôsobené neznalosťou a neskúsenosťou autora. Kátalógový list výrobcu je berná minca ktorá by mala uvádzať presné informácie. (Aj výrobca sa v dokumentácii občas pomýli)

Teoretická príprava:

ISP (In Side Programming) je moderný spôsob programovania pamätí mikroradičov pomocou sériového synchrónneho rozhrania. Ak nerozumiete pojmom sériové a synchrónne rozhrianie vôbec to nevadí. Presný popis je v katalógovom liste výrobcu pre každý typ mikroradiča. Pre náš účel zatiaľ postačí vedieť, že pri programovaní sa využívajú štyri komunikačné signály RESET, MOSI, MISO a CLK. Tieto sa nachádzajú jak na mikroradiči, tak na ISP programátore a treba ich navzájom prepojiť. Okrem toho mikroradič potrebuje k svojej činnosti zdroj hodinových impulzov a samozrejme napájanie stabilizovaným jednosmerným napätím 5V.

Pamäť programu AT89S8252 má veľkosť 8kiBy a v nenaprogramovanom stave obsahuje hodnotu logickej jedna. Z prázdneho obvodu by sme teda mali prečítať samé hodnoty 0FFH (=11111111b=255). Inštrukcia skrytá pod číslom 0 je NOP, čo je skratka slov No Operation (žiadna operácia).

Program pre mikroradič býva k dispozícii v dvoch rôznych tvaroch. Ten ktorý využijeme teraz sa volá preložený strojový kód. Ten býva ukladaný vo formáte Intel HEX. Súbor obsahuje binárne čísla v hexadecimálnej sústave reprezentujúce jednotlivé inštrukcie programu. Ak sa do takéhoto súboru pozriete uvidíte nezrozumitelnú tabuľka plnú čísel a písmen. Čo je nezrozumiteľné pre človeka je ale čitatelné pre programovací program (PonyProg) a hlavne pre mikroradič. Každé číslo označuje nejakú jednoduchú operáciu, ktorú vie vykonať. Vhodným usporiadaním inštrukcí vzniká program ktorý plní nejakú funkciu. Proces pri ktorom človek zapisuje za sebou jednotlivé inštrukcie tak aby vznikol zmysluplný program sa volá programovanie v pravom slova zmysle.

Programovaním obvodu máme na mysli iba prenos a zapamätanie programu do pamäte mikroradiča. Dnes sa to deje elektrickou cestou. Naprogramované údaje sú volatilné - zostávajú v pamäti aj po odpojení napájacieho napätia až po dobu 10 rokov. A navyše sa tieto pamäte dajú opakovane preprogramovávať. Výrobca zaručuje minimalné 1000 násobné preprogramovanie pamäte programu. Je to tzv. technológia FLASH. Asi ju poznáte zo svojich USB klúčov a možno ste ani netušili, že pôvodne bola vyvinutá práve pre mikroradiče. Názov FLASH totiž označuje že takýto mikroradič môžete bleskovo naprogramovať, preprogramovať čo u technológií používaných pre desiatimi rokmi trvalo desiatky minút, ba staršie technológie vyžadovali čas až niekoľko mesiacov.

Schéma zapojenia:

isp_MCU8252120dpi.png, 45 kB

cautionStatic.png, 0 kB Ako prvé pri práci s mikroradičmi si treba uvedomiť že tieto súčiastky sú citlivé na statickú elektrinu. Statickým výbojom sa môžu zničiť. Preto je vhodné minimalizovať nebezpečenstvo vzniku statickej elektriny a nedotýkať sa zbytočne vývodov súčiastok rukami.

Schéma zapojenia je veľmi jednoduchá. Programovaný mikroradič je pripojený k ISP programátoru štyrmi signálmi MOSI, MISO SCK a RESET. Okrem toho k správnej činnosti potrebuje zapojený obvod oscilátora. Ten je zapojený presne podľa výrobcom doporučeného zapojenia s kryštálom. Tvoria ho súčiastky Q1, C1, C2. Hodnoty súčiastok na schéme nie sú kritické. Krystál môže mať ľubovolú rezonančnú frekvenciu menšiu ako 24MHz. Hodnoty kondenzátorov môžu byť v rozsahu 20pF až 40pF.
K napájaniu je potrebných jednosmerných stabilizovaných 5V, ktoré sa pripájajú k napájacím vývodom mikroradiča a ISP programátora. ISP programátor má ochrannú diodu proti prepólovaniu napájacieho napätia. varovanie.gif, 0 kB Mikroradič by ale prepólovanie neprežil. Treba si preto dať pri zapájaní pozor. Inak v zapojení nie je žiadna iná zrada. Signál EA by pri programovaní nemusel byť pripojený na logicku jednotku (+5V). Je to však urobené preto, aby sa po skončení programovania program rozbehol z práve naprogramovanej vnútornej pamäte programu.

Zapojenie súčiastok

Zapojenie realizujeme najjednoduchšie na kontaktnom poli. Vyrábať plošný spoj pre toto zapojenie nemá zmysel. Pri zapájaní sa orientujte podľa v katalógu uvedeného rozmiestnenia vývodov mikroradiča. Pre pripojenie ISP je vhodné si postaviť jednoduchú redukciu tvorenú konektorom LPH10S a konektorovými kolíkmi. Túto redukciu potom vložíme do kontaktného poľa a poprepájame podľa schémy zapojenia.
redukcia1.jpg,   8 kB

Tieto obrázky ukazuju pohľad na vývody redukcie pri pohľade zhora.
ISPkon1.png, 9 kB ISPkon.png, 9 kB

Výsledné zapojenie na kontaktnom poli je na nasledujúcom obrázku.
zapojenie.jpg, 27 kB

Do konektora treba pripojiť kábel z ISP programátora a ISP programátor treba pripojiť na paralelný port PC. Potom pripojíme napájacie napätie. Týmto sa skoncila práca s hardware.

Nastavenie programu PonyProg:

ikona_PonyProg.gif, 0 kB Ako programovací software doporučujem program PonyProg Claudia Lanconelliho. Je volne použitelný a získať ho môžete zo stránky www.lancos.com Inštalácia programu je jednoduchá zaáležitosť a netreba ju popisovať. Pri prvom spustení treba urobiť dve konfiguračné nastavenia. Ako prvú urobte kalibráciu príkazom Setup -> Calibration . Po vyvolaní tejto funkcie sa objaví toto dialogové okno.
kalibracia.png, 6 kB

Kalibrácia slúži na detekciu rýchlosti počítača. Podľa nej sa potom nastaví PonyProg tak aby časové priebehy programovacích signálov boli optimálne. Kalibrácia trvá pár sekund a stačí ju urobiť jeden jediný krát. Zostane zapamätaná v konfiguračnom súbore.
Druhé nastavenie vyvolajte príkazom Setup -> Interface Setup ...
interfaceSetup.png, 9 kB

Červenou farbou označené časti treba nastaviť do tejto podoby. V prvom rade nastavte paralelný port, pretože sem je pripojený programátor. Z ponuky v rozbaľovacom okne vyberte možnosť AVR ISP IO. Posledná voľba ktorú treba urobiť pre obvody typu AT89S... je aktivovať invertovanie signálu RESET. ISP programátor bol pôvodne určený pre rodinu mikroradičov AVR a tieto majú aktívnu logickú úroveň logickú jednotku. Čo je presne opačne ako je tomu u rodiny 8051 kde je RESET aktívny v logickej nule.
Ak máte operačný systém Windows NT alebo XP je potrebné mať administrátorské práva aby, ponyProg mohol komunikovať s paralelným portom. Tieto OS nedovoľujú za normálnych okolností aplikačným programom priamy prístup k vstupno výstupným portom PC.

Ešte nás čaká posledné nastavenie typu programovaného obvodu v programe PonyProg.

deviceSetup.png, 25 kB

Dá sa to dvoma spôsobmi. Oba sú zvýraznené červenou farbou na obrázku. Prvý postup je pomocou meny postupom Device -> AT89S micro -> AT89S8252. Druhou možnosťou je použiť rozbaľovacie voľby v prvej nástrojovej lište. Tu vidíte prečo som doporučoval obvod AT89S8252. PonyProg vie programovať okrem neho ešte AT89S53, ale nedokáže programovať AT89S52 a AT89S51. Mám taký pocit že som niekde na webe čítal že úpravou konfiguračného súboru sa dá donútiť aj k programovaniu týchto obvodov. Ale kedže ich nepoužívam neviem poradiť. Ak máte práve tieto obvody, treba sa poobzerať po inom programovacom software. Určite taký na nete nájdete.

Čítanie pamäte programu:

citanieFlash.png, 19 kB

Operácia čítania sa dá tiež urobiť niekoľkými spôsobmi. Zase sú tu dva postupy, pomocou menu Command -> Read Program (FLASH) , alebo ikonou v nástrojovej lište (oba spôsoby sú zvýraznené červenou farbou). Všimnite si, že na čítanie sú k dispozícii celkovo až tri rôzne príkazy. Prvý príkaz je Read All ikona_PonyProgReadAll.png, 0 kB druhý je Read Program (FLASH) ikona_PonyProgReadFLASH.png, 0 kB a tretí Read Data (EEPROM) ikona_PonyProgReadData.png, 0 kB . Týmto trom príkazom zodpovedajú aj tri ikony v nástrojovej lište rozlíšené farbou. V teoretickej príprave som zatajil že AT89S8252 má okrem pamäte programu aj datovú pamäť typu EEPROM. Obe pamäte sa zobrazujú v tomto jedinom okne a sú odlíšené farebne. Pamäť programu je vypisovaná zelenou farbou a pamäť dát je vypisovaná farbou modrou. Netreba sa s tým teraz zaťažovať. Iba o tom treba vedieť, pretože je zbytočné používať príkaz Read All ak chceme pracovať iba s pamäťou programu. Zbytočne by to zdržovalo čo bude ešte zjavnejšie pri operácii programovania.
statusCitanie.png, 4 kB upozornenieCitanie.png, 4 kB

Počas čítania sa zobrazuje postupujúci pruh ktorý symbolizuje množstvo prečítaných údajov. Po skončení čítania sa objaví upozornenie na úspešne vykonané čítanie i keď množstvo prečítaných údajov je trochu zavádzajúce. Veľkosť pamete programu je 8kiBy. Údaj v okne hovorí 10kiBy. To je celkový počet buniek pamäte programu a pamäte údajov.

poznamka.gif, 0 kB Ak sa pri operácii čítania stane že stavový pruh stojí na začiatku a vôbec sa nehýbe je zle. Programátor nedokáže prečítať pamäť programu. Možných príčin je hneď niekoľko:

  1. V systéme Windows XP a NT nemáte administrátorské práva.
  2. Nenastavili ste si správny typ obvodu.
  3. Nenastavili ste paralelný port, alebo AVR ISP I/O programátor.
  4. Nenastaveli ste inverziu signálu RESET.
  5. Nie je pripojený alebo zapnutý zdroj 5V napájania
  6. Chybne pripojené signály programátora k mikroradiču.
  7. Chybne zapojený obvod oscilátora.
  8. Zničený mikroradič napríklad prepólovaním.
Samozrejme že sú možné ešte aj iné príčiny prečo to nefunguje. Teraz nezostáva nič iné len si všetko prejsť odznova a poriadne prekontroľovať. Chyba sa musí skôr alebo neskor nájsť.

V prípade úspešného čítania to môže vyzerať napríklad takto:

precitanePrazdne.png, 21 kB

V okne sa objavia tri oblasti, na obrázku zvýraznené červenou farbou. Prvý stĺpec obsahuje adresu prvého údaja ktorý nasleduje za znakom zátvorka. Adresa je vypísaná v hexadecimálnej sústave.
Prostredná časť zobrazuje údaje na jednotlivých adresách v pamäti programu a neskôr aj v pamäti dát. Údaje sú opäť vypísané v hexadecimálnej sústave. Jedna dvojica znakov predstavuje jedno pamäťové miesto. Celkovo je v jednom riadku vypísaných 16 pamäťových miest. Adresa v nasledujúcom riadku je preto o 10H viac ako v predchádzajúcom riadku. Ak sa Vám nezdajú tie počty treba si uvedomiť že 16 desiatkovo je 10 hexadecimálne a už by to malo byť jasné. Vedieť používať hexadecimálnu sústavu pri mikroradičoch je veľká výhoda.
V poslednom vyznačenom stĺpci sa tie isté údaje zobrazujú ako ASCII znaky. Je to výhodné ak sa v pamäti nachádzajú uložené nejaké texty tak ich ihneď uvidite. V pamäti programu ale hlavne bývajú inštrukcie a preto tento znakový výpis vyzerá dosť úchvatne ako náhodná zmäť písmen. Pokiaľ hodnota uložená na pamäťovom mieste sa nedá zobraziť ako znak tak je tam potom zobrazený znak bodka. Celkovo si všimnite že sa tam nachádza 16 znakov bodka. Čo je zase jeden riadok údajov ale v inom formáte ako v prostrednej časti.
Na obrázku je vidno že obsah pamäte je nejaký jednotvárny. Každá bunka pamäte obsahuje hodnotu 0FFH. Ak si to prevedieme na binárne číslo tak je to 11111111 binárne. Na začiatku som v teórii naznačil že takáto pamäť je prázdna. To je stav v akom sa dodáva mikroradič od výrobcu.

A takto to vyzerá ak pamäť programu nie je prázna a obsahuje nejaký program.

precitaneProgram.png, 36 kB
Teraz vidíme strojový kód programu pozostávajúci z jednotlivých inštrukcií uložených za sebou v pamäti programu. Každé číslo predstavuje operačný kód, alebo údajový parameter pre operačný kód. Všimnite si že niektoré časti pamäte sú možno nenaprogramované, pretože obsahujú znaky 0FFH (napr od adresy 3 po adresu 0AH). Možno sú to ale údaje, ktoré zhodou okolností majú tiež hodnotu 0FFH, alebo to môže byť aj operačný kód instrukcie s hodnotou 0FFH. To sa takto bez hlbšieho pohľadu nedá určiť.
Čo by sa ale určiť dalo je dĺžka programu. Treba nájsť sa nachádza posledná hodnota nerovná 0FFh. Pozor na to že v pamäti môžu byť prázdne okná a tak treba hľadať až do konca. Potom si odrátame adresu nasledujúcej bunky s hodnotou 0FFh (prvá volná bunka pamäte programu) Hodnota tejto adresy je hľadaná dĺžka programu. Napríklade na obrázku je to adresa 19EH čo je 414 desiatkovo. Program má teda celkovú dĺžku 414 byte. Pre prevod z hexa do desiatkovej sústavy môžete použiť vedeckú kalkulačku z príslušenstva windows.

poznamka.gif, 0 kB Iste viete že programy sa často kradnú ich autorom. Mikroradiče preto obsahujú bezpečnostnú poistku, ktorá po aktivovaní zabráni vyčítaniu pamäte programu. Môže sa teda ľahko stať, že budete chcieť prečítať program z mikroradiča ktorý ste zakúpili v nejakej stavebnici, alebo vám ho niekto poslal naprogramovaný. Po čítaní sa však pamäť javí ako prázdna i keď určite viete že tam program je, pretože v zariadení mikroradič funguje a vykonáva svoju činnosť. Znamená to len toľko že autor si tento program cení a neuvoľnil ho k verejnému šíreniu. Neexistuje žiadna možnosť ako ten program z mikroradiča vyčítať. Dá sa iba zistiť že program je v pamäti uzamknutý, alebo sa dá pamäť aj uzamknutie vymazať.

poznamka.gif, 0 kB Pozor ešte na jednu vec. Ak čítanie prebehlo úspešne ešte to neznamená že ISP programátor naozaj komunikuje s mikroradičom. Pri niektorých chybách v zapojení môže nastať stav, že čítanie síce prebehne ale namiesto skutočných informácií z pamäte programu sa vyčítajú iba hodnoty 0FFH alebo 00, alebo rôzne pravidelné kombinácie. Tieto chybné zapojenia sa prejavia najjednoduchšie pri pokuse naprogramovať mikroradič.

Manipulácia s programovacím buferom:

Aby sme mohli vyskúšať programovanie pamäte programu je treba vložiť do oblasti pamäte určenej k programovaniu nejaké hodnoty. Túto pamäť volá PonyProg programovací bufer. Obsah bufera je vlastne zobrazený v okne a momentálne obsahuje údaje 0FFh. Pre prvý pokus s programovaním sa ani nebudeme snažiť naprogramovať do mikroradiča nejaký "rozumný" program. Na overenie toho že to naozaj funguje bude úplne stačíť ak sa nám tam podarí zapísať niekoľko ľubovolných hodnôť (viz. zadanie na začiatku).
editBuffer.png, 4 kB Aby sme mohli do bufera zapísovať treba zadať príkaz Edit -> Edit Buffer enabled. Opätovným zadaním príkazu sa zápis do bufera zakáže. Počas povoléného zápisu môžete kliknúť na ľubovolné miesto v pamäti a zmeniť ho. Dialogové okno umožňuje vkladať hodnoty v hexadecimálnej a desiatkovej sústave alebo ako znak.
fillBuffer.png, 4 kB Vypniť celú pamäť programu predchádzajúcim spôsobom na rovnakú hodnotu by bolo zdĺhavé. Blok pamäte sa dá nastaviť na nejakú hodnotu jedným príkazom Utility -> Fill Buffer .... Zadáva sa počiatočná a koncová adresa bloku pamäte. Hodnoty sa zadávajú v štýle jazyka C hexadecimálne čísla začínajú znakmi 0x, desiatkové hodnoty sa zapisujú priamo.
Vkladanie textu sa robí kliknutím na časť okna ktorá zobrazuje obsah pamäte ako znaky. Treba si presne nájsť miesto kam treba kliknúť, aby sa text začal vkladať od tej adresy. Jeden znak reprezentuje jedno pamäťové miesto.
editBufferText.png, 4 kB

V takomto dialogovom okne sa zadáva text. Dĺžka textu môže byťľubovolne dlhá. Jednotlivé znaky sa budú ukladať za sebou do bufera.
editBufferHotovo.png, 21 kB

Ak chcete splniť zadanie programovací bufer by mal vyzerať tak ako to vidíte na obrázku. Pre kontrolu si prelistujte celú pamäť programu a uistite sa že celá obsahuje hodnotu 0 až do jej konca. Pamäť programu poznáte podľa farby výpisu hodnôt, ktorá je zelená.

poznamka.gif, 0 kB Na záver malé doporučenie. Ak už nehodláte meniť obsah programovacieho bufera deaktivujte jeho editáciu postupom Edit -> Edit Buffer enabled. Budete si tak istý že sa programovací bufer nezmení nejakým nopatrným kliknutím.

Programovanie pamäte programu:

Ak sú v programovacom buferi pripravené údaje, ktoré chceme vložiť do pamäte programu. Môžeme aktivovať funkciu zápisu. Podobne ako pri čítaní sú tu tri príkazy a tri ikony.
zapisFLASH.png, 22 kB

Pretože ikony zakrýva rozbalené menu, tak som ich premiestnil na pravú stranu meny. Červene označené príkazy treba používať ak chcete zapisovať iba pamäť programu. Zápis pamäte dát trvá dosť dlhý čas a pokiaľ pamäť dát nepoužívame je použitie príkazu Command -> Write All zbytočné plytvanie časom.
Po vyvolaní niektorej operácie zápisu sa požiada dialogovým oknom o potvrdenie zápisu.
zapisPotvrdenie.png, 5 kB
Zápis je vážna vec, pretože sa touto operáciou prepíšu pôvodné údaje v pamäti programu. Omylom vyvolaná funkcia zápisu by mohla zničiť cenný program. Preto táto otázka. Ak chcete určite zapisovať potvrdte operáciu zápisu tlačidlom Yes.
Operácia zápisu je podstatne pomalšia ako je čítanie. O priebehu zapisovania nás informuje postupujúci pruh a percentuálne vyjadrenie počtu zapísaných údajov.
zapisStatus.png, 4 kB zapisVerifikacia.png, 4 kB zapisHotovo.png, 4 kB

Po skončení zápisu sa automaticky spustí verifikácia zapísaných údajov. Po skončení verifikácie sa už len zobrazí oznam o úspešnom zápise a mikroradič je naprogramovaný.

poznamka.gif, 0 kB Moje skúsenosti sú, že ISP programovanie je veľmi spoľahlivé a verifikácia po zápise nie je nutná. Ak chcete ušetriť trochu času, môžete v konfiguračnom súbore programu PonyProg zmeniť riadok

VerifyAfterWrite=YES
na
VerifyAfterWrite=NO
Ušetríte tak čas potrebný na verifikáciu po každom programovaní. Pokiaľ by ste pri vypnutej verifikácii predsa len niekedy chceli skontroľovať či sa obsah programovacieho bufera zhoduje z obsahom pamäte programu mikroradiča môžete to urobiť príkazom Command -> Verify Program (FLASH). Konfiguračný súbor sa nachádza v adresári v ktorom je Ponyprog nainštaľovaný. Zvyčajne je to C:\Program Files\PonyProg2000. Konfiguračný súbor sa volá PONYPROG2000.INI a upravovať ho treba editorom ktorý nevkladá do textu formátovacie informácie, napríklad notepadom z príslušenstva Windows.

poznamka.gif, 0 kB Čas na programovanie sa dá skrátiť ešte viac ak počas programovania vo vhodnom okamihu stlačíte tlačítko Abort. Ak viem, že program ktorý programujem má 500byte je to niečo cez 10% celkovej kapacity pamäte. Tlačidlo Abort tak môžem s kľudom stisnúť už vtedy, keď stavové okno signalizuje, že je už naprogramovaných 20% obsahu pamäte.

poznamka.gif, 0 kB Ak sa po potvrdení zápisu podozrivo dlho nič nedeje a nakoniec sa objaví takého hlásenie.

zariadenieNeodpoveda.png, 4 kB

Znamená to nefunkčnosť komunikácie medzi PonyProg - ISP programátorom - mikroradičom. Možné dôvody som už popísal pri operácii čítania. Pozor niektoré chyby zapojenia sa prejavia až pri zápise. Pri čítaní sa zdá že všetko funguje ale to je len zdanie. Napríklad mne funguje čítanie aj pri vypnutom napájaní. Akurát sa namiesto údajov vyčítajú samé hodnoty 0.

Načítanie programu do programovacieho bufera:

Pomaly ale isto sa blížime ku koncu tejto lekcie. V predošlej časti sme si ukázali, že sa dá programovací bufer naplniť ručne potrebným strojovým kódom a potom ním naprogramovať mikroradič. Táto cesta sa používa veľmi výnimočne. Zvyčajne iba vtedy ak nemáme program uložený v súbore a iba si ho vieme načítať z mikroradiča. Potom niečo ručne upravíme, napríklad nejaké texty. A naspäť ho zapíšeme do mikroradiča. Za čias svojem mladosti, keď neexistoval internet tak sa tieto programy v strojovom kóde publikovali v časopisoch a záujemca si ich naozaj ručne prepisoval do programovacieho programu. Stačila však jediná chybná číslica a program nepracoval úplne, alebo sa za určitých podmienok zrútil. Oveľa pohodlnejšie by samozrejme bolo ak by sa dal do programovacieho bufera načítať program v strojovom kóde z nejakého súboru. Firma Intel nám k tomuto účelu vytvorila formát súboru označovaný ako Intel Hex. Najjednoduchšie sa k takémuto súboru dopracujete tak, že niekto ho zverejní na webovej stránke. Odtiaľ si ho bežným spôsobom prenesiete na svoj počítač. Ako príklad môže poslúžiť moja stránka z krajskéj súťaže Zenit v elektrotechnike 2002 kde som zverejnil aj výsledný strojový kód programu.

Program dostaneme do programovacieho bufera PonyProg pomocou príkazu meny File -> Open Program (FLASH) File ..., alebo pomocou ikony ikona_PonyProgOpenFLASH.png, 0 kB
Následne sa otvorí takéto dialogové okno

openHexFLASH.png, 26 kB

Najprv si treba vybrať typ súboru na koncovku HEX a potom ho nájsť a otvoriť. Ako vidíte PonyProg dokáže čítaj aj iné formáty súborov než je Intel Hex.
Po otvorení sa súbor načíta do programovacieho bufera a môže sa ísť zapisovať do mikroradiča.
OpenFlashZenit.png, 44 kB

Takto vyzerá program ZENIT02.HEX načítaný do programovacieho bufera. Vidieť že má máličko pod 0,5 kiBy. To stačí na to aby dokázal robiť sedem rôznych svetelných efektov s možnosťou zmeny rýchlosti blikania. Zvyšných 7,5 kiBy je prázdnych a mohlo by sa ďalej využiť na tvorbu ešte sofistikovanejších svetelných efektov. Pokiaľ si podľa schémy zariadenie postavíte a vložíte tam naprogramovaný mikroradič musí to fungovať.

Vymazanie pamäte mikroradiča:

Mazať pamäť mikroradiča pred ďalším programovaním nie je nutné. Ba je to skôr nežiadúce ako žiadúce. Pri programovaní a mazaní pamäťová bunka trpí a máličko sa jej zhoršia parametre výdrže. Preto by sme mali obvody programovať čo najmenej. Výrobca zaručuje minimálny počet programovacích cyklov 1000 pri dobe zapamätania informácie 10 rokov. Typ 89ATS... je konštruovaný tak, že bunky sa môžu rovno prepisovať. Ak by ste ich najprv vymazali a potom programovali trpia vlastne dvakrát.
Jediný dôvod prečo vymazávať pamäť mikroradiča je ak chcete aby sa vymazal ochranný zámok ktorý zabraňuje prepísaniu a prečítaniu pamäte programu alebo dát. Uzamykanie je bezpečnostná funkcia proti softvérovým zlodejom. Uzamknutý obvod sa dá odblokovať jedine kompletným vymazaním všetkých pamätí. Po operácii mazania sa mikroradič môže normálne programovať ďalej ako by nikdy zamknutý nebol. varovanie.gif, 0 kB Dobre si ale rozmyslite či chcete vymazať zamknutý mikroradič. Po vymazaní sa už nedá vrátiť pôvodný obsah pamätí späť. Teda funkciu ktorú vykonával už vykonávať nebude. Žiadna operácia UNDELETE neexistuje.
Operácia mazania sa aktivuje prikazom Command -> Erase, alebo ikonou ikona_PonyProgErase.png, 0 kB . Kedže ide opäť o nebezpečnú operáciu nasleduje potvrdzovací dialóg a po jeho potvrdení sa obvod prekvapivo rýchle vymaže. Operacia mazania je spoločná aj pre pamäť programu aj pre pamäť dát aj pre uzamkýnacie bity. Jeden príkaz tak kompletne vymaže celý obvod.

poznamka.gif, 0 kB Nemusíte sa príliš obávať toho že sa mikroradič okamžite zničí ak ho preprogramujete 1000 krát. Výrobca už len nezaručí že tam program vydrží 10 rokov. Keď vytváram program pre mikroradič tak ho pokusne naprogramujem denne aj 100krát. Za mesiac to môže byť podľa usilovnosti a toho ako sa mi nedarí aj 2000 krát. Napriek tomu som ešte nevyhodil žiadny vývojový mikroradič z dôvodu že by si už nechcel pamätať. FLASH pamäť si stále pamätá dostatočne spoľahlivo aj keď niektore už majú roky. Samozrejme takéto pokusné obvody nemôžem dať do hotovej aplikácie.

poznamka.gif, 0 kB Presný a úplný popis programovania radiča AT89S8252 nájdete v katalógovom liste.

Záver:

poznamka.gif, 0 kB Toto zapojenie programovacieho rozhrania na kontaktnej doske doporučujem nerozoberať. Využijete ho v budúcich lekciách.

Na záver zhrniem čo všetko by ste mali vedieť po dôkladnom preštudovaní a precvičení tejto lekcie:

  1. Zapojiť obvod oscilátora s kryštálom.
  2. Pripojiť ISP programátor k mikroradiču.
  3. Prečítať vnútornú pamäť programu.
  4. Zapísať vnútornú pamäť programu.
  5. Vymazať vnútornú pamäť mikroradiča.
  6. Vedieť analogicky postupovať pri iných mikroradičoch s ISP.

test.gif, 0 kB Na záver niekoľko úloh na overenie správnosti porozumenia problematike
  1. Zistite koľko presne buniek pamäte zaberá program ZENIT02.HEX. Údaj zadajte ako desiatkové číslo.
  2. Akú adresu má posledná pamäťová bunka pamäte programu v hexadecimálnej sústave? Napíšte v tvare 0xAAAA, použite iba veľké písmená a číslice.
  3. Na aký typ rozhrania sa pripája programátor ISP01 (STK200)?
    USB rozhranie
    Sériové rozhranie
    Paralelné rozhranie
    FLASH rozhranie
  4. Koľko buniek má vnútorná pamäť programu AT89S8252? Zadajte ako desiatkové číslo.
  5. Vymazať pamäť pred každým programovaním je
    vždy potrebné
    zbytočné
    potrebné ak bol obvod pred tým naprogramovaný
  6. Súbor v ktorom je uložený strojový kód programu býva vo formáte
    Intel HEX
    Intel DOC
    Intel ASM
    Intel EXE
  7. Koľkokrát zaručuje výrobca preprogramovanie pamäte programu mikroradiča 89S8252?
  8. V akej číselnej sústave je zobrazovaný obsah pamäte programu?
    desiatkovej
    dvojkovej
    osmičkovej
    šesťnástkovej
Hlavná stránka
© Peter Plesník 02.01.2007 13:21:57 All rights reserved