Forum: Mikrocontroller und Digitale Elektronik EEPROM PIC16F883 schreiben


von Willi (Gast)


Angehängte Dateien:

Lesenswert?

Versuche PIC 16F883 EEProm zu schreiben, obwohl ich den Code von 
MICROCHIP anwende (aus dem DATA Sheet)hab ich keinen Erfolg. Es wird 
nicht geschrieben.
Kann mir jemand helfen, mein Code als Anhang.
Vielen Dank
Willi

von Dieter W. (dds5)


Lesenswert?

> EE_16F883
> ;lesen 16F883
> BANKSEL EEADR ;
>   MOVLW   DATA_EE_ADDR ;
>   MOVWF   EEADR ;Data Memory Address to write
>   MOVLW   DATA_EE_DATA ;
>   MOVWF   EEDAT ;Data Memory Value to write

Sollte das wirklich irgendwo so stehen?
Mit "MOVLW" wird ja die Adresse der Variablen "DATA_EE_ADDR" in das WREG 
geladen und nicht der Wert.

Ich hätte hier eher "MOVF DATA_EE_ADDR,W" erwartet.

von Willi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Dieter,
ja das war ein Fehler, als Anhang das berichtigte Listing
aber es klappt leider nicht.
vielen Dank
Willi

von Dieter W. (dds5)


Lesenswert?

>  BSF     EECON1, WR ;Set WR bit to begin write
>    btfss    EECON1,WR

>    goto    EE1  ;wiederholt den Schreibcyklus
>  ;               wenn Schreib-Bit nichr zurückgesetzt ist

Das habe ich auch nicht in der Form in Erinnerung (mach schon ein paar 
Jahre nix mehr mit PIC16).

So sollte das eher funktionieren:

bsf     EECON1,WR  ;Schreibvorgang starten
btfsc   EECON1,WR  ;Schreiben fertig?
goto    $-1        ;nein, warten

von usuru (Gast)


Lesenswert?

Der Schreibvorgang ist bei sprut genau beschrieben, damit geht es auch.

http://sprut.de/electronic/pic/grund/eeprom.htm

von Willi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Dieter,
vielen Dank
hab deinen Vorschlag umgesetzt, aber die Zelle(1) wird nicht verändert.
Hab die Zelle mit dem "Leseprogramm ausgelesen.
Auf auf dem EE-Monitor meines PiCkit2 auch keine Veränderung.
Hab die veränderte Datei nochmals angehägt.
Vielen Dank
Willi

von Willi (Gast)


Lesenswert?

Hallo usuru,
bei mir ist der Wurm drin. Auch mit  Sprut und 16F876 schreibt er nicht, 
sondern bleibt irgenwo hängen. Werd ich morgen mal schauen.
Vielen Dank
Willi

von stepp64 (Gast)


Lesenswert?

EEADR liegt in Bank 2 und dein Wert den du schreiben willst in Bank0. Da 
du aber am Anfang der Schreibroutine auf Bank2 stellst nimmt er 
natürlich auch dein Datenwert aus Bank2 (was aber falsch ist). Du musst 
also schon darauf achten, in welchem Speicherbereich deine Variablen und 
Register liegen.

Weiter hab ich erst mal nicht geschaut, da dieser Fehler sicher noch 
öfter auftritt..

Gruß
Sven

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.