elomax

[ Techniek ] [ Shop ] [ Site map
Inleiding ] Processor ] Ontwikkelomgeving ] Interrupts ] Digitale I/O ] Seriele communicatie ] Timers ] A/D Conversie ] Puls teller ] SPI ] Watchdog ] Clock monitor ] [ EEPROM ] Configuratie ] Ontwerp technieken ] Toepassings voorbeeld ]

Terug
Omhoog

De EEPROM

De EEPROM kan bijvoorbeeld worden gebruikt in een programma om constanten, calibratiefactoren, etc in te bewaren. De gegevens in de EEPROM blijven behouden, ook wanneer de voedingsspanning wordt weggenomen.

LET OP: Een EEPROM cel kan minimaal 10.000 keer geprogrammeerd en gewist worden. Meer dan voldoende wanneer U het EEPROM gebruikt om relatief constate gegevens in te laden. Wanneer U echter in een programma een EEPROM cel herhaald programmeert (het EEPROM kan per byte geprogrammeerd worden) dan is de 10.000 keer snel bereikt. Daarna is er geen garantie meer dat het EEPROM nog goed is. Let dus op dat Uw programma niet continu één of meer bytes in het EEPROM wist en opnieuw programmeert.

Wanneer een EEPROM byte gewist is, bevat het $FF. Door te programmeren kan een bit van '1' in '0' veranderd worden. Wanneer een bit van een '0' in een '1' veranderd moet worden, moet het betreffende byte eerst gewist worden. Programmeren van een byte en wissen van een byte duren elk maximaal 10ms.

Bescherming tegen programmeren

Standaard is het EEPROM beschermd tegen ongewild programmeren of wissen. Het BPROT register bevat 4 bits, die elk een gedeelte van het EEPROM beschermen tegen programmeren of wissen. Wanneer U het EEPROM dus wilt programmeren, moet eerst dit BPROT register veranderd worden. Het gedeelte van het EEPROM dat door de respectievelijke BPRT bits beschermd wordt is:

bit

beschermd gebied

lengte van het gebied

BPRT0

$B600 - $B61F

32 bytes

BPRT1

$B620 - $B65F

64 bytes

BPRT2

$B660 - $B6DF

128 bytes

BPRT3

$B6E0 - $B7FF

288 bytes

Als alle bits op '1' staan, is dus het hele EEPROM beschermd. Dit gebeurt automatisch na opstarten van de micro-controller.

Nadat het BPROT register is aangepast door de juiste bits op '0' te zetten, kan het EEPROM gewist en geprogrammeerd worden. Programmeren en wissen gaat door middel van het PPROG register.

Wissen

Wissen kan per byte, per blok van 16 bytes, en ook is het mogelijk het hele EEPROM in één keer te wissen.

Blokken van 16 bytes beginnen steeds op een adres waarvan de laatste 4 bits '0' zijn ($B600 - $B60F, $B610 - $B61F, $B620 - $B62F, etc...)

De procedure is als volgt:

  1. Maak het EELAT bit en het ERASE bit in het PPROG register een '1'. Indien één byte gewist moet worden, maak dan tevens het BYTE bit een '1'. Indien een blok van 16 bytes gewist moet worden, maak dan in plaats van het BYTE bit, het ROW bit een '1'. Indien U zowel het BYTE bit als het ROW bit een '0' laat, wordt het gehele EEPROM gewist. Indien beide bits een '1' zijn, zal er één byte gewist worden.

  2. Schrijf een willekeurige waarde naar het byte dat gewist moet worden, of op een adres in het blok van 16 bytes dat gewist moet worden.

  3. Maak nu naast de bits die in de eerste stap op '1' gezet werden, ook het EEPGM bit een '1'.

  4. Wacht 10ms.

  5. Zet alle bits in het PPROG register weer op '0'.

Programmeren

De procedure om één byte te programmeren is als volgt:

  1. Maak het EELAT bit in het PPROG register een '1'.

  2. Schrijf de te programmeren waarde naar het byte dat geprogrammeerd moet worden.

  3. Maak nu naast het EELAT bit dat in de eerste stap op '1' gezet werd, ook het EEPGM bit een '1'.

  4. Wacht 10ms.

  5. Zet alle bits in het PPROG register weer op '0'.

Wanneer alle bytes geprogrammeerd zijn, is het verstandig de beschermings-bits in het BPROT register weer op '1' te zetten.

Een voorbeeld van een routine om één byte te programmeren is hieronder gegeven. Tijdens programmeren van de EEPROM is de EEPROM niet toegankelijk.

* delay 10ms
dly10           equ $
                pshx            |bewaar register op de stack
                ldx #20000/6    |10ms gedeeld door aantal cycles in de lus
dly100          dex
                bne dly100      |eind van wachtlus
                pulx            |haal register terug van de stack
                rts
* schrijf een byte in (B) naar de EEPROM op adres (X)
* indien nodig wordt de locatie eerst gewist
eewrite         equ $
                psha            |bewaar de registers
                cmpb 0,x
                beq eewrite9    |ga terug indien het byte al in het eeprom staat
                pshb
                comb
                orab 0,x        |kijk of de lokatie gewist moet worden
                comb            |omdat er een '0' in een '1' veranderd moet worden
                pulb
                beq eewrite1    |zoniet, sla dan het wissen over
                ldaa #((byte)or(erase)or(eelat))
                staa pprog      |kies het wissen van één byte
                stab 0,x        |adresseer het adres dat gewist moet
                oraa #eepgm     |en start het wissen
                staa pprog
                bsr dly10       |wissen duurt 10ms
                clr pprog       |stop daarna het wissen
                cmpb 0,x        |en kijk of het byte de juiste waarde heeft
                beq eewrite9    |zoja, sla dan het programmeren over
eewrite1        ldaa #eelat
                staa pprog      |kies programmeren van één byte
                stab 0,x        |schrijf de data naar het eeprom
                ldaa #(eelat+eepgm)
                staa pprog      |start het programmeren
                bsr dly10       |programmeren duurt 10ms
                clr pprog       |stop daarna het programmeren
eewrite9        pula            |haal de registers terug
                rts


De registers die de besturing van de EEPROM verzorgen

BPROT $1035

-

-

-

ptcon

bprt3

bprt2

bprt1

bprt0

 

PPROG $103B

odd

even

-

byte

row

erase

eelat

eepgm

© 2005...2008 Elomax [Voorwaarden ]