Atmel EEProm fehlerhaft beschrieben

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 30 11 2025  09:50:13      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Atmel EEProm fehlerhaft beschrieben

    







BID = 103224

RaPe

Gelegenheitsposter



Beiträge: 56
Wohnort: Radebeul
 

  


Vor einer Weile, hab ich ein Programm geschrieben, um einen Motor zu steuern. Dabei war es auch notwendig, das Daten in den internen EEPROM geschrieben werden musstem. Wärend der Entwicklung der Schaltung verwendete ich einen relbaren Trafo und es gab nie Probleme! Bei der fertigen Schaltung wird jetzt aber ein Schaltnetzteil verwendet. Beim Ausschalten der Betriebspannung fällt sie nur langsam ab und zm Schluss gibt es nochmal einen kurzen Spannungsanstieg.
Nach langer Suche hab ich herausgefunden, das der µP kurz vorm ausgehen durch die niedrige Spannung (oder so) unkontrolliert durchs Prog. rennt. Dadurch hat er auch fast immer den Schreibbefehl vom EEPROM gefunden und ausgeführt. Dabei hat er wichtige Daten mit Müll (meist 0) überschrieben!
Ich hatte irgendwann die Idee, SLEEP-befehle dort einzufügen. Vor jedem Schreibzyklus, wird der deaktiviert und danach gleich wieder aktiviert.
Nicht lachen, auch wenns lustig aussieht!!!

EEPROM:
SBIS EECR,0
SBIC EECR,1 ;Auf EEProm warten
RJMP EEPROM
SLEEP
OUT EEARL,Temp1 ;Adresse angeben
OUT EEDR,Temp2 ;Daten
SLEEP
SBI EECR,2 ;MasterWriteEnable bit setzen
SLEEP
SBI EECR,1 ;WriteEnable bit setzen --> schreiben
SLEEP
LDI Temp3,0b00110000 ;EEPROM schützen
OUT MCUCR,Temp3
RET

Es funktionierte auch soweit. Ich konnte damit die Fehlerwarscheinlichkeit auf etwa 5% senken!!!

Jetzt zu meiner Frage:
Hat schon mal jemand anders solche Probleme gehabt und hat jemand noch andere Ideen, um Sicherzustellen das kein unkontrolliertes Schreiben möglich ist! Am meisten interessieren mich Softwaremäßige Vorschläge da ich die Hardware nur sehr schlecht änderen kann aber auch über sie würd ich mich freun.
Es handelt sich um einen AT90S8515. Wird mit 8MHz betrieben. Interrupte werden im Prog. nicht verwendet.

BID = 103232

Benedikt

Inventar

Beiträge: 6241

 

  

Dieses Verhalten ist normal, stehat auch im Datenblatt. Bei Atmel gibt es auch einige Application Notes zu dem Thema.
Softwaremäßig lässt sich wenig machen, außer direkt vor jedem Schreibbefehl irgendeine Überprüfung die nur dann weiterkommt, wenn das Schreiben gewollt ist.
Ansonsten ein TL7705 an den Reset Pin hängen...

BID = 103257

Magni

Gelegenheitsposter



Beiträge: 91
Wohnort: Edewecht
ICQ Status  

Oder einen Elko an die Versorgung des µC ranlöten, sodass der µC erst Strom bekommt wenn sich der Elko aufgeladen hat. Das würde den Vorteil haben, dass die Spannungsspitze zum Schluss verschwinden würde.

gr
Adrian

BID = 103264

Benedikt

Inventar

Beiträge: 6241


Zitat :
Magni hat am 18 Sep 2004 15:53 geschrieben :

Oder einen Elko an die Versorgung des µC ranlöten, sodass der µC erst Strom bekommt wenn sich der Elko aufgeladen hat. Das würde den Vorteil haben, dass die Spannungsspitze zum Schluss verschwinden würde.

gr
Adrian


Das bringt nichts, denn das Problem tritt beim Abschalten auf. Je langsam die Spannung sinkt, desto größer die Gefahr.

BID = 103280

RaPe

Gelegenheitsposter



Beiträge: 56
Wohnort: Radebeul


Zitat :
Benedikt hat am 18 Sep 2004 14:51 geschrieben :

Dieses Verhalten ist normal, stehat auch im Datenblatt. Bei Atmel gibt es auch einige Application Notes zu dem Thema.
Softwaremäßig lässt sich wenig machen, außer direkt vor jedem Schreibbefehl irgendeine Überprüfung die nur dann weiterkommt, wenn das Schreiben gewollt ist.
Ansonsten ein TL7705 an den Reset Pin hängen...


Dann mach mal bitte einen Vorschlag! Ich wüsste nicht was, da er sowieso quer durchs Programm rennt, ist dem irgendeine Überprüfung (scheiß) egal und der wird die einfach übergehn!!!

BID = 103284

Benedikt

Inventar

Beiträge: 6241


Zitat :
RaPe hat am 18 Sep 2004 16:24 geschrieben :

Dann mach mal bitte einen Vorschlag!


Hab ich doch !


