Hi,
ich habe bei meinem Umbau meiner RC-Funke auch so etwas benötigt. Nach dem Einschalten werden Werte aus dem Eeprom geladen und in Variablen abgelegt. Das mache ich, indem ich ein Byte-Array per Overlay auf die Variablen lege, die ich verwenden will (egal ob Word oder Single oder was auch immer) erst danach kommt die Do loop Schleife...
Code:
Dim Mo As Byte At &H250 'Mode der Belegung der 4 Steuerfunktionen
Dim S As Byte At &H251 'Seitenruder
Dim M As Byte At &H252 'Motorregler
Dim H As Byte At &H253 'Höhenruder
Dim Q As Byte At &H254 'Querruder
Dim Mini(4) As Word At &H255 'Array der 4 Minimumwerte
Dim Eedat(13) As Byte At &H250 Overlay 'Array der Eepromdaten zum Verarbeiten in For / Next
Dim A As Byte 'Zähler For Next
Dim Adress As Byte 'aktuelle Adresse der Eepromnutzung
.
.
.
Const Eestart = &H00 'Beginn des benutzten Eeprombereiches
'Einlesen der Knüppelbelegung
Adress = Eestart
For A = 1 To 13
Readeeprom Eedat(a) , Adress
Incr Adress
Next
Im Programm arbeite ich dann mit den Variablen die per overlay geladen wurden. Habe ich Änderungen daran vorgenommen aktiviere ich per tastendruck das schreiben in den Eeprom mittels dieser Routine. Dadurch stehen dann beim nächsten Einschalten wieder die aktuellen Werte zur verfügung. (Du kannst es aber auch einfach so mit laufen lassen, da diese Routine vor dem schreiben überprüft, ob das schreiben des aktuellen Bytes überhaupt nötig ist...)
Code:
Cnt = 0
Adress = Eestart
For A = 1 To 13
Brennen0:
Readeeprom Eetemp , Adress
If Eetemp <> Eedat(a) Then
Writeeeprom Eedat(a) , Adress
Waitms 25
If Cnt > 10 Then
Set Burnerror
Goto Brennen1
End If
Incr Cnt
Goto Brennen0
End If
Brennen1:
Cnt = 0
Incr Adress
Next
Waitms 600
If Burnerror = 1 Then
Set Eewriteerror1
Burnerror = 0
Lcd_text = "Error"
Else
Lcd_text = "FC16 OK"
End If
Reset Eewriteerror
Lcd_posx = 70
Lcd_posy = 1
Gosub Lcd_print
Diese Routine vergleicht den Wert im Eeprom mit dem der Variablen und speichert nur neu, wenn der neue Wert abweicht. Danach wird nochmal überprüft - bei Brennfehler wird das ganze max. 10 mal versucht. Klappt das Brennen nicht, wird ein Errorbit gesetzt, und am Ende der Routine eine Fehlermeldung auf dem Display ausgegeben. Hat alles geklappt kommt eine Bestätigung aufs Display.
Diese Routine soll beim Schreiben den Eeprom schonen, da er ja nur begrenzte Anzahl an Brennvorgängen verkraften kann. Falls Bytes nicht mehr beschreibbar sein sollten, kann man einfach die Konstante Eestart verändern, und nutzt dann einen anderen Bereich des Eeprom...
Ich hoffe, daß dir das etwas nützt, und du dich in den Code reindenken kannst - aber eigentlich habe ich die Variablen so benannt, daß vieles sich selbst erklären sollte.
Lesezeichen