Hi, Gibts Erkennungsmechanismen, wenn ein Mikrokontroller unordnungsgemäßig abgeschaltet (z.B. bei der Uebertragung von Daten) wird? MfG Campus
@Campus: Positiv! Suche nach "Brown out detection"! Habe gerade mal nachgeschaut, was das eigentlich auf deutsch heißt. In einem Onlinewörterbuch steht da "Büschelentladung" als technische Übersetzung ?!? Auf Mikrocontrollern wird das oft in Zusammenhabg mit Watchdog und Power On Reset erwähnt.
"Brown Out Detection" erkennt, wenn die Versorgungsspannung unter einem Minimalwert liegt. Campus, Du beschreibst nicht ganz genau, welchen Zustand Du erkennen möchtest. Vielleicht reicht ja schon der eingebaute Watchdog. Eine Alternative wäre ein Pufferkundensator für die Versorgungsspannung nach einer Diode bei regelmäßiger Messung der Eingangsspannung - dann kann der Controller vor dem Abschalten noch "bescheid sagen". Da ein uC aus vielerlei Gründen seine Tätigkeit einstellen kann, würde ich für sehr kritische Anwendungen eine Art "Toter Mann - Schaltung" vorschlagen. Alle paar ms klappert der Controller mit einem Ausgang und setzt damit einen externen Timer (z.B. NE555) zurück. Bleibt das Signal aus, löst der Timer nen Alarm aus.
Die Idee mit dem Watchdog, sofern vorhanden, ist schon ganz gut. Wenn der kommt und der µC über RESET springt, kann man dort einen Ausgang aktivieren , an dem eine LED hängt, die dann leuchtet. Somit weiß man, daß der Watchdog ausgelöst hat. Den Ausgang setzt man nach einiger Zeit dann wieder zurück, um einen erneuten Reset auswerten zu können. Dieses Schaltsignal kann dann auch von weiteren "Alarmschaltungen" ausgewertet werden.
Das ist die Beschreibung über den Watchdog meines uCs: The purpose of the Watchdog is to reset the microcontroller within a reasonable amount of time if it enters an erroneous state. Ich weiß immer noch nicht, wie ich den Watchdog in meinem Fall einsetzen soll. Wenn der Strom fällt aus, gehen alle Informationen in Register und Speicher verloren. Wie bemerkt der uC beim nächten Start, daß die Versorgung weg war? Gruss Campus
Hi @Campus, der Watchdog bewahrt dich viel mehr vor Software-Fehlern, die in eine Endlosscheife führen: Bleibt das Resetten des WDTs zu lange aus, so löst dieser selbstständig einen Reset aus und das Programm beginnt von vorne. Schau mal genau im Datenblatt nach, für meine MSP430 ist dort beschrieben, was man wie auswerten kann nach einem Reset. Wie du aber nach einem Reset feststellen könntest, ob eine Datenübertragung im Gange war, kann ich dir so leider auch nicht sagen. Gruss Tom
Was willst Du denn genau erkennen? Soll der Sender Deiner Daten erkennen, daß der Empfänger (-Mikrocontroller) kein Strom hat, oder soll der Empfänger merken, daß er wieder eingeschaltet wurde und vorher offensichtlich während eines Datenempfangs ausgeschaltet wurde? Du musst schon genau sagen, bzw. die im Klaren darüber sein, was Du exakt feststellen willst. Dann kann man Dir auch weiter helfen.
Mein uC soll Daten von einem FRAM ablesen und im internen Flash speichern. Da das System jederzeit abgeschaltet werden kann, entsteht dieses Problem. Wenn ein Abschalten bei der Datenübertragung geschen würde, müßte das System an diesen Unfall erinnern! Gruss Campus
Na, dann setze doch im internen Flash ein Flag vor dem Auslesen des FRAM und lösche es wieder, wenn der Vorgang beendet ist. Wenn beim nächsten Einschalten das Flag gesetzt ist, weisst du, dass der Vorgang beim letzten mal nicht korrekt beendet wurde.
Eben. Das kannst Du auch feiner machen, also pro Block oder so im EEPROM speichern, wieviel Du schon ausgelesen hast. Eben ein "Mini-Journaling-Dateisystem" implementieren. Allerdings ist mir noch nicht ganz klar, warum der Mikrocontroller nicht einfach von vorne beginnt, das FRAM auszulesen, wenn er eingeschaltet wird... Irgendwie ziemlich wirr, Dein Problem...
Auch wenn die Klatstellung sehr, sehr spät kommt: Was immer eine Büschelentladung sein mag.... mit "Brown-Out" hat es ganz sicher nichts zu tun. Ein Brown-Out bezieht sich auf einen Spannungseinbruch oder eine Unterspannung. Im Vergleich zum Black-Out geht die Spannung aber nicht ganz weg.
Ich würde lieber alles im FRAM machen. Vielleicht reicht schon ein Flag aus oder du speicherst immer en einer definierten Stelle die Adresse, aus der gelesen wurde. EEPROm würde ich nicht unbedingt nehmen um so viele Daten zu speichern (1 Lesezyklus = 1 EEPROM Schreibzyklus), da dieser nur begrenzt wiederbeschreibbar ist. In so einem Fall sind eingige Tausend Speichervorgäng schnell erreicht.
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.