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.
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
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
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
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.