<< Előző oldal Vissza a tartalomjegyzékhez Következő oldal >>
11.2.1. EPROM mikrovezérlők programozása
Az EPROM programmemóriájú PIC mikrovezérlők programozási eljárása programozási parancsok és programozás-időzítési előírások tekintetében eltér a FLASH programmemóriát tartalmazó típusokétól. EPROM programmemória esetén a program "beégetése" szavanként megy végbe 100µs hosszúságú beíróimpulzusok segítségével. Az egyes szavaknál a beíróimpulzust addig kell ismételni, amíg az ellenőrző kiolvasás helyes eredményt nem ad. Programozatlan állapotban az EPROM programmemória minden egyes bitje logikai "1" értékű. A felprogramozás tulajdonképpen a kívánt bitek "0"-ra állítását jelenti.
Az egyes típusoknál előforduló beépített EEPROM adatmemória a programozás során nem érhető el.
Az egyes EPROM memóriás mikrovezérlő típusok angol nyelvű gyári programozási dokumentációja:
Belépés programozási üzemmódba
Csak a tápfeszültség bekapcsolása, illetve megléte után szabad (testtől eltérő) feszültséget kapcsolni a többi csatlakozópontra!
A programozás során a tápfeszültségnek a 4,75..5,25V-os tartományban kell lennie. A programellenőrzés ideje alatt a tápfeszültségnek a mikrovezérlő teljes tápfeszültség-tartományán belül kell lennie. A tápfeszültség megjelenése után az Adat, az Órajel és a Programozó feszültség csatlakozók logikai "0" feszültségszinten vannak. Mivel a Programozó feszültség csatlakozó egyben az Reset-bemenet is, a mikrovezérlő Reset-állapotban van.
A programozási üzemmódba történő belépés az (Programozó feszültség) bemenetre kapcsolt 13V-os programozó feszültség hatására megy végbe. Ezalatt az Adat és az Órajel bemeneteknek logikai "0" szinten kell lenniük. A program "beégetéséhez" a programozó feszültségnek a 12,75..13,25V tartományban kell lennie. A mikrovezérlő programozási üzemmódban marad, ha a programozó feszültség nem csökken az Ut + 4,5V-os feszültségszint alá, ahol Ut a mikrovezérlő pillanatnyi tápfeszültsége. A program-ellenőrzéshez nem szükséges a 12,75..13,25V-os feszültségtartomány megtartása, elegendő, ha a mikrovezérlő programozási üzemmódban marad.
A programozási feszültség maximális terhelése 50mA.
Programozási üzemmódban az Adat és Órajel bemenet Schmitt-trigger jellegű.
A programozási üzemmódból való kilépés az kivezetés 0V-os feszültségre (testre) kapcsolásával végezhető el.
A programozási üzemmódba való be- és kilépés időkorlátait szemlélteti a következő ábra.
A programozási lépések végrehajtási folyamata 6 bites programozási parancsokkal vezérelhető, amelyeket betöltési és kiolvasási feladatok esetében a 16 bites adatszó követ.
A következő táblázat a programozási parancsokat mutatja be. (A PIC16C64x és PIC16C715 mikrovezérlők programmemóriája a kiegészítő paritás bitek miatt 16 bites szavakból áll, így ezek programozásakor az adatszó 18 bites lesz.)
Parancs | Parancsszó | Adatszó |
---|---|---|
5.bit ...... 0.bit | 15.bit ........ 0.bit | |
Adat betöltése | 0 0 0 0 1 0 | 0, 14bit adat, 0 |
Adat kiolvasása | 0 0 0 1 0 0 | 0, 14bit adat, 0 |
Cím növelése | 0 0 0 1 1 0 | - |
Konfiguráció betöltése | 0 0 0 0 0 0 | 0, 14bit adat, 0 |
Programozás indítása | 0 0 1 0 0 0 | - |
Programozás leállítása | 0 0 1 1 0 0 | - |
A 14 bites adat (program utasítás) elöl és hátul egy-egy "0" bittel van kiegészítve, amelyek a START és STOP bitek szerepét töltik be.
A parancsszó és az adatszó az Adat bemeneten keresztül léptethető be a mikrovezérlőbe az Órajel bemeneten alkalmazott órajel ütemére. Közöttük minimálisan 1µs szünetet kell biztosítani. A bevitelt a legkisebb helyiértékű bittel kell kezdeni a parancsszó és az adatszó esetében is.
A bevitel során az Adat bemenet tesztelése (vagyis a tényleges bevitel) a bevezetett órajel lefutó élénél történik
Az adatbevitel időzítési követelményeit mutatja be a következő ábra.
Az utasításokat egyesével, utasításonként külön Adat betöltése paranccsal kell betölteni a mikrovezérlőbe. Az adatbetöltés után kerül sor a beléptetett utasítás "beégetésére", amely a későbbiekben bemutatásra kerülő 100µs hosszúságú beíróimpulzusok segítségével végezhető el.
Az utasítás a PC által mutatott memóriacímre kerül "beégetésre", amely cím a Cím növelése utasítással változtatható.
Az Adat betöltése parancs idődiagramja látható a következő ábrán.
Látható az ábrán a 6 bites parancsszó és a 16 bites adatszó bitsorrendje: először mindig a legkisebb helyiértékű bit kerül bevitelre. A 16 bites adatszó a "0" értékű START bitből, a 14 bites utasításból és a "0" értékű STOP bitből áll. Természetesen a 14 bites utasítás bit-beviteli sorrendje is a már említetteknek megfelelő.
Az Adat bemenetre vezetett adatbitek beolvasása az órajel lefutó élénél történik meg, ehhez biztosítani kell, hogy a lefutó él előtt 100ns-mal már, és a lefutó él után 100ns-mal még jelen legyen az érvényes adat.
A parancsszó és az adatszó között minimum 1µs szünetet kell tartani.
Az Adat kiolvasása paranccsal kiolvashatóak a felhasználói program utasításai, az azonosítók és a konfigurációs szó, így lehetővé válik a "beégetett" utasítások ellenőrzése.
A PC által mutatott memóriacímen levő utasítás kerül kiolvasásra, amely cím a Cím növelése utasítással változtatható.
A parancsszó vétele után következő második órajel felfutó élét követően a mikrovezérlő Adat csatlakozása kimenetként funkcionál és a felfutó élek ütemében maximum 200ns késéssel az Adat kimeneten biztosítja az érvényes adatbitet, illetve összesen a 14 adatbitet (START és STOP bit nincs, az adatszó első és utolsó órajelének ideje alatt nincs érvényes adat a kimeneten).
Az Adat kiolvasása parancs idődiagramja látható a következő ábrán.
Látható az ábrán a 6 bites parancsszó és a 16 bites adatszó bitsorrendje: először mindig a legkisebb helyiértékű bit kerül bevitelre, illetve kiolvasásra.
Az Adat bemenetre vezetett parancsszó-bitek beolvasása az órajel lefutó élénél történik meg, ehhez biztosítani kell, hogy a lefutó él előtt 100ns-mal már, és a lefutó él után 100ns-mal még jelen legyen az érvényes adat.
A parancsszó és az adatszó között a fenti ábrának megfelelően minimum 1µs szünetet kell tartani.
A Cím növelése parancs bevitelének hatására a PC értéke eggyel nő.
A programozási üzemmódba való belépés után a programszámláló (PC)
a felhasználói programmemória-területhez van rendelve és egyesével előre léptethető a 0000h-tól az 1FFFh címig, ami után túlcsordulva újra a 0000h címre mutat.
A Konfiguráció betöltése paranccsal a PC a konfigurációs memóriaterülethez rendelhető, így ezen belül egyesével előre léptethető a 2000h-tól a 3FFFh címig, ami után túlcsordulva újra a 2000h címre mutat. A PC csak a programozási üzemmódból való kilépéssel és újra belépéssel rendelhető újra a felhasználói programmemória-területhez.
A Cím növelése parancs idődiagramja látható a következő ábrán.
Látható az ábrán a 6 bites parancsszó bitsorrendje: először a legkisebb helyiértékű bit kerül bevitelre.
Az Adat bemenetre vezetett adatbitek beolvasása az órajel lefutó élénél történik meg, ehhez biztosítani kell, hogy a lefutó él előtt 100ns-mal már, és a lefutó él után 100ns-mal még jelen legyen az érvényes adat.
A parancsszó és a következő parancsszó között a fenti ábrának megfelelően minimum 1µs szünetet kell tartani.
A Konfiguráció betöltése parancs hatására a PC a 2000h programmemóriacímre mutat és az adatszóban bevitt utasítás "beégethető" erre a címre.
A PC egyesével előre léptethető a 2000h-tól a 3FFFh címig, ami után túlcsordulva újra a 2000h címre mutat.
A Konfiguráció betöltése parancs idődiagramja látható a következő ábrán.
Látható az ábrán a 6 bites parancsszó és a 16 bites adatszó bitsorrendje: először mindig a legkisebb helyiértékű bit kerül bevitelre. A 16 bites adatszó a "0" értékű START bitből, a 14 bites utasításból és a "0" értékű STOP bitből áll. Természetesen a 14 bites utasítás bit-beviteli sorrendje is a már említetteknek megfelelő.
Az Adat bemenetre vezetett adatbitek beolvasása az órajel lefutó élénél történik meg, ehhez biztosítani kell, hogy a lefutó él előtt 100ns-mal már, és a lefutó él után 100ns-mal még jelen legyen az érvényes adat.
A parancsszó és az adatszó között minimum 1µs szünetet kell tartani.
A Programozás indítása parancs hatására a programozó feszültség rákapcsolódik a memóriacímnek és a beírandó utasításnak megfelelő memóriabitekre, elkezdődik a "beégetés", amely a Programozás leállítása parancsig tart. A "beégetést" 100µs hosszúságú beíróimpulzusok segítségével kell végezni. Az egyes szavaknál a beíróimpulzust addig kell ismételni, amíg az ellenőrző kiolvasás helyes eredményt nem ad. Programozatlan állapotban az EPROM programmemória minden egyes bitje logikai "1" értékű. A felprogramozás tulajdonképpen a kívánt bitek "0"-ra állítását jelenti.
A Programozás indítása parancs előtt mindig alkalmazni kell az Adat betöltése vagy a Konfiguráció betöltése parancsot, hogy a kívánt érték kerüljön "beégetésre".
A Programozás indítása parancs idődiagramja látható a következő ábrán.
A Programozás leállítása parancs idődiagramja látható a következő ábrán.
Látható az ábrákon a 6 bites parancsszavak bitsorrendje: először a legkisebb helyiértékű bit kerül bevitelre.
Az Adat bemenetre vezetett adatbitek beolvasása az órajel lefutó élénél történik meg, ehhez biztosítani kell, hogy a lefutó él előtt 100ns-mal már, és a lefutó él után 100ns-mal még jelen legyen az érvényes adat.
Két egymás után következő parancsszó között minimum 1µs szünetet kell tartani.
A következő ábrán látható a gyártó által javasolt felhasználói memória programozási algoritmus, amely a sikerességet a tápfeszültség szélsőértékeinél is ellenőrzi. (Ehhez természetesen megfelelő programozó készülékre is szükség van.)
A programozási ciklus szubrutin:
A programkiolvasás folyamatábrája:
A következő ábrán látható a gyártó által javasolt konfigurációs memória programozási algoritmus, amely a sikerességet a tápfeszültség szélsőértékeinél is ellenőrzi.
Az azonosítók és a konfigurációs szó kiolvasásának folyamatábrája:
Egy adott állapotú programmemóriához előállított ellenőrző összeg lehetővé teszi a gyors hibakeresést, illetve ellenőrzést. Egy felprogramozott mikrovezérlő esetében a beprogramozott utasításokat bináris számként összeadva, minden esetben ugyanannak az összegnek kell adódnia. Bármilyen kis eltérés hibát jelent.
Az ellenőrző összeg több módszerrel is képezhető:
ˇ
a teljes felhasználói programmemória összegzésével, amely egyszerűen megoldható, mert nem szükséges a program hosszának ismerete;
ˇ
csak a felhasznált programmemória összegzésével, amely bizonyos szempontból pontosabb ellenőrzést tesz lehetővé, mert a maradék memóriában fellépő hibát nem jelzi (ez konstans értékkel feltöltött maradék memória esetén lényeges).
Az ellenőrző összeghez hozzáadható még a konfigurációs szó is, így egyetlen lépéssel ellenőrizhető az adott mikrovezérlő.
Az azonosító mező tartalmát nem mindig célszerű az ellenőrző összegben felhasználni. Egyedi mikrovezérlő azonosítók esetén különben minden azonosra programozott, de egyedileg azonosított mikrovezérlő ellenőrző összege más lesz.
Egy 8kx14 bites programmemória utasításainak összege akár egy 27 bites szám is lehet, amely hexadecimálisan hét számjegyű. Az ellenőrző összeg képzésénél, illetve alkalmazásánál nincs szükség a teljes összegre, hiszen bármilyen kis programhiba is már az alsó helyiértékekben elváltozást okoz. Általában az összeg alsó 8 bitje már kielégítő ellenőrző számot alkot.
A Microchip programozó készülékei a fejezet elején megtalálható programozási útmutatókban leírt összegzési algoritmusokat használják, amelyek mikrovezérlő típusonként és típuson belül is memória kódvédelemtől függően eltérőek. A Microchip 16 bites ellenőrző összegeket használ.
Az EPROM programmemóriába "beégetett" program módosítása nem jelent feltétlenül teljes törlést és újraprogramozást. Programozatlan állapotban az EPROM programmemória minden egyes bitje logikai "1" értékű, így a felprogramozás tulajdonképpen a kívánt bitek "0"-ra állítását jelenti. Emiatt bármely beprogramozott utasításból előállítható egy későbbi programozás során a NOP utasítás, amelynek kódja 0000h.
A következő táblázat a programmemória első néhány szavát mutatja be. A programsor a sorszámával kezdődik, azután az utasításkód, majd az MPASM assembler utasítás következik. A bordó oszlopban az elsőként beprogramozott utasítássor látható, a kék oszlopban pedig az átprogramozás utáni állapot.
0000 | 2808 | goto | START_1 | 0000 | 0000 | nop | ||||||||
0001 | 3FFF | - üres - | 0001 | 2860 | goto | START_2 | ||||||||
0002 | 3FFF | - üres - | 0002 | 3FFF | - üres - | |||||||||
0003 | 3FFF | - üres - | 0003 | 3FFF | - üres - | |||||||||
0004 | 2848 | goto | SUB_1 | 0004 | 0000 | nop | ||||||||
0005 | 3FFF | - üres - | 0005 | 28A8 | goto | SUB_2 | ||||||||
0006 | 3FFF | - üres - | 0006 | 3FFF | - üres - | |||||||||
0007 | 3FFF | - üres - | 0007 | 3FFF | - üres - | |||||||||
0008 | ... | ... | ... | 0008 | ... | ... | ... | |||||||
0009 | ... | ... | ... | 0009 | ... | ... | ... |
Az újraprogramozás során az első (0001), főprogramrészre ugró utasítás törlésre kerül, és az első üres helyre (0002) beírt újabb ugró utasítás már az új főprogramra mutat. Ugyanez a megoldás alkalmazható a megszakításkezelő szubrutin megváltoztatására is. Az újraprogramozáshoz természetesen elegendően nagy programmemóriájú mikrovezérlőt kell választani.
A fenti táblázat szerinti programfelépítés három újraprogramozást tesz lehetővé. Természetesen ezzel a módszerrel ennél több is megvalósítható, illetve ehhez hasonló elágazási lehetőség a programon belül bárhol elhelyezhető.
Tudomány és Technika (test@t-es-t.hu)
<< Előző oldal Vissza a tartalomjegyzékhez Vissza a lap tetejére Következő oldal >>