Forum: Mikrocontroller und Digitale Elektronik ATTiny13 startet nicht immer bei Power-Up


von Björn (Gast)


Lesenswert?

Hallo Zusammen,

ich habe eine kleine Schaltung mit einem AT Tiny 13 gebaut, die LEDs 
steuert. Dummerweise startet das Programm nicht jedes mal wenn die 
Schaltung mit Spannung versorgt wird. Manchmal muss ich die 
Versorgungsspannung 1 - 20 Mal an und abklemmen bis das Programm dann 
endlich losläuft. Meine Vermutung geht in Richtung Reset-Pin, bin mir 
aber nicht sicher.

Da das Problem ja eventuell auch mit der Spannungsversorgung zusammen 
hängen könnte.... hier mal der Aufbau:
Der Atmel wird mit einem 7805 Festspannungsregler versorgt. Geglättet 
mit einem 100µF Elko + 100nF KerKo. Der Reset Pin wird zusätzlich zu dem 
internen Pull-Up mit einem 4,7K Widerstand auf Vcc gezogen plus einem 
100nF KerKo gegen GND. Der Rest der Schaltung läuft nicht über den 7805.

Das Starten des Programmes läuft manchmal beim ersten Mal, manchmal aber 
auch erst nach vielen Versuchen. Geschrieben ist das Programm in 
Assembler.
Theoretisch könnte ja auch das Programm fehlerhaft sein, aber warum 
läuft es dann überhaupt an?
Bei offenem Reset-Pin sieht das ganze nicht anders aus.
Gibt es andere Beschaltungsvarianten für den Rest-Pin, die vielleicht 
besser funktionieren?

Besten Dank im Voraus, Björn

von Karl H. (kbuchegg)


Lesenswert?

Ob es der Reset ist, kannst du testen.

Wenn der Tiny wieder mal nicht anläuft, dann leg den Reset-Pin mit einem 
Stückchen Draht auf Masse (kurz antippen genügt). Ist der Pin dann 
wieder frei und läuft der Tiny los, dann musst du an deiner 
Reset-Beschaltung arbeiten. Wenn nicht, dann würde ich auch das Programm 
ins Auge fassen.

> Der Atmel wird mit einem 7805 Festspannungsregler versorgt.
> Geglättet mit einem 100µF Elko + 100nF KerKo.

Auf welcher Seite vom 7805 sind die Kondis?
Du hast dem 7805 jeweils 100nF von Eingang bzw. Ausgang nach Masse 
spendiert?

von h_ (Gast)


Lesenswert?

Schaltplan, Layout, Code?
Woraus wird der 7805 versorgt?

von Achim M. (minifloat)


Lesenswert?

Lässt du den Programmer jedes mal stecken? Könnte ein Problem sein.

Hängt dein Programm ziemlich direkt nach dem Start von extern 
eingelesenen Werten ab? Dann auch mal dort einen Fehler suchen.

Schon mal mit einem Oszi die Betriebsspannung, die du dem Tiny 
anbietest, angesehen? Zuviel "Schmutz" und/oder Spannnungseinbrüche => 
Läuft nicht oder undefiniert.

Stell mal die Fuses auf irgendwas mit "slowly rising power", heißt in 
den Prog-Tools meist "irgendwas + 64ms". Vielleicht steigt die Spannung 
zu langsam beim Start, sodass ein bisschen Warten vor Beginn des 
Proramms gar nicht so verkehrt sein dürfte. Vorsicht: Nicht einen 
externen Takt auswählen, sonst brauchst du irgendwoher eben einen 
externen Takt um den Tiny wieder zu ent-ver-fusen(was für ein Wort!).

mfg mf

von spess53 (Gast)


Lesenswert?

Hi

Wie sind die Fuses gesetzt?

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Auch interessant:
Brown Out Detection ist wie gesetzt?

von Peter D. (peda)


Lesenswert?

Björn schrieb:
> Theoretisch könnte ja auch das Programm fehlerhaft sein, aber warum
> läuft es dann überhaupt an?

Ist zu 99% ein SW-Fehler.

Dein Programm liest Pins ein, die nicht den erwarteten Zustand haben 
(z.B. floaten).
Dein Programm benutzt SRAM/Register, die nicht den erwarteten Zusand 
haben.

Irgendwann haben sie doch zufällig den erwarteten Zustand und dann 
läufts.


