Vissza a főoldalra    Vissza a PIC főoldalra

<< 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.

ˇ Belépés programozási üzemmódba
ˇ Programozási parancsok
ˇ Adat betöltése
ˇ Adat kiolvasása
ˇ Cím növelése
ˇ Konfiguráció betöltése
ˇ Programozás indítása és leállítása
ˇ Felhasználói program beégetése
ˇ Konfigurációs szó és azonosító beégetése
ˇ Ellenőrző összeg
ˇ Programmódosítási lehetőség

      Az egyes EPROM memóriás mikrovezérlő típusok angol nyelvű gyári programozási dokumentációja:

PIC12C671
PIC12C672
PIC12CE673   
PIC12CE674
PIC14000
PIC16C432
PIC16C433
PIC16C554
PIC16C554A
PIC16C556
PIC16C556A   
PIC16C558
PIC16C558A
PIC16C61
PIC16C62
PIC16C62A
PIC16C62B
PIC16C620
PIC16C620A   
PIC16C621
PIC16C621A
PIC16C622
PIC16C622A
PIC16CE623
PIC16CE624
PIC16CE625
PIC16C63
PIC16C63A   
PIC16C64
PIC16C64A
PIC16C642
PIC16C65
PIC16C65A
PIC16C65B
PIC16C66
PIC16C662
PIC16C67
PIC16C71
PIC16C710   
PIC16C711
PIC16C712
PIC16C715
PIC16C716
PIC16C717
PIC16C72
PIC16C72A   
PIC16C73
PIC16C73A
PIC16C73B
PIC16C74
PIC16C74A
PIC16C74B
PIC16C745
PIC16C76
PIC16C765   
PIC16C77
PIC16C770
PIC16C771
PIC16C773
PIC16C774
PIC16C781
PIC16C782
PIC16C923
PIC16C924
PIC16C925
PIC16C926
 
 
 
 
 
 

 


 

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.

Programozási üzemmód aktivizálása
11.2.1-1. Ábra

Vissza a lap tetejére


 

Programozási parancsok

      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.)

11.2.1-1. Táblázat
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.

A soros bevitel időzítése
11.2.1-2. Ábra

Vissza a lap tetejére


 

Adat betöltése

      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.

Az adat betöltésének időzítése
11.2.1-3. Ábra

      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.

Vissza a lap tetejére


 

Adat kiolvasása

      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.

Az adat kiolvasásának időzítése
11.2.1-4. Ábra

      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.

Vissza a lap tetejére


 

Cím növelése

      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.

A memóriacím növelése
11.2.1-5. Ábra

      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.

Vissza a lap tetejére


 

Konfiguráció betöltése

      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.

A konfiguráció betöltése parancs
11.2.1-6. Ábra

      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.

Vissza a lap tetejére


 

Programozás indítása és leállítása

      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 beégetés indítása parancs
11.2.1-7. Ábra

      A Programozás leállítása parancs idődiagramja látható a következő ábrán.

A beégetés leállítása parancs
11.2.1-8. Ábra

      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.

Vissza a lap tetejére


 

Felhasználói program beégetése

      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ás blokkvázlata
11.2.1-9. Ábra

      A programozási ciklus szubrutin:

A programozási ciklus
11.2.1-10. Ábra

      A programkiolvasás folyamatábrája:

A programkiolvasás blokkvázlata
11.2.1-11. Ábra

Vissza a lap tetejére


 

Konfigurációs szó és azonosító beégetése

      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ó programozása
11.2.1-12. Ábra

      Az azonosítók és a konfigurációs szó kiolvasásának folyamatábrája:

Az azonosítók és a konfigurációs szó kiolvasása
11.2.1-13. Ábra

Vissza a lap tetejére


 

Ellenőrző összeg

      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.

Vissza a lap tetejére


 

Programmódosítási lehetőség

      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.

11.2.1-2. Táblázat
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 >>

Vissza a főoldalra    Vissza a PIC főoldalra