Hallo Zusammen! Habe ein dickes Problem bei ATmega168 20AU ab bestimmten Datecode mit dem EEPROM. Bis Datecode 0810 lief alles perfekt! Alles was nun neuer ist, hat folgendes phänomen: bei 8 MHz internen RC-Oszillator werden sporadisch die Werte selbstständig geändert, nach dem 3ten bis 5ten mal neuen einschalten der Hardware. Nach Informationen des Verkäufers der ATmega168 soll es Probleme ab bzw. bis bestimmte Datecodes geben, die mit folgenden Maßnahmen korrigiert werden können: Adresse 0 vom EEPROM nicht benutzten, RC-Oszillator kalibrieren. Beides habe ich getan, ohne Erfolg. Hat jemand auch diese Erfahrung machen müssen und eine Lösung gefunden? Seltsam ist nur, dass bei 1 MHz internen RC-Oszillator das Problem nicht (bisher noch nicht) auftritt. Ich benötige aber leider 8 MHz! Es muss doch möglich sein, das EEPROM-Problem zu umgehen! Kurze Zusammenfassung / Ausschnitte, Ich arbeite mit AVRStudio4 und WinAVR: unter Memory Setting habe ich folgenden Eintrag: Memory Type Eeprom; Name .eeprom; Adresse 0x1 (0x01) Damit wird erst ab Adresse 1 beschreiben. Habe es auch im MAP-File nachvollziehen können #include <inttypes.h> #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/eeprom.h> #include <stdio.h> #define BAUD_RATE 38400 #define F_CPU 8000000UL // RC-Oscillator with 8.000 Mhz OSCCAL = 0x91; // RC-Oszillator kalibrieren (Wert über Advanced / oscillator calibration byte ausgelesen!) Variable: uint8_t EEMEM PNEUee = 1; Speichern ins EEPROM: eeprom_write_byte(&PNEUee, 100); //Wert wird nicht bei jedem Programmstart abgespeichert, da ich per if das nur einmal am Anfang mache! auslesen: PNEU = eeprom_read_byte(&PNEUee); // wieder auslesen nach Power an Ausgabe des Wertes über UART printf("\nWert: %d\n\n",PNEU); // Wert sollte immer 100 sein! Wird aber nach einige male Power an plötlich zB. 38, -201 oder sonstiges! Ich habe insgesamt 15 EEPROM-Werte. Dieses Probleme tritt bei allen Werten sporadisch und nicht gleichmäßig auf! Die meisten Werte werden nur einmal abgeschrieben und dann nur noch gelesen und ausgegeben. Bin für jeden Tipp dankbar!
Da Du die EEPROM-Werte zu Programmanfang (und sonst nicht) liest/schreibst, könntest Du vielleicht das Problem umgehen, indem Du nur dazu die effektive Taktfrequenz mittels CLKPR auf 1MHz heruntersetzt (und dann wieder hoch).
- Hardware OK? (Saubere 5V, genug Abblock-Kerkos, diese nahe am IC?) - Brown-Out Detektor aktiv? Wenn das passt, und du ein byte EEPRom übrig hast: Als Work-around das erste Byte im Eeprom als "Müll-Byte" benutzen. Nach jedem Write/Read auf den "echten" Datenzellen einfach nochmal ein Read auf Adresse 0 machen, Ergebnis verwerfen. => Eeprom-Addresszeiger zeigt auf 0, wenn wieder was kaputt geht ist es höchstwarscheinlich diese Zelle => egal.
Wie sieht die Hardware aus, bzgl. Schaltung, Layout?
Auch wenn es schon genannt wurde, die Stichworte "EEPROM, Datenverlust beim Ausschalten" führen IMMER zu der Frage: Brown-Out aktiviert? Oliver
Tommes schrieb: > Seltsam ist nur, dass bei 1 MHz internen RC-Oszillator das > Problem nicht (bisher noch nicht) auftritt. Ich benötige aber leider 8 > MHz! Setz doch einfach die Fuse auf 1MHz und dann schalte im Programm auf 8MHz um. Und für die EEPROM-Sachen schaltest Du solange auf 1MHz. Ich weiß nicht, obs was bringt, Du kannst nach jeder EEPROM-Sache noch ein Dummy-Read von Adresse 0x00 ranhängen. Dann sollte nur Adresse 0x00 zerstört werden bei einem ungewollten Schreiben. Das BOD-Reset ist natürlich eingeschaltet? Peter
zu Autor: Drachenbändiger auch während des Prozesses verändert/ins EEPROM geschrieben werden! Hauptproblem ist doch der Verlust, wenn ich mehrmals nur ein und ausschalte, ohne etwas zu ändern! zu Autor: Εrnst B und Autor: A. K. Hardware sollte OK. sein, alle C,s und Spannung (5V Schaltnetzteil) laut Mindestanforderung vorhanden und mehr. Layout zwei-lagig mit GND Stern unterm Prozessor. Sie funktioniert auch korrekt mit Datecode 0810. NUR mit neuerem Herstellerdatum gibt es diese Probleme! - Brown-Out Detektor ist nicht aktiv, werde es mal damit probieren!
Tommes schrieb:
> - Brown-Out Detektor ist nicht aktiv, werde es mal damit probieren!
Dann hast Du bisher Lotterie gespielt und nun die Niete gezogen.
Steht aber auch ausdrücklich im Datenblatt.
Peter
376 Seiten in Englisch lesen sich nicht so schnell durch! Aber erste Tests sehen viel versprechend aus. Und in der Lotterie hatte ich ja auch noch kein Glück. Mir wurde geholfen. Danke an alle! Jetzt ist nur noch das Problem, das bei einer Platine das Brown-Out nicht abgespeichert wird. Steht immer noch auf disable. Prozessor bereits defekt?
Halt, auch erledigt. Hatte bei dieser Platine mal das Lockbit getestet und dann vergessen das Programm neu zu brennen! Also alles erledigt! Danke für die schnelle Hilfe. Tolles Forum!
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.