PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speichern und Lesen aus dem EEprom



elkokiller
25.06.2008, 20:18
Hallo,

ich habe bisher nie mit den Daten im EEprom gearbeitet.
Jetzt möchte ich darin div. Daten wie Zeiten und ID speichern und diese auch nach neueinspielen eines Programms beibehalten.

Zum Testen habe ich folgendes Programm geschrieben:


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


Dim Id As String * 10
Dim Idram As Eram String * 10
Dim Ids As String * 10


Print "Schreiben"

Id = "test 10"
Idram = Id


Writeeeprom Id , &H10


Print "Lesen"




Readeeprom Ids , &H10


Print Ids

End

Soweit o.k. Nach dem Start wird mir Ids angezeigt.


Jetzt spiele ich ein neues Programm ein und lese den Speicher aus:


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


Dim Id As String * 10
Dim Idram As Eram String * 10



Print "Lesen"



Readeeprom Id , &H10


Print Id

End
Als Ergebnis erhalte ich nur yyyyyyyyyy mit je zwei Punkten über den y.

Was mache ich falsch?

linux_80
25.06.2008, 20:58
Das heisst normal, dass das EEprom auch gelöscht wurde als der Flash mit dem neuen Programm beschrieben wurde, bzw. deswegen vorher gelöscht wurde.
Dieses y ist das Zeichen für FF !
Evtl. musst Du das Fusebit umstellen, das der EEprom nicht gelöscht wird beim Flash löschen !

elkokiller
25.06.2008, 21:49
danke für den Tip!

Leider ist das nicht der Grund. Ich habe das Bit EESAVE gesetzt und nicht gesetzt.
Es ändert sich nichts!
Ist es möglich dass noch ein weiteres Bit gesetzt werden muss?

In PonyProg habe ich den Haken bei
BOOTSZ1, BOOTSZ0 und SUTO gesetzt.

PcVirus
25.06.2008, 23:09
Hi,
kann es vielleicht sein, dass Bascom eine neue Speicherstelle für die Variable generiert und so die alten Werte nicht mehr ausgelesen werden können?

MfG Jörn

elkokiller
26.06.2008, 07:18
wie kann ich das ändern?
Die Speicherstelle ist doch vorgegeben

Jaecko
26.06.2008, 09:17
Das ändert sich dann, wenn im Programm an der Reihenfolge der Variablendeklaration was geändert wird.
Fest vorgegeben ist da mit dem normalen DIM nichts; die werden normal in der Reihenfolge abgelegt, wie sie im Programm stehen.

Mit "DIM Variable AS Typ AT Adresse" kann man mit 'Adresse' ne feste position erzwingen.
Welche Adresse man da braucht, müsste sich bei der noch "normalen" Deklaration im Programm mit VarPtr() rausfinden lassen.

elkokiller
26.06.2008, 10:12
ich habe zwischenzeitlich ein bisschen im Forum gestöbert.
Offensichtlich muss mann bei der Wahl der Speicheradresse einen Bereich weiter hinten wählen.
Die Adresse &H10 ist wohl sehr ungünstig. Weis jemand welcher Bereich "sicher" ist?

linux_80
27.06.2008, 22:27
Hallo,

Du musst ins DB Deines AVR schauen wo das SRAM beginnt, meist &H60, bei grösseren und neueren AVR &H100, das ist dann die kleinste Adresse die man verwenden kann. Das EEprom geht bei 0 an.
Und nach dem Compilieren in die Reportdatei sehen (Ctrl+W) ob alles mit den Adressen glatt gegangen ist.

elkokiller
27.06.2008, 22:34
Danke!

Habs zwichenzeitlich rausbekommen. Ich habe jedesmal in Ponyprog das gesamte Programm inkl. EEProm File am Ende übertragen und damit die Daten im EEPROM überschrieben

Blue72
18.07.2008, 07:12
Dazu hätt ich mal ne Frage ...

In Deinem Code oben benutzt Du "Dim Idram As Eram String * 10" und

Id = "test 10"
Idram = Id
Writeeeprom Id , &H10

So wie ich das verstanden habe, hast Du doch schon mit idram=id den Wert ins eeprom geschrieben, dann braucht man doch den writeeeprom Befehl gar nicht mehr oder ??? Oder aber das ist die Lösung für mein Problem das keine Daten ins EEprom geschrieben werden :D

Jens

Jaecko
18.07.2008, 07:49
Also ich würds so interpretieren, dass dort wirklich der Wert 2x im EEPROM landet. Wenn idram an &h10 liegt, dann stehts im Endeffekt nur 1x drin, ansonsten 2x.