Gast
#768883
Hallo Forum, ich möchte bei einem Ausfall der Versorgungsspannung den Zustand von PORTB im EEPROM abspeichern. Ich habe hierfür den internen Analog-Komparator verwendet. Am ADC1 ist im Moment ein Poti angschlossen, mit dem ich das Absinken der Spannung simuliere. Später hängt dann die 24V Versorgung über einem Spannungsteiler daran. Fällt die Spannung unter 1,1V, wird die analog-comp ISR aufgerufen und der Zustand von PORTB wird mit der Funktion eeprom_write_byte der AVRlibc abgespeichert. Ich habe das EEPROM mehrfach ausgelesen und es funktionier einwandfrei. Soweit so gut. Bei einem Power-up wird geprüft, ob im EEPROM ein Wert abgespeichert wurde. Wenn ja, wird der Wert an PORTB gegeben und das Byte im EEPROM wieder "rückgesetzt" (s. BOOKMARK 1 im Quelltext). Im Simulator funktioniert alles bestens, in der Realität leider nicht. Der Wert 0 wird nicht ins EEPROM geschrieben. Ich hab dann den Write-Befehl auskommentiert und die komplette if-Abfrage weiter unten ( nach sei() ) reinkopiert (s. BOOKMARK 2). Jetzt wird der Wert 0 geschrieben, allerdings funktioniert hier der Read-Befehl nicht - also habe ich ihn wieder auskommentiert. Sprich: so wie das Programm im Moment aussieht, macht es genau das was ich will. Nur, warum funktioniert einmal eeprom_write_byte (BOOKMARK 1) und einmal eeprom_read_byte (BOOKMARK 2) nicht? Bin vollkommen verwirrt und hoffe auf Antworten. Leider habe ich über die Suchfunktion nichts in Erfahrung bringen können. Mit den neusten Versionen von AVRStudio und WINavr haut es übrigens auch nicht hin. Das ganze läuft auf einem ATmega168. Ich benutze AVRStudio 4.12 SP4 und WinAVR 20060421.