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...
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: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
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.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 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.







Zitieren

Lesezeichen