Hallo, folgendes Problem: Die Betriebsspannung für den AVR wird mittels eines Generators erzeugt, leichgerichtet, geregelt ... Wenn der Generator mit Nenndrehzahl läuft ist alles i.O. Problematisch ist der Anlauf des Generators oder wenn seine Drehzahl abgefallen ist und wieder langsam ansteigt. D.h. wenn die Betriebsspannung für den AVR langsam ansteigt. Der AVR 'hängt' dann. Watchdog, Broun Out, ResetIC nützen nichts. Ich kann ihn dann zwar 'von Hand' resetten. Aber beim nächsen Spannungseinbruch das Gleiche. Gibt es eine einfache Lösung? PS: Wenn die Spannung zu niedrig ist braucht der AVR natürlich nicht zu laufen. Aber er soll zuverlässig anlaufen, wenn die 5V anliegen.
Also eigentlich is ja genau dafür die BrownOut-Detection da, oder? Ich würde also mal schauen wie die konfiguriert ist, also welche Schwellspannungen und ggf. nachbessern. Ansonsten Hardware-BrownOut manuel und nach eigenen Bedürfnissen nachrüsten. Alternativ könntest du auch mittels Batterie oder evtl sogar dickem C diese Spannungseinbrücke überbrücken. Zum Einschalten müsstest du halt ne Schaltung einbauen, welche erstz ab einer gewissen Spannung deinen AVR versorgt. Also was genau willst du?
Mit Brown-Out-Detector sollte es funktionieren, sicher, daß du alles richtig gemacht hast? Hast du evtl. zusätzlich ein EMV-Problem durch den Generator?
Frank wrote: > Der AVR 'hängt' dann. Watchdog, Broun Out, ResetIC nützen nichts. Wie stellst Du denn fest, daß er hängt? Das Brownout ist eigentlich genau dazu da, den MC erst aus dem Reset zu lassen, wenn VCC einen sicheren Wert erreicht hat. Was fürn AVR isn das überhaupt? Manche AVRs haben ne extra Fuse fürs Brownout einschalten. Welche Taktquelle und Resetzeit ist gewählt? Peter
Hallo, dier ersten Antworten kommen ja schnell. Aber es sind auch alles 'Schnellschüsse'. Das die Brounout genau für meine Fall da ist, dachte ich bisher auch. Und zusätzlich der Reset IC. Aber Fehlanzeige. Das er hängt, merke ich ganz einfach: Im Programm werden einige Werte über die serielle Schnittstelle ausgegeben. Das funkioniert beim 'hängen' nicht. Außerdem ist ein LCD-Display angeschlossen. Das funkioniert beim 'hängen' nicht. Und die eigentliche Funktion des Ganzen funkioniert beim 'hängen' nicht. Boun out ist definitiv an. Ob hoher oder niedriger Pegel ist egal. (AVR-Studio) Langsamstes Starten ist auch an (64k Zyklen) Mit emv Problem ist wohl auch nichts. Ich kann das Problem auch mit einem regelbarem Labornetzteil provozieren: Wenn ich die Spannung schnell hochregle funkioniert alles. Wenn ich die Spannung in einer Zeitspanne von ca. 5sek. hochregle hängt der AVR manchmal. ResetIC funkioniert auch. Unterhalb 4,5V low. Über 4,5V high. Board ist ein Olimex-MT-128 ATMEGA128. (www.olimex.com)
> Wenn ich die Spannung in einer Zeitspanne von ca. 5sek. hochregle > hängt der AVR manchmal. Auch, wenn du "nur" ein Lauflicht laufen lässt? Oder "nur" Zeichen über die serielle Schnittstelle versendest? Kann es sein, dass deine Software Probleme mit dem langsamen Hochlaufen hat? Z.B. weil einige Eingänge noch nicht richtig da sind, oder du auf irgendwas wartest, was schon lange passiert ist?
Hallo Franz, wenn am AVR alles richtig gesetzt ist, dürfte sowas nicht sein. Aber du kannst mal einen externen WATCHDOG/BROWNOUT testen, z.B. den 1232 http://www.linear.com/pc/productDetail.jsp?navId=H0,C1,C1003,C1144,C1043,C1771,P1331 gruß hans
Seltsam ist, dass er sich "von Hand" resetten lässt, aber ein externer Reset-IC nicht hilft. Dert macht eigentlich auch nichts anderes. Als Workaround (weil die anderen Dinge eigentlich alle auch funktionieren sollten) könnte notfalls eine Spannungsüberwachung VOR dem Regler (Dropout + Reserve berücksichtigen) dienen.
@Lothar Die DO LOOP Schleife wartet auf nichts. Sie läuft ohne Bedingungen immer durch. Der Eingang, es gibt nur einen, meldet sich per Interupt. Wenn er sich nicht meldet, wird eben immer wieder das Selbe ausgegeben (auf seriell und LCD) @hans gute Idee. Ich denke, so etwas brauche ich. Ich habe nämlich gemerkt, wenn ich den Reset 1 od. 2x per Hand auslöse, läuft die Sache wieder. Eine Routine, die den LTC1232 alle Sekunde anstößt kann ich ja ohne weiteres in die Do LOOP Schleife integrieren. Muß mal schauen, wo ich den LTC1232 kaufen kann.
> Im Programm werden einige Werte über die serielle Schnittstelle > ausgegeben. Das funkioniert beim 'hängen' nicht. Ist am UART ein RS-232-Pegelwandler (MAX232 o.ä.) angeschlossen? Ist dieser brownout-fest? Oder springt er vielleicht nicht an, so dass die vom AVR gesendeten Daten gar nicht nach außen gelangen? > Außerdem ist ein LCD-Display angeschlossen. Das funkioniert beim > 'hängen' nicht. Ist das LCD brownout-fest? Vielleicht springt auch dieses nicht an, so dass es nichts anzeigen kann. Macht die AVR-Software eine Busy-Abfrage beim LCD? Wenn das LCD nicht läuft, hängt der AVR dann möglicherweise in einer endlosen Abfrageschleife. Was ist die minimale Versorgungsspannung des LCDs? Ist sie möglicherweise höher als die Brownout-Schwelle des AVR? Dann beginnt dieser, das LCD zu initialisieren, noch bevor dieses ausreichend mit Spannung versorgt wird. Gibt es vielleicht noch weitere Peripherie, die den AVR möglicherweise blockiert? Hast du die Schaltung schon mit einem Minimalprogramm (blinkende LED und sonst nichts) getestet, um zu sehen ob der AVR auch hier hängt?
Hallo, vielen Dank für die Antworten. Zusammenfassend möchte ich sagen, ich bin sicher, der AVR 'hängt'. Einen MAX 232 gibt es auf dem Olimex Board nicht. Nur zwei Transistoren und die sind garantiert Brownout-fest ;-) Also, wenn der AVR etwas sendet, muß es auch zum PC rausgehen. Ob das LCD Brownout-fest ist weiß ich nicht. Aber 1. siehe MAX232 und 2. wenn ich bei 'hängendem' Zustand von Hand einen Reset am AVR auslöse, läuft er wieder und das LCD zeigt an. Werde also die Lösung mit dem LTC1232 probieren. Wenn ich das Datenblatt richtig verstanden habe, gibt er so lange Reset-Impulse aus, bis der AVR sich bei ihm meldet. Das ist also genau das, was ich brauche. Nochmals vielen Dank für Eure Antworten.
Hallo Frank, du hast es richtig gelesen. Je nach Einstellung will er alle 150 - 2000 ms einen Impuls sonst mach er einen Reset. Wenn der µC dann nicht läuft wiederholt sich das. Der Zähler wird immer auf 0 gesetzt, du kannst also auch bei 2000 ms Vorgabe alle z.B. 20 ms zurücksetzen. Auch die Spannung wird sehr genau überwacht und ein "sauberes" Resetsignal generiert. Der Baustein ist eigentlich uralt, wurde aber früher bei 8051-Prozessoren oft eingesetzt. Es gibt den 1232 nicht nur von Linear sondern von nahezu allen Verdächtigen z.B. Analog, Maxim... gruß hans
Ich stimme auch zu, Du hast da irgendne Peripherie, die länger braucht oder irgendwie nicht richtig initialisiert wird und Deine Software hängt. Mache mal nur ne Blink-LED und Du wirst sehen, daß das Brownout funktioniert. Und dann füge schrittweise die anderen Funktionen ein, bis sie nicht mehr blinkt. Dann weißt Du, wo Du weiter suchen mußt. Schaue auch mal, ob es Programmteile gibt, wo Du endlos auf etwas wartest und dann mache ein Timeout für diese Funktionen, d.h. das Warten wird in jedem Fall mal abgebrochen, z.B. nach 1s. Mache auch ein Watchdog-Disable in die Initialisierung. Es könnte sonst sein, daß der Watchdog ständig ein Reset auslöst und Du dann denkst, die CPU hängt. Irgendwo im Datenblatt wird das auch empfohlen. Das Watchdog-Disable sind 3 Befehle! Und irgendwelche Stromsparmodies habe da auch nichts verloren, bevor das Programm nicht richtig läuft. Wenn das Brownout wirklich nicht funktionieren würde, hätte das bestimmt schon Atmel gemerkt. Peter
Frank wrote: > Hallo, > dier ersten Antworten kommen ja schnell. Aber es sind auch alles > 'Schnellschüsse'. Sie sind so genau, wie es Deine Problembeschreibung zuläßt. Also erstmal an die eigene Nase fassen. Peter
Frank wrote: > vielen Dank für die Antworten. Zusammenfassend möchte ich sagen, ich bin > sicher, der AVR 'hängt'. Einen MAX 232 gibt es auf dem Olimex Board > nicht. Nur zwei Transistoren und die sind garantiert Brownout-fest ;-) Je nach Schaltung erzeugen sie u. U. nie saubere RS-232-Pegel, d. h. es ist mehr oder weniger Zufall, was am Ende über die RS-232 an deinem PC ankommt.
Ich weiss nicht mehr im welchem Kontext das war, aber ich kann mich vage daran erinnern, das so ein Oszillator bei sehr langsam startendem Vcc Probleme bereiten kann. Lässt sich leicht ausprobieren, indem man testweise mal auf internen Oszillator geht. Das ist zwar für UART nicht ideal, aber um den Fall zu reproduzieren sollte das ausreichen. Dem UART Konverter des AVT-MT-128 ist die Anstiegszeit jedenfalls egal. Da ist nur wichtig, dass die andere Seite nicht genauso schummelt.
A. K. wrote: > Ich weiss nicht mehr im welchem Kontext das war, aber ich kann mich vage > daran erinnern, das so ein Oszillator bei sehr langsam startendem Vcc > Probleme bereiten kann. Dann dürfte jedoch auch ein externer Reset nichts daran ändern, denn der Oszillator wird durch den Reset ja nicht beeinflusst.
Im Datasheet vom Tiny44 steht übrigens etwas über eine minimal erforderliche Anstiegsgeschwindigkeit von Vcc. Der Power-on-Reset funktioniert sonst wohl nicht. Aber mit externem Reset-PC wie hier (ZM33064, wenn ich mit der Annahme eines Olimex AVR-MT-128 richtig liege) dürfte das egal sein. Was hier sicher hilft: Eine Stromversorgung, die bei Unterspannung schlichtweg abschaltet. Also den Ausgang des Reset-ICs nicht an Reset hängen, sondern an eine Schaltung, die dem Rest den Saft klaut.
Ich habe das eben mal versucht nachzuvollziehen. Habe ein älteres Experimentierboard genommen mit einem ATmega128 und 14,7-MHz-Quarz (auf einem STK501 kann man ja keinen Quarz direkt anschließen). Die Fuses stehen auf 0xff/0x1f/0x3e (efuse/hfuse/lfuse). Spannungs- versorgung über Poti und Transistor, da mein Lab-Netzteil nur bis 2 V herunter geht. Ist ein bisschen ,,weich'', aber das sollte ja dem Verhalten des OP eher entgegen kommen. Als Firmware einen simplen LED-Blinker, der einen Pin auf Ausgang schaltet und dann im 100-ms-Rhythmus in main() blinken lässt. Ich kann keinerlei Fehlverhalten reproduzieren, egal wie langsam ich da an der Vcc drehe. Habe auch nochmal den Oszillator mit dem Oszilloskop verfolgt, da ist gut zu erkennen, dass bei ca. 1,5 V der interne Spannungsregler (oder sowas) anspringt, denn ab da taucht am Oszillatorpin ~Vcc/2 auf. Bei 2,3 V schwingt dann der Oszillator an, bei ca. 2,5 V hat er volle Amplitude. In diesem Bereich ist eine Spannungsänderung sicher besonders kritisch, aber auch hier kein Fehlverhalten erkennbar, egal wie ich am Poti drehe. Bei 4,05 V lässt der Brownout dann den Reset los, und die LED blinkt. Wenn die Spannung wieder unter 4,00 V sinkt, geht alles wieder in den Reset. Ich bin davon überzeugt, dass das Problem woanders liegt.
Jörg Wunsch wrote: > Oszilloskop verfolgt, da ist gut zu erkennen, dass bei ca. 1,5 V > der interne Spannungsregler (oder sowas) anspringt, Die Schwelle vom Power-on Reset, Vpot, liegt bei typ 1,4V.
Ich tippe auch ehr auf Display bzw. hängen bei Displayabfrage. Displays sind Spannungskritischer als ein AVR. Das mit dem Watchdg ist auch möglich. Wenn man einen 1232 einsetzen will sollte man auch Geld für einen MAX232 haben. gruß hans
Das Display könnte man ggf. direkt aus einem Pin versorgen, dann ist dessen Power-on Reset geklärt. Aber er sollte das mal testen ohne auf Display- und UART-Funktion zurück zu greifen. Blinker mit LED oder Messgerät am Pin.
Hallöchen Ich habe zur Zeit ein ähnliches Problem mit einem ATMEGA 128. Auf der Print arbeitet auch eine Spannungsinverter von +12V auf -12V. Lage ich Spannung an die Schaltung läuft der uC einwandfrei hoch. Nehme ich nun die Spannung weg und lege diese gleich wieder an, so fährt der uC hoch aber die serielle Schnittstelle funktioniert nicht. Die negtive Spannung wird über einen Spannungsteiler einem Analogeingang des uC zugeführt. Es liegt nun nach dem Ausschalten für ca. 10 Sekunden ( dann ist der Kondensator entladen ) negative Spannung am Eingang des uC an. Stromfluss max. 1mA. Wenn in dieser Zeit die Versorgungsspannung wieder kommt, so funktionert die serielle Schnittstelle des uC nicht und kann auch durch einen Reset nicht wieder in Funktion gebrachtg werden. hmg Mandi
Manfred Schön wrote:
> Ich habe zur Zeit ein ähnliches Problem mit einem ATMEGA 128.
Ist aber offenbar doch ein anderes Problem, also mach bitte einen
separaten Thread auf. Das wird sonst einfach zu unübersichtlich.
Dein Problem klingt mir eher nach latch-up.
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.