Forum: Mikrocontroller und Digitale Elektronik EEprom Schreib / Lese Problem ?


von Voyager9 (Gast)


Lesenswert?

Hallo,

Ich habe ein Problem mit dem schreiben bzw Lesen aus dem EEprom eines
AVR. Genauer gesagt ist es der 2313. Eigentlich funktioniert es
einwandfrei, der wert wird abgespeichert und auch wieder ausgelesen.
Auch wenn man die Versorgungsspannung weg macht und wieder einschaltet,
--es geht auch-- aber genau da ist der Haken, manchmal gehts, manchmal
ist aber der gespeicherte wert einfach weg und es steht ein viel
höherer drin. Ein / Aus schaltung erfolgt mit einem normalen miniatur
Kippschalter. Spannungsversorgung aus einem 12V Blei Akku, 5 V
Spannungsregler, Siebelko, auch ist ein 100nF Kondensator direkt an den
Versorgungsbeinchen unter der Platine direkt am sockel. Sogar eine 10µH
Spule ist in der Versorgungsleitung nach dem Spanungsregler. Was kann
das sein, dass der EEprom inhalt verschwindet und durch etwas anderes
ersetzt wird ? Hat jemand ein ähnliches problem schon gehabt und evtl.
eine Lösung ?

Zum Sinn und Zweck des ganzen, muss ich einen Abgespeicherten Wert aus
dem EEprom lesen, der später als höchsten wert für den PWM gilt. Die
Schaltung ist zum Einsatz im Modellbau für die Regelung der Glühkerze.
Stimmt der Wert nicht mehr, welches mein Problem ist und es steht ein
höherer wert drin, so ist das das ende der Glühkerze. Ich lasse den
Strom zwar langsam hoch fahren, aber dann stimmt der höchstwert nicht
mehr und die kerze geht über den Jordan, wenn man es nicht sieht.
Wäre für Hilfe echt dankbar. Ich kann auch gerne den quellcode mal mit
anhängen falls er benötigt wird..

Gruß erst mal, Andy

von crazy horse (Gast)


Lesenswert?

falls dein Wert auf Adresse 0 des EEPROMs steht, leg ihn woanders ab.
Adresse 0 sollte man gar nicht benutzen, ist bekannt für Probleme
dieser Art.

von Voyager9 (Gast)


Lesenswert?

