Autor |
PIC: Variablen im Flash-Speicher ablegen Suche nach: pic (2054) |
|
|
|
|
BID = 389095
Peo Gesprächig
Beiträge: 181 Wohnort: Baden-W.
|
|
Hallo
Ich weiß, dass es geht, aber nicht wie:
Wie kann ich eine Variable in einem PIC speichern, so dass ich Sie wieder auslesen kann, nachdem der Chip aus- und wieder eingeschaltet wurde?
mfg
Peo |
|
BID = 389103
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
|
Das geht nur, wenn der Chip mit EEPROM ausgestattet ist, was nicht bei allen der Fall ist.
Hol dir bei Microchip das vollständige (es gibt auch Kurzversionen) Datenblatt zu deinem Chip und schau, was da über das "Data EEPROM Memory" steht.
Damit der Inhalt nicht zufällig überschrieben wird, sind spezielle Befehlssequenzen erforderlich, aber das ist dort alles erklärt.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten ! |
|
BID = 389209
Ltof Inventar
Beiträge: 9322 Wohnort: Hommingberg
|
Ja, dafür nimmt man üblicherweise den EEPROM-Speicher.
Einige PICs können zusätzlich auch in ihrem Flash-Speicher herumwerkeln.
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)
|
BID = 389237
stepp64 Gesprächig
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 162
|
Hallo,
Programmierbeispiele findest du auch bei www.sprut.de. Sowohl für das Schreiben und Lesen im EEPROM als auch im Flash-speicher. Letzteres geht allerdings nicht mit allen PICs. Ist aber bei sprut alles erklärt.
Gruß Sven
|
BID = 389546
Peo Gesprächig
Beiträge: 181 Wohnort: Baden-W.
|
Danke für die Tipps,
da hätte ich aber auch selber drauf kommen können. Nunja, so ist das nunmal, mit dem Wald vor lauter Bäumen ...
Eine Frage hätte ich noch, muss ich diese Befehlszeilen für jeden EINZELNEN Schreibbefehl verwenden oder kann ich das einmal iniziieren und dann mehrere Variablen hinter einander auf verschiedene Speicherplätze speichern?
movlw 55h ;Unlock write
movwf EECON2 ;
movlw AAh ;
movwf EECON2 ;
mfg
Peo
|
BID = 389558
stepp64 Gesprächig
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 162
|
Hallo,
bin mir nicht zu 100% sicher, aber ich denke, dass du diesen Ablauf bei jedem zu schreibenden Byte einhalten musst. Ich benutze dazu ein Unterprogramm und rufe es dann mit call auf (siehe Codebeispiel).
Code : |
;EEPROM schreiben +++++++++++
;Übergabeparameter: in w das zu schreibende Byte übergeben
; in flash_l die Adresse auf die geschrieben werden soll
;Rückgabewert: keiner
EE_Write
clrf STATUS
bcf PIR2,EEIF ;Der EEPROM meldet sich mit EEIF=1 wenn er fertig ist
BSF STATUS, RP1
BCF STATUS, RP0 ;EEADR und EEDATA liegen in der Bank 2
MOVWF EEDATA ;das was in w steht wollen wir schreiben
MOVFW flash_l ;die zu beschreibende Zelle
MOVWF EEADR ;kommt nach EEADR
BSF STATUS, RP0 ;EECON1 liegt in der Bank 3
BCF EECON1, EEPGD ;wir wollen Datenspeicher beschreiben
BSF EECON1, WREN ;nun ist Schreiben erlaubt
BCF INTCON, GIE ;verbieten aller Interrupts
; Die folgenden 5 Zeilen müssen genau so im Code stehen!!!
MOVLW 0x55
MOVWF EECON2 ;schreibe 55h nach EECON2
MOVLW 0xAA
MOVWF EECON2 ;schreibe AAh nach EECON2
BSF EECON1, WR ;starte den Schreibzyklus
clrf STATUS ;Bank 0
EE_Write_warte
btfss PIR2,EEIF
goto EE_Write_warte ;auf das Ende des Schreibprozesses warten
BSF INTCON, GIE ;Interrupts wieder erlauben
return
|
|
Du arbeitest halt unter Assembler, da muss man wirklich ALLES dem Prozessor ganz genau sagen.
Ciao Sven
|
BID = 389583
Peo Gesprächig
Beiträge: 181 Wohnort: Baden-W.
|
Danke für den Tipp, die Idee kam mir auch beim Programmieren vorhin.
ich habe erstmal das Lesen und Schreiben geübt, das funktioniert. Fall ich im Code wieder Schnitzer drin habe, wäre ich für Anregungen dankbar.
Prorgamm: Beim Drücken des Tasters an RA3 wird die Variable "Speicher" gelesen, um eins erhöht und in den EEPROM zurück geschrieben. Danach wird sie in PORTC angezeigt.
Mein MPLAB wirft übrigens bei der Zeile
movlw AAh
einen Fehler auf. Wenn ich
movlw .170
schreibe, klappt aber alles Einwand frei. Woran kann das liegen?
mfg
Peo
[ Diese Nachricht wurde geändert von: Peo am 29 Nov 2006 22:13 ]
|
BID = 389598
stepp64 Gesprächig
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 162
|
Das hatte ich auch am Anfang. Deshalb habe ich mir bei Hexzahlen die Schreibweise 0xAA angewöhnt. Das klappt bei mir.
Gruß Sven
|