Abhilfe:
- SRAM/Register immer definiert vorladen
- nichtbenutzte Pins bei Abfragen maskieren


Peter

von Stefan K (Gast)


Lesenswert?

die 100µF sind hoffentlich am EINGANG des 7805 angeschlossen, denn bei 
Kapazitäten größer 10µF am Ausgang neigen diese Festspannungsregler zum 
schwingen!
Vergrößere den Widerstand zwischen Plus und Resetpin auf 100K und achte 
auf eine möglichst nahe Platzierung der 10µF und 100nF am Controller.
Es schadet auch nicht, hier Schaltplan und/oder Code zu posten.

Stefan K.

von Björn (Gast)


Lesenswert?

Hi,

vielen Dank schon mal für die vielen Antworten in so kurzer Zeit.

Auf die Idee, dass es am Code liegen könnte bin ich noch nicht gekommen 
weil es ja manchmal funktioniert. Da ich programmiertechnisch eher noch 
ein Anfänger bin könnte das durchaus sein.
Den Code habe ich gerade nicht zur Hand... der ist auf einem anderen 
Rechner zu Hause...
Ich werde die angesprochenen Punkte zum Code aber zu Hause mal checken.
Was die Fuses betrifft hab ich zur Zeit noch wenig einfluss drauf. Ich 
hab das Programm mit einem Franzis Entwicklungskit 
(http://www.conrad.de/ce/de/product/904157/LERNPAKET-MIKROCONTROLLER/0418046&ref=list) 
auf den Atmel überspielt und da werden die Fuses und der Bootloader 
vordefiniert aufgespielt.
Wenn ich das manuell selber machem möchte muss ich schnell viel mehr 
Zeit mit dem Programmieren verbringen, mein STK500 zum Laufen bringen 
und dann über den programmieren. Ich war schon froh, dass das Programm 
überhaut so einigermaßen macht was es soll. ;-)) Dann würde ich aber 
auch gleich versuchen in C zu programmieren und dann hab ich noch mehr 
Baustellen offen.

Zur Hardware nochmal: Der 100µF Elko ist auf der Ausgangsseite 
angebracht. Am Eingang hab ich 220µF verbaut. Zur Stabilisierung hab ich 
ja noch 2x 100nF KerKos dicht am Festspannungsregler (Ein- und Ausgang). 
Das mach ich schon seid vielen Jahren so und hab noch nie ein Schwingen 
beobachtet. Der 7805 wird aus einem stabilisierten Netzteil versorgt.
Das mit dem "zu langsamen Steigen der Spannung beim Einschalten könnte 
eventuell auch sein. Ist ja mit 100µF ne ordentliche Kapazität verbaut. 
Muss ich mal checken wenn ich heut Abend basteln kann.

Und das mit den Registern kann ich leider auch erst dann checken. Wüsste 
allerdings nicht worauf ich da genau achten muss. Es werden nur Register 
von ??? R14 bis R29 verwendet und angäblich kann bis R31 für Variablen 
verwendet werden.

Nochmals Danke für die Anregungen und ich werde heut Abend mal die Ideen 
überprüfen.

Björn

von Björn (Gast)


Lesenswert?

Ach ja, der Chip steckt nur zum Programmieren am Programmer, Danach wird 
er in die Schaltung gesetzt. ;-)

von Peter D. (peda)


Lesenswert?

Björn schrieb:
> ja noch 2x 100nF KerKos dicht am Festspannungsregler (Ein- und Ausgang).
> Das mach ich schon seid vielen Jahren so und hab noch nie ein Schwingen
> beobachtet.

Ist auch meine Erfahrung. Abblockkondensatoren können nie zu groß sein.
Im LM7805 Datenblatt steht auch keine obere Grenze.

Spannungsregler sind auch keine HF-Schaltungen, wenn ein Transient 
reinkommt, kann der schnell mal auf den Ausgang durchschlagen. Und wenn 
dann dort kein dicker Pufferelko ihn abfängt, dann ist der MC hin.


Peter

von Karoly (Gast)


Lesenswert?

Hallo Björn,

würde mich interessieren ob Du eine Lösung gefunden hast, habe nämlich 
dasselbe Problem mit demselben µController...

mfG Karoly

von Achim M. (minifloat)


Lesenswert?

Peter Dannegger schrieb:
> Abblockkondensatoren können nie zu groß sein.

