Hallo Leute! Ich arbeite mich gerade in das AVR GCC Tutorial ein und komme beim Abschnitt 18.3 EEPROM einfach nicht klar. Es will mir nicht gelingen, Daten aus dem EEPROM richtig zu lesen. Ich benutze WinAVR-20060125. Ich habe 4 Variable im EEPROM und 4 globale Variable im SRAM definiert //Code im Abschnitt der Deklaration uint8_t eeT1 EEMEM = 151; uint16_t eeT2 EEMEM = 10838; uint16_t eeT3 EEMEM = 330; uint16_t eeT4 EEMEM = 1260; volatile uint8_t T1; volatile uint16_t T2, T3, T4; Die Variablen in SRAM sollen durch die im EEPROM geladen werden void eepromread(void){ T1 = eeprom_read_byte(&eeT1); T1 = eeprom_read_word(&eeT2); T3 = eeprom_read_word(&eeT3); T4 = eeprom_read_word(&eeT4); } Leider werden die SRAM-Variablen beim Programmstart nur mit Datenmüll gefüllt. Auch das Schreiben in das EEPROM per Programm void eepromwrite(void){ eeprom_write_byte(&eeT1, T1); eeprom_write_word(&eeT2, T2); eeprom_write_word(&eeT3, T3); eeprom_write_word(&eeT4, T4); } mit anschließenden Auslesen funktioniert nur teilweise. Wenn ich T1 bis T4 per Programm setze und mit vorgenannter SUB eepromwrite() beschreibe und dann wieder lese, stimmt nur der Inhalt von T3 und T4. T1 und T2 enthalten Müll. Ich habe zum Test ein kleines Programm geschrieben und beigefügt. Damit kann man T1 bis T4 über den UART setzen (z. B. mit Eingabe T1=123), mit DA (Daten Ausgabe) auslesen, mit EW (Eeprom Write) beschreiben und mit ER (Eeprom Read) zurücklesen. Was habe ich nur falsch gemacht? Vielen Dank schon jetzt für die Hilfe. Martin
In dem Code oben ist ein Schreibfehler:
1 | T1 = eeprom_read_byte(&eeT1); |
2 | T1 = eeprom_read_word(&eeT2);// 2. Mal T1 |
3 | T3 = eeprom_read_word(&eeT3); |
ansonsten: - poste compilierbaren Code - hast du die Probleme im Simulatioroder "in echt"? - hast du das .eep-File geflasht ? (bzw. im Sim. geladen) (- Anhänge gehen hier im Forum verloren, wenn man "Vorschau" klickt) hth. Jörg
Hallo Jörg, vielen Dank für Deine schnelle Antwort! Die Probleme sind mit Deiner Hilfe gelöst! Problem 1: EEPROM lesen bei Neustart funktioniert nicht. Das EEPROM war offensichtlich nicht beschrieben. Ich lade das Programm mit Pony Prog und bin davon ausgegangen, daß bei "OPEN DEVICE FILE" und "WRITE ALL" auch wirklich alles geöffnet und geschrieben wird. Jetzt habe ich gelernt, daß das .eep File separat geöffnet werden muß. Problem 2: Beschreiben des EEPROM im Programm mit anschließendem lesen funktioniert nur bei T3 und T4 Das lag am Schreibfehler. Hier wurde uint8_t T1 mit uint16_t T2 überschrieben, was natürlich nicht funktionieren kann. Nochmals meinen Dank! Gruß Martin
gern geschehen ;) den Fehler mit dem .eep-File macht man mal, abe rauch nur ein Mal :) gruß Jörg
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.