Hallo zusammen, ich komm mit den eeprom-funktionen im tutorial nicht ganz klar. ich möchte einen float-wert ins eeprom speichern (messung eines zurückgelegten weges) und diesen nachdem der controller wieder eingeschaltet wird wieder lesen und den weg weiterzählen. Hierzu möchte ich beim allerersten start des controllers mit dem wert 0.0 starten und dann in bestimmten abständen (alle 250m zurückgelegter weg) diesen im eeprom speichern. Ich verstehe im tutorial nicht, wie der wert wieder in u.r gespeichert werden soll, wenn doch der variablenname u.r nirgends auftaucht! es taucht immer nur u.i auf, der wert in u.r wird doch nie benutzt, oder? Ich komm auch nicht drauf, wie ich mit dem wert 0 starten kann und das programm sich dann nach jedem neustart des controllers den aktuellen wert holt. wenn ich die variable schon mit 0.0 initialisiere, dann wird sie doch bei jedem neustart des controllers wieder auf 0.0 gesetzt und mein gespeicherter wert ersetzt, oder nicht? Bin total ratlos. Möchte nen tachometer realisieren, der die zurückgelegte gesamtstrecke speichert und immer fortsetzt. bin dankbar für jeden hinweis (code im anhang, eeprom-funktionen aus tutorial)
Ok, ein Teil des verständnisproblems ist gelöst, da ich kein plan von union hatte. der teil wär soweit klar, sorry. das eeprom-problem hab ich immer noch...
@ Andy (Gast) >möchte einen float-wert ins eeprom speichern (messung eines >zurückgelegten weges) und diesen nachdem der controller wieder >0.0 starten und dann in bestimmten abständen (alle 250m zurückgelegter >weg) diesen im eeprom speichern. Sowas macht man meist besser mit Interger, siehe Festkommaarithmetik. > wenn ich die variable schon mit 0.0 initialisiere, dann wird >sie doch bei jedem neustart des controllers wieder auf 0.0 gesetzt und >mein gespeicherter wert ersetzt, oder nicht? Nöö, das gilt nicht für Variablen im EEPROM. So wie es gemacht ist passt das schon, wenn gleich float hier ziemlich deplatziert ist. Nimm uint32_t. MFg Falk
Vielen Dank für die schnelle Hilfe, werde es ausprobieren. Thanks
Doch noch ne Frage: Wenn ich das Programm getestet habe und es wurden bereits Werte ins Eeprom geschrieben, wie kann ich die Variable im Eeprom wieder nullen???
@ Andy (Gast) >Wenn ich das Programm getestet habe und es wurden bereits Werte ins >Eeprom geschrieben, wie kann ich die Variable im Eeprom wieder nullen??? Einfach den EEPROM mit dem .eep File neu programmieren. MFG Falk
So, hab jetzt alles am laufen und ausprobiert. Hab auch den Code nochmal etwas abgeändert (im bereich eeprom_read und eeprom_write). Mein Tacho zählt, das der Wert ins eeprom geschrieben wird macht ein kleines flackern meiner 7-Segment-Anzeige zum richtigen Zeitpunkt deutlich. Doch nach Reset des controllers wird die entsprechende variable wieder mit 0.0 angezeigt, obwohl der wert aus dem eeprom gelesen worden sein muss. Ich programmiere den controller via jtag, muss ich bei den fuses auf was bestimmtes achten? was ist mit eesave-fuse? der etwas geänderte code nochmals im anhang
@ Andy (Gast) >nach Reset des controllers wird die entsprechende variable wieder mit >0.0 angezeigt, obwohl der wert aus dem eeprom gelesen worden sein muss. Logisch, der Fehler steckt hier. >eeprom_write_block(&GesKmEeprom,&(u.i),sizeof(float)); } Schau mal in die Doku der libc ;-) Und nimm um Himmels Willen uint32_t statt float. MfG Falk
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.