Forum: Mikrocontroller und Digitale Elektronik AVR 'langsam' einschalten


von Frank (Gast)


Lesenswert?

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.

von idee (Gast)


Lesenswert?

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?

von O. D. (odbs)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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

von Frank (Gast)


Lesenswert?

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)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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?

von hans (Gast)


Lesenswert?

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

von asdf (Gast)


Lesenswert?

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.

von Frank (Gast)


Lesenswert?

@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.

von yalu (Gast)


Lesenswert?

> 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?

von Frank (Gast)


Lesenswert?

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.

von hans (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von hans (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von Manfred S. (mandinice)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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