PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speichern im EEProm



klaus1973
02.01.2008, 16:05
Hallo,

ich habe mal eine Frage zum EEProm des Mega8 (gilt sicher auch für andere Mega's).

Bisher nutze ich immer das folgende Programm zum Speichern und Lesen im EEprom:


$regfile = "m8def.dat"
$crystal = 7372800
$baud = 9600


Dim Speicher1 As String * 10
Dim Ausgabe As String * 10

Speicher1 = "320"

Writeeeprom Speicher1 , &H10


Readeeprom Ausgabe , &H10

Print Ausgabe

End

Das Programm funktioniert auch soweit.

Jetzt möchte ich den Wert, der hier über das Programm in das EEProm geschrieben wird, manuell über Ponyprog einspielen.
Mein erstes Problem, beim Auslesen des EEProm über Ponyprog zeigt mir dieses, nach Ausführung des Programms, keinen Inhalt im EEprom an. Wieso?
Und noch ein, für mich ganz neues Thema:
Wie kann ich einen Wert, wie hier im Beispiel, an eine bestimmte Speicherstelle im EEProm bringen?

stefan_Z
02.01.2008, 16:44
Also bei mir funktioniert das soweit. Bist du sicher, dass der µC das speichert? und dass du PonyProg richtig "deutest"? In PP ist der EEP immer unten (scrollen!) im Fenster, erkennt man an der unterschiedlichen Text-Farbe.
Ansonsten reichts ein Textfile mit dem entsprechenden Inhalt zu machen. Die kann man dann in den µC laden.

klaus1973
02.01.2008, 18:26
Hey super,

ich habe tatsächlich Ponyprog falsch verstanden. Ich dachte man muss das EEProm separat auslesen!

Danke stafan_z

klaus1973
02.01.2008, 18:58
jetzt habe ich gleich noch ne Frage!

Kann ich in Bascom eigentlich direkt den EEProm Speicher im Programm belegen?
Wie?

Jaecko
02.01.2008, 21:12
Im Bascom-Programmer gibts die Registerkarte "EEPROM", da lassen sich ebenfalls Werte per Hand bzw. aus ner Textdatei einlesen und dann übertragen.
Nur aufpassen: Manchmal gibts bei den µC bzw. im Programmer die Funktion, dass der EEPROM beim Aufspielen eines Programms gelöscht wird. Also diese vorher evtl abschalten.

stefan_Z
02.01.2008, 22:34
Ja, man kann Variablen auch als EEP definieren, man kann sie aber nicht als reguläre Variablen benutzen!

klaus1973
03.01.2008, 19:12
oje, jetzt bin ich völlig verwirrt.
Ich versuche einfach mal zu beschreiben was ich machen möchte. Vielleicht hat ja jemand ein Rezept für mich.

Ich möchte beim Programmieren eines Mega8 einen Zeitwert als Variable vorgeben.
Dieser Zeitwert wird im Laufe des Programms öfter verändert bzw. im Programm verwendet.
Nach einem Reset soll das Programm immer auf den letzten Wert zugreifen.
Mein Ziel war es, den Zeitwert im EEProm schon bei der Programmierung zu hinterlegen und im Verlauf des Programms immer wieder an zu passen.

Jaecko
03.01.2008, 19:32
naja, soferns möglich ist, beim Programmstart irgend einen beliebigen Wert zwischen 0-255 (wenns ne Byte-Variable ist) zu verwenden, würd ich beim Start gleich direkt die Variable nehmen (also egal was da grad gespeichert ist). Diese dann in ne normale Variable kopieren und diese normale dann im Programm verwenden.

Speichern würd ich die Variable nur manuell; also eine Art "Shutdown" einbauen, bei dem die Variable dann in die im EEPROM gespeichert wird.

Also z.B.



DIM EWert as ERAM Byte
DIM Wert as Byte

'Wert laden:
Wert = EWert

...'Hauptprogramm

'Wert speichern:
EWert = Wert

stefan_Z
04.01.2008, 15:23
Das wurde hier im Forum schon öfters diskutiert. Im Prinzip nutzt man die BrownOutDetection um festzustellen, wenn der µC ausgemacht wird. Dann speichert man schnell den Wert ins EEP und bei Start muss mans einmal auslesen, fertig.

StevieL
04.01.2008, 19:06
Hallo Klaus,

du willst das Eeprom von Bascom gleich mit Startwerten beschreiben lassen? Wenn du an deinen Code folgendes anfügst, werden die Bytes 2, 2, 25 u. s. w. beim Compilieren in die EEP-Datei geschrieben und mit an den Controller übertragen:



Dta:
$eeprom
Data 2 , 2 , 25 , 90 , 3 , 3 , 5 , 15 , 20
$data


Wenn du größere Werte oder Strings speichern willst, müssen die entsprechend gekennzeichnet werden.