Ja, das mit der Adresse 0 habe ich auch festgestellt, daher habe ich
verschiedene andere Adressen versucht, dezimal von 1 bis 10, Es
passiert zwar nicht mehr so oft auf anderen adressen, aber es passiert,
leider :(

von crazy horse (Gast)


Lesenswert?

ja, ist mir auch schon passiert.
Wenns wirklich wichtig ist, arbeite ich mit 3 gleichen Datensätzen, am
Programmstart, prüfen, ob die alle gleich sind, wenn nicht, wird der
fehlerhafte ersetzt.
Noch sicherer: externes I2C-EEPROM, damit hatte ich noch nie Probleme.
Ansonsten empfiehlt es sich, das Adressregister nicht auf benutzten
Zellen stehen zu lassen, sondern auf 0 zurücksetzen.
Auch sehr wirksam: ein Spannungsüberwachungs-IC zu benutzen.

von Johannes Raschke (Gast)


Lesenswert?

Hi!

Ich glaube, Crazy Horse hat's erkannt, Du brauchst einen Brown Out
Detector. Also einen Schaltkreis, der den AVR stoppt, wenn die Spannung
zu niedrig ist.
Es gibt auch Spannungsregler, die so einen Ausgang eingebaut haben!

Viel Erfolg!

von Voyager9 (Gast)


Lesenswert?

Hmm...
Mich wunderts nur, weil das ganze passiert ja lediglich wenn die
Spannungsversorgung Aus, und dann wieder Eingeschaltet wurde, so lange
der AVR in Betrieb bleibt, besteht dieses problem ja nicht. Es ist nur,
wenn nach einem einschaltvorgang das EEprom wieder ausgelesen wird.
Vielfach funktioniert, jedoch beim nächsten einschalten plötzlich liest
er etwas falsches aus der EEprom Adresse. Auch weitere Aus und
Einschaltvorgänge finden nicht mehr zum richtigen wert zurück, was mir
sagt, dass der Tatsächlich ursprüngliche Wert durch irgend einen
Störimpuls ( Einschaltknacken, oder gar durchs Ausschalten)
überschrieben wurde, so als wäre der AVR neu Programmiert. Gut, jetzt
übertrieben gesagt, weil das Programm ist ja noch da.... was ich meine,
nach nem neuen Flaschen haben die EEprom Speicherplätze ja auch alle
wieder verschiedene Werte, sind nicht mal genullt wenn man sie
ausliest. Das ist ja das merkwürdige, dass die Stellen überschrieben
werden, obwohl gar kein Programmcode dies veranlasst. Wenn die dinger
so empfindlich sind muss ich wohl aufpassen dass wenn ich eine Rauche,
mir nicht mein Programm nach der Zigarette umgeschrieben wurde und ich
anschliessend eine Rauchmeldersteuerung habe... :-)))
Nunja, Spass beiseite... wenn Du sagst, Du arbeitest mit 3 gleichen
Datensätzen.. hmm... woher weiss das Programm dann welches der richtige
Datensatz ist, wenn alle 3 plötzlich unterschiedlich sind ? Am besten
beschreibt man die ganzen 128 byte mit dem selben wert und prüft
anschliessend auf die meissten gleichen Datensätze... hmm.. das wäre ja
krass und ein zu grosser Umstand wegen einem einzigen Wert. Dann frage
ich mich wieder für was das EEprom da ist wenn es solche Probleme
macht. Das sagt mir wieder dass die AVR`s im Grunde nicht unbedingt
Industrietauglich sind, wenn man doch eine umständlichere
programmierung mit Aussenbeschaltung machen muss weil die interne
hardware kläglich versagt.
Hat es vielleicht eine Bewandniss, dass ich das EEprom direkt nach der
initialisierung auslese ? Ich meine das könnte ja immerhin noch in den
Einschaltimpuls fallen während auf die Speicherstelle zugegriffen wird.
Ich werde mal eine verzögerungsschleife bauen und das EEprom danach
erst auslesen.

Thanx erst mal für die Antworten

von crazy horse (Gast)


Lesenswert?

Das Problem entsteht beim Ausschalten, während der Saft so langsam
nachlässt, ist nicht mehr definiert, was der Proz. so treibt. Und dann
kann es eben leider auch zu einem undefinierten Schreibzugriff kommen.
-> Lösung: wie schon erwähnt, brown-out-Detektor, ist ja auch bei allen
neueren AVRs drin.
3 Datensätze: wenn alle 3 unterschiedlich sind, gibts keine
Restaurierungsmöglichkeit, ist mir aber noch nicht untergekommen.

von Johannes Raschke (Gast)


Lesenswert?

@Voyager9

Datenblatt Seite 39, einfach lesen. Der AVR kann nix dafür, wenn Du das
nicht tust.

SCNR

von Peter D. (peda)


Lesenswert?

Ja, das hatte ich den Atmel Leuten schon 1997 gesagt und gemailt:
"Mensch Leute, ehe ihr da nur ein halbes Reset einbaut, laßt es lieber
ganz weg, das gibt nur Ärger"

Aber die wollten halt erst den Ärger haben, ehe sie nun schließlich
doch eine Unterspannungserkennung in alle neuen mit eingebaut haben.

Willst Du also keinen externen Reset-IC einbauen, bleibt Dir eben nur
die Variante mit 3 Datensätzen oder Du mußt auf den ATTiny2313 warten
oder auf den ATTiny26 umstricken.


Peter

von Andreas (Gast)


Lesenswert?

@Johannes Raschke:

>Ich glaube, Crazy Horse hat's erkannt, Du brauchst einen Brown Out
>Detector. Also einen Schaltkreis, der den AVR stoppt, wenn die
Spannung
>zu niedrig ist.
>Es gibt auch Spannungsregler, die so einen Ausgang eingebaut haben!

Hättest Du mal ein Tip für solche Spannungsregler?

danke
Andreas

von Voyager9 (Gast)


Lesenswert?

Hallo,

So, ich habe nun am Anfang ein Delay von ca 2 Sekunden drin, womit ich
grad mal so spielerisch noch alle LED`s teste die angeschlossen sind
:-) Aber komischerweise ist das Problem jetzt erst mal weg. Ich hab
jetzt bestimmt 100 mal aus und eingeschaltet und bis jetzt stimmt der
wert immer noch. Hmm.. hat es vielleicht doch etwas (auch) damit zu
tun. Es ist zwar logisch unlogisch aber komischerweise geht es jetzt
erst mal. Ich werde aber doch noch einen Externen Brown out detector
einsetzen, zur Sicherheit, denn ich denke das Problem ist nicht ganz
aus der Welt. Sicher ist sicher.
Kennt irgend jemand eine Typenbezeichnung von so einem Teil ? Ich kenne
die Teile leider nicht und die von Conrad heute schauten auch nur doof
aus der wäsche. Selbst der Technische Service konnte mir nicht weiter
helfen. Also wäre ich für einen Typen dankbar wenn ihr mir einen oder
mehrere nennen könntet.

