Hi zusammen, versuche momentan mit nem ATMEGA16 eine Variable ins EEPROM zu speichern. Dazu mein folgender, banaler Testcode: #include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/eeprom.h> char test; int main(void) { DDRB = 0xFF; eeprom_write_byte((uint8_t *)0x01, 0x0F); test = eeprom_read_byte((uint8_t *)0x01); PORTB = test; } Wenn beide Zeilen einkommentiert sind, wird am PORTB die erhoffte 0x0F ausgegeben. Nun würde ich erwarten, dass wenn ich Zeile 1, also write_byte... auskommentiere, dass dann die zuvor gespeicherte Information ebenfalls wieder am Port ausgegeben wird. Es bleiben allerdings alle LEDS aus :( Was mache ich falsch?
Es gibt eine Fuse, die verhindert, dass das EEPROM gelöscht wird, wenn das Device gelöscht wird. Ich vermute, dass die falsch steht. Dadurch wird beim neuprogrammieren des ATMEGA16 auch dessen EEPROM gelöscht.
Ausserdem sollte man auf das Ende des Schreibzyklusses warten eeprom_write_byte((uint8_t *)0x01, 0x0F); eeprom_busy_wait();
Hey super, danke ! Es gibrt tatsächlich eine solche Fuse. --> EESAVE Ist das Bit gesetzt, wird bei jedem ChipErase das EEPROM mit gelöscht. Steht es auf 0, bleibt das EEPROM unberührt :) --> Danke für die schnelle Hilfe
holger wrote:
> Ausserdem sollte man auf das Ende des Schreibzyklusses warten
Macht die Lib doch schon.
Zitat:
All of the read/write functions first make sure the EEPROM is ready to
be accessed
Zitatende
Ich denke, dass es ohne eeprom_busy_wait() geht.
Daniel wrote: > Hey super, danke ! > Es gibrt tatsächlich eine solche Fuse. > > --> EESAVE Was glaubst du, dass hier Märchenstunde ist? ;-)
>> Ausserdem sollte man auf das Ende des Schreibzyklusses warten >Macht die Lib doch schon. Hab ich auch gerade gelesen. Man lernt nie aus ;) Sonst würde das mit den eeprom_block_write() ja auch nicht funktionieren.
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.