Zitat :
Benedikt hat am 18 Sep 2004 14:51 geschrieben :

Bei Atmel gibt es auch einige Application Notes zu dem Thema.
Softwaremäßig lässt sich wenig machen, außer direkt vor jedem Schreibbefehl irgendeine Überprüfung die nur dann weiterkommt, wenn das Schreiben gewollt ist.
Ansonsten ein TL7705 an den Reset Pin hängen...


BID = 103287

RaPe

Gelegenheitsposter



Beiträge: 56
Wohnort: Radebeul

Ich meine damit, ob du eine softwaremäßige Überprüfung mir vorschlagen kannst (aus dem Ärmal zaubern), die Zuverlässig genug ist, um die Fehlerquote zu senken.

Sind die Application Notes direkt bei Atmel zu finden, oder gibt's da eine spezielle Adresse?

BID = 103292

Benedikt

Inventar

Beiträge: 6241

Ich würde den TL7705 nehmen, ist die einzige wirklich gute Lösung.
Du könntest eine Variable mit einem Testmuster (sowas wie 0xAA, was 10101010 entspricht) vergleichen. Vor dem Schreiben rufst du ein Unterprogramm auf, dass 0xAA in die Variable schreibt, ansonsten beschreibst du überall im restlichen Programm die Variable mit anderen Werten.
Die Warscheinlichkeit, dass erst das Unterprogramm mit 0xAA aufgerufen wird, und direkt danach das Schreibprogramm ist ziemlich unwarscheinlich.
Bist du dir sicher, dass mit deinen Routinen das EEPROM neu beschrieben wird ? Viel warscheinlicher ist, dass der Controller Mist baut und so versehentlich das EEPROM beschreibt.
Machs nicht so kompliziert, bau ein TL7705 ein...

BID = 103399

RaPe

Gelegenheitsposter



Beiträge: 56
Wohnort: Radebeul


Zitat :
Benedikt hat am 18 Sep 2004 16:54 geschrieben :

Ich würde den TL7705 nehmen, ist die einzige wirklich gute Lösung.
Du könntest eine Variable mit einem Testmuster (sowas wie 0xAA, was 10101010 entspricht) vergleichen. Vor dem Schreiben rufst du ein Unterprogramm auf, dass 0xAA in die Variable schreibt, ansonsten beschreibst du überall im restlichen Programm die Variable mit anderen Werten.
Die Warscheinlichkeit, dass erst das Unterprogramm mit 0xAA aufgerufen wird, und direkt danach das Schreibprogramm ist ziemlich unwarscheinlich.
Bist du dir sicher, dass mit deinen Routinen das EEPROM neu beschrieben wird ? Viel warscheinlicher ist, dass der Controller Mist baut und so versehentlich das EEPROM beschreibt.
Machs nicht so kompliziert, bau ein TL7705 ein...


Bin ich mir zu 99,9999999999999% sicher. In der Schaltung befinden sich 2 µC. Beide sind AT90S8515 und ähnlich vom Programm aufgebaut. Weiterhin holen beide Daten aus dem EEPROM. Aber nur der, der den Schreibbefehl im Programm hat, macht Mist. Beim anderen ist noch nie ein Fehler aufgetreten. Die µC hab ich auch untereinander schon gewechselt und sie hängen auch von der Spannungsversorgung direkt zusammen uund nutzen auch den gleichen Quarz....

Ich denke (auch wenn man das den Pferden überlassen sollte, die ham ja nen größeren Kopf) auch mit so einem Vergleich, wird das nicht zu 100% sicher sein, weil der den Vergleich bestimmt auch mal überrennen wird. Aber versuchen kann man es mal...

BID = 103740

ERDI-Soft

Stammposter



Beiträge: 200
Wohnort: Offenburg
Zur Homepage von ERDI-Soft ICQ Status  

Bau doch am Programmstart ein Delay ein, das länger geht, als der Puls lang sein kann. Dadurch hast du zwar ne elend lange Verzögerung des Programmstartes, aber er springt dir nicht im Programm rum.

_________________
Wie immer gilt: Erst googeln, dann fragen!

(Für ICQ bitte erst Anfrage per PM, da alles andere nicht angenommen wird.)

BID = 103746

Jornbyte

Moderator



Beiträge: 7320

Das Problem beim ausschalten ist bekannt. Der EEProm kommt ins "Schwimmen". Dein NT ist etwas überdimensioniert. Da haste verschiedene Möglichkeiten.
1. ein kleineres NT verwenden (Leistung)
2. mit einem Relais den µC von der Spannung trennen (ist nicht so gut, Kontaktprellen)
3. einen Lastwiderstand einbauen (ist nicht so gut, Wärme)
4. mit einen Komparator die Spannung (< 4,8 Volt) für den µC abschalten (beste möglichkeit)

_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 16 Beiträge im Durchschnitt pro Tag       heute wurden bisher 2 Beiträge verfasst
© x sparkkelsputz        Besucher : 187024012   Heute : 14648    Gestern : 62555    Online : 289        30.11.2025    9:50
20 Besucher in den letzten 60 Sekunden        alle 3.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0423901081085