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
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.
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 :(
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.
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!
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
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.
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
@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
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
@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
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
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.