mikrocontroller.net

Forum: Compiler & IDEs EEPROM Problem bei ATmega168 ab Datecode > 0810


Autor: Tommes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Drachenbändiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht die Hardware aus, bzgl. Schaltung, Layout?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn es schon genannt wurde, die Stichworte "EEPROM, Datenverlust 
beim Ausschalten" führen IMMER zu der Frage:

Brown-Out aktiviert?

Oliver

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tommes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tommes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Tommes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.