@Raschke
Glaub mir, ich frage hier wirklich sehr sehr wenig. Alles was ich weiss
hab ich mir selbst durch lesen beigebracht, ohne anderen mit Fragen
über Fragen auf die nerven zu gehen :) und ich finde es richtig toll
dass ihr alle so toll englisch könnt. Ich kanns nicht so gut und wenn
ich was hier frage, dann ganz bestimmt mit sicherheit weil ich was
nicht verstehe oder aus etwas nicht schlau werde.

Im Datenblatt steht auch, dass man den internen Brown out Detector mit
den Fuse Bits einschlaten kann. Leider hab ich echt keine Ahnung wie
das geht. Könnte mir da jemand weiterhelfen wie man das genau macht ?
Ich Flashe mit Pony Prog 2000 und ich denke die muss man über das
programm irgendwie setzen, oder liege ich da falsch ? Jedenfalls finde
ich nichts mit Fuse bits, sondern nur die security bits.

Wäre dankbar wenn mir da nochmal jemand auf die sprünge helfen könnte

Gruß, Andy

von Johannes Raschke (Gast)


Lesenswert?

@Andreas
Ich habe hier einen LM2959, "Low Dropout Regulator with Delayed
Reset". Bei Über - oder unterspannung schaltet der einen Extra -
Ausgang auf Low.
Den habe ich mal irgendwo ausgebaut, und jetzt wartet der darauf, daß
ich mal eine Schaltung mit eeprom - Benutzung baue :-)

@Andy
Erstmal schön, daß es jetzt funktioniert.
Du sagst, man könne einen internen Brown Out Detector per Fusebit
einschalten. Dazu habe ich auf Anhieb nichts gefunden; bist Du Dir
sicher, daß der 2313 gemeint ist?
Unter
http://www.avrfreaks.net/Tools/showtools.php?ToolID=65&PHPSESSID=4d1df75995164236d8d5d434724b0d6f
gibt es eine Appnote zu dem Thema. Dort werden zwei verschiedene
Transistorschaltungen vorgeschlagen oder ein extra IC. Beispiele sind:
Max809, Max811, Max821, DS1811, DS1813/18, V6301, V6340.
Eine Suche hier im Forum brachte under anderem folgendes:
"Bei Conrad gibt's den 7705 für 1,53 Euro."

Viele Grüße

Johannes

von Voyager9 (Gast)


Lesenswert?

Hallo,

nein, sicher bin ich nicht dass der 2313 gemeint ist, habe mir heute
nur in der mittagspause im Auto meinen alten Ausdruck vom 4433 zu
gemüte geführt, dachte das wäre bei allen controllern gleich, daher
meinte ich das ginge auch mit dem 2313, aber hab mich wohl geirrt, denn
in dem datenblatt steht nichts dergleichen. Bei dem 4433 steht das aber
jedenfalls drin, ausser mein englisch hat mich mal wieder im Stich
gelassen :) Dennoch bin ich nach wie vor daran interessiert wie man (
bei dem 4433 ) diesen mit den fuse bits einschaltet, da ich mit diesem
typ auch arbeite.

Holla.... den 7705 habe ich mir heute geholt in der Hoffnung dass es
einer ist. Im Katalog steht leider nur Spannungsüberwachung und keine
weiteren angaben. Bei einem Telefonat mit dem Conrad service sagte man
mir, dass dies wohl eher ein power on resetbaustein wäre.... andere
wären ihnen nicht bekannt... also was sagt uns das.. der conrad service
ist fürn A.... kostet nur unnötig geld und man ist genau so schlau wie
vorher :-(((((( Habe ihn mir also auf verdacht mal mitgenommen, jetzt
muss ich mir nur noch das datenblatt runter ziehen ( hatte ja heute
mittag kein internet zum nachschauen )

Tausend dank erst mal, Gruß, Andy

von Andreas (Gast)


Lesenswert?

@Johannes
Danke für den Tip. Bin inzwischen noch ein bißchen suchen gegangen und
habe den MAX5023 gefunden. Ist ein Spannungsregler mit Reset Circuit
und Watchdog zusätzlich. AllInclusive. Damit sollte eigentlich nicht
mehr allzuviel schief gehen können.

von Andreas (Gast)


Lesenswert?

Hast Du schon mal was mit einem Eeprom mit write protection probiert,
die kann man dann trotzdem wieder beschreiben indem vorher eine
"Schlüssel"Adresse hex55AA oder so (siehe Datenblatt) vorangestellt
wird.

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
Noch kein Account? Hier anmelden.