Und schon ist der Mythos geboren... mf

von Stefan (Gast)


Lesenswert?

Was ist denn nun, wenn Du den Reset-Eingang manuell bedienst? Startet 
der Controller dann richtig?

Eventueller Schaltungsfehler: Liegt an irgendeinem Eingang Spannung an, 
BEVOR die 5V Versorgung anliegt? Berücksichtige, dass die 5V Versorgung 
verzögert ansteigt, wegen des 100µF Kondensators am Ausgang des 
Spannungsreglers.

Je nach Netzteil könnte es auch sein, dass die Versorgungsspannung 
langsamer ansteigt, als die Länge ds Reset-Impulses. Eventuell hilft ein 
größerer Reset Kondensator, oder eben der bereits empfohlene manuelle 
Reset.

Es wurde auch bereits nach dem Brown-Out Detektor gefragt. Nutzt Du ihn, 
und wenn nicht, warum nicht?

von Karoly (Gast)


Lesenswert?

@ Stefan:

ich gehe davon aus dass Du mich gefragt hast und nicht den 
ursprünglichen Verfasser des ersten Beitrages (Björn).

Schaltung: Versorgung 12 V Netzteil, stabilisiert. Es wird herunter 
geregelt auf 5V mit 78L05. Mit oder ohne Kondensatoren am Eingang und 
Ausgang , (0.1µ + 100µ) -> keine Änderung.
Einstellungen für µC: oscillator intern 9.6MHz, am Anfang DIV 8 Flag 
aktiviert was ich später im Code nach Initialisierung ändere. Mit oder 
ohne DIV 8: kein Unterschied. Start up Time delay auf 14CK + 64ms 
eingestellt. Brown out detektor ist deaktiviert, Watchdog auch nicht 
verwendet.

Habe auch folgendes versucht: Spannung anlegen, Reset dabei manuel auf 
LOW halten, danach losgelassen -> keine Änderung. Der Reset Pin 
funktioniert nur wenn der µC einmal startet, dann lässt sich immer 
wieder resetten, sonst nicht. Wenn das Programm einmal gestartet, läuft 
ohne Unterbrechung die ganze Nacht lang.

Habe auch mit 4,8MHz versucht, keine Änderung.

Es ist aber interessant wie die Schaltung startet: ich muss über 
Versorgung Störungen hineinbringen, d.h. die Plus Leitung mehrmals 
hinter einander kurzfristig unterbrechen, dann startet irgendwann.

von USBASP User (Gast)


Lesenswert?

Es ist völlig normal, daß ein Controller, der mit einem Bootloader 
bestückt ist, nicht sofort sein Anwendungsprogramm startet. Zuerst wird 
gecheckt, ob über die serielle Schnittstelle ein neues 
Anwendungsprogramm geladen werden soll. Erst wenn das nicht der Fall 
ist, wird das bereits geladene Programm ausgeführt. Das heißt aber, das 
eine gewisse Zeit gewartet wird. Wenn ein Reset ausgeführt, während der 
Controller noch wartet, wird der Bootloader nicht durchlaufen und das 
Anwenderprogramm startet sofort.
Das ist in der hoffentlich ausführlichen Dokumentation von Franzis bzw. 
Conrad sicher auch so beschrieben.

von Karoly (Gast)


Lesenswert?

...es ist auch im PDF Dokument beschrieben, herunter geladen von Atmel 
Webseite. Der Bootloader ist aber defaultmäßig abgeschaltet (SELFPRGEN 
Fuse) und blieb auch abgeschaltet. Aber über wie viel Zeit sprechen wir 
beim Warten von Bootloader?

von Stefan F. (sfrings)


Lesenswert?

Da es nicht hilft, den Reset Pin während des Starts zuerst auf Low zu 
halten und dann loszulassen, schätze ich, dass Du einen Fehler im 
Programm hast.

Ich würde das Programm durch einen simplen LED Blinker austauschen. 
Tritt der Fehler dann immer noch auf, ist es ein Schaltungsfehler. 
Warscheinlich wird der LED Blinker funktionieren.

von Karoly (Gast)


Lesenswert?

FYI:

es war tatsächlich ein Fehler im Programm. Habe einen Register nicht 
initialisiert. Jetzt funktioniert die Schaltung wie ich es mir 
vorgestellt habe :-)

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.