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
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?
Schaltplan, Layout, Code? Woraus wird der 7805 versorgt?
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
Auch interessant: Brown Out Detection ist wie gesetzt?
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
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.
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
Ach ja, der Chip steckt nur zum Programmieren am Programmer, Danach wird er in die Schaltung gesetzt. ;-)
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
Hallo Björn, würde mich interessieren ob Du eine Lösung gefunden hast, habe nämlich dasselbe Problem mit demselben µController... mfG Karoly
Peter Dannegger schrieb: > Abblockkondensatoren können nie zu groß sein. Und schon ist der Mythos geboren... mf
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?
@ 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.
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.
...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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.