Hallo, ich versuche gerade herauszufinden, wie ich eine int Variable ins EEPROM meines ATTiny26 speichern und später wieder auslesen kann, habe mir das Tutorial angesehen, dort wird aber nur auf uint8 und uint16 und float eingegangen. Vielleicht kann mir ja jemand ein Codestück reinstellen, welches für int funktioniert!
Ich speichere Konfigurationen mit gcc und avrlibc immer so: #include <avr/eeprom.h> struct tsetup { uint16_t var_bla; uint8_t var_bla_array[16]; }; struct tsetup setup; Das kannst Du beliebig erweitern... und auch einen "int" da reinschreiben Zum Lesen aus dem EEPROM: eeprom_busy_wait (); eeprom_read_block(&setup, 0, sizeof(setup)); Zum Schreiben ins EEPROM: eeprom_busy_wait (); eeprom_write_block(&setup, 0, sizeof(setup));
Im EEPROM werden ja eh nur Bytes gespeichert. Da sollte man durch etwas verschieben und casten aus signed integern 2 Bytes machen können. Den Rückweg dann auch so... Wobei das mit dem Casten etwas schwieriger werden dürfte...
Wir sind doch im GCC-Forum. Wie gesagt, mit den Blockroutinen gar kein Problem: #include <avr/eeprom.h> int test; eeprom_busy_wait(); eeprom_write_block(&test, 0, sizeof(test)); So schreibt man die Variable test an die erste Speicherstelle im EEPROM.
Hi, habe das Problem mit dem EEPROM immer noch nicht ganz gelöst, wenn ich einen int Wert ins EEPROM schreibe, dann ist er zwar drinnen, aber wenn ich ihn wieder auslese und am LCD ausgebe, dann wird die Zahl genau verdreht ausgegenen. z.B. Speichern: 12345, Laden + Ausgabe am LCD: 54321 Ich habs jetzt mal so gemacht: int cur_key; . . . /* Write new key to eeprom */ eeprom_busy_wait(); eeprom_write_block((void*) &cur_key, 0, sizeof(cur_key)); eeprom_read_block((void*) &cur_key, 0, sizeof(cur_key));
Bernd Edlinger wrote: > habe das Problem mit dem EEPROM immer noch nicht ganz gelöst, wenn ich > einen int Wert ins EEPROM schreibe, dann ist er zwar drinnen, aber wenn > ich ihn wieder auslese und am LCD ausgebe, dann wird die Zahl genau > verdreht ausgegenen. z.B. Speichern: 12345, Laden + Ausgabe am LCD: > 54321 Das kann ja nun garnicht sein. Das EEPROM Speichert byteweise, wie soll da bitteschön die Darstellung der Zahlen im Dezimalsystem umgedreht werden? Da ist vermutlich eher deine LCD-Ausgaberoutine falsch, gib mal den Wert vor dem Speichern auch am LCD aus. /Ernst
Hi, dass ist jetzt ja echt komisch, irgendwie gibts da wirklich ein Problem mit der Ausgabe. Ist bis jetzt noch nie aufgetreten, aber irgendwie verdreht die Ausgabe von int den Wert, dabei mach ich da eigentlich nur itoa. void lcd_putint(int value) { char string[6]; itoa(value, string, 10); lcd_puts(string); } Hat vielleicht jemand eine Idee?
Genau dieses Problem habe ich auch ! Bei mir ist es ein "int counter" welcher im Sekundentakt nach "counter++" mit itoa() und lcd_puts() aus der lcd-lib vom Peter Fleury am Lcd dann ausgegeben wird. Dabei wird die Einerstelle immer am selben Digit angezeigt und die Zehner-, Hunderter-, Tausender- Stellen wandern nach rechts bis schliesslich rechts auch noch der Überlauf ein Minus erzeugt. Also alles gespiegelt ! Dann zählt die Anzeige wieder rückwärts und wandert nach links zurück. Dabei bleiben die Stellen rechts(auch das/die Minuszeichen), welche z.B beim Übergang von den Tausender auf die Hunderter-Stellen nicht mehr verändert werden, stehen. Klaus
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.