Hallo, Ich habe eine Schaltung für einen RFID Transponder, aufdem ein ATMega48 verbaut ist. Eigentlich macht die Schaltung+Software dass was sie soll, nur beim letzten Batteriewechsel ist mir aufgefallen dass sich der Controller beim Einlegen der Batterie aufgehängt bzw. die Ports am Controller für einen kurzen Moment undefiniert waren. Das ganze kann ich reproduzieren, indem ich die Batterie ganz langsam einlege. Zuerst habe ich an ein prellen gedacht. Aber auch ein dazwischengeschalteter, weitgehend prellfreier Taster behebt das Problem nicht sondert verbessert es nur ein wenig. Kondensatorprobleme an der Eingangsspannung kann ich auch so gut wie ausschließen. Was für ein Problem kann das noch sein?
Steven schrieb: > die Ports am > Controller für einen kurzen Moment undefiniert waren. Die Ports gehen beim (Poweron-)Reset in tristate, das ist so und kann man nicht ändern. Wenn Dich das stört, dann mußt Du durch externe Pullups/-downs den gewünschten Pegel erzwingen. Der Grund ist, daß der MC-Hersteller ja nicht wissen kann, welche Pins bei Dir Ausgang sein sollen. Und daher ist per default erstmal alles Eingang, damit nichts kaputtgeht. Peter
Danke für die schnellen Antworten! > BOD aktiviert? Hatte ich ich vermutet und ausgeschaltet, hilft leider nicht > Die Ports gehen beim (Poweron-)Reset in tristate, das ist so und kann > man nicht ändern. Ok, verstehe. Den störenbden PORT noch mal Extern zu beschalten ist kein Problem. Aber Aufhängern dürfte der Controller sich doch aber eigentlich nicht, oder?
Steven schrieb: > Aber Aufhängern dürfte der Controller sich doch aber eigentlich > nicht, oder? Mit BOD nicht. Ist daher zu 99% ein SW-Fehler. Z.B. gerne gemacht wird falsche Reihenfolge beim SPI-Init (/SS Pin zu spät als Ausgang). Peter
Steven schrieb: > Aber Aufhängern dürfte der Controller sich doch aber eigentlich > nicht, oder? Was meinst Du mit "Aufhängen"? Oben schreibst Du, dass > die Ports am > Controller für einen kurzen Moment undefiniert waren Daraus schloss ich, dass es nur um die paar µs vom Anlegen der Spannung bis zur Port-Initialisierung durch Dein Programm ging - wie ist das jetzt zu verstehen?
Steven schrieb: > Danke für die schnellen Antworten! > >> BOD aktiviert? > > Hatte ich ich vermutet und ausgeschaltet, hilft leider nicht Sollte es nicht eher aktiviert sein, um undefiniertes Verhalten zu vermeiden? ;)
> Ist daher zu 99% ein SW-Fehler. > Z.B. gerne gemacht wird falsche Reihenfolge beim SPI-Init (/SS Pin zu > spät als Ausgang). Da suche ich gerade. Der SPI ist es nicht. Was gibt es noch für typische Fehler? Wie gehe ich am besten vor? Wenn ich das Programm über den Debugger starte. Funktioniert es immer. Ohne Debugger tritt es auf, aber ich kann nicht sehen wo es hängt?
So, ich hab zum testen nun mal folgenden Code verwendet:
1 | #include <avr/io.h> |
2 | |
3 | main() |
4 | {
|
5 | |
6 | PORTD = 0x00; |
7 | DDRD = 0x03; |
8 | |
9 | PORTD |= (1 << PD0); |
10 | PORTD |= (1 << PD1); |
11 | |
12 | |
13 | while(1) |
14 | {
|
15 | ;
|
16 | }
|
17 | }
|
Wenn ich die Batterie nun ganz langsam einlege, hängt sich der Controller auf, d.h. PD0 und PD1 haben keinerzeit einen High Pegel, obwohl die Versorgungsspannung am Controller anliegt.
Martin Wende schrieb: > BOD wieder aktiv? > Takt fuses auf slow rising power eingestellt? BOD ist wieder aktiv und wenn du mit Takt fuses das Power On Reset mit 65ms meinst, das auch. Ansonsten überlege ich gerade ob die LED's auf dem Board nicht zu viel Strom ziehen??? Könnte das so einen Fehler verursachen?
Steven schrieb: > Wenn ich die Batterie nun ganz langsam einlege Vielleicht bin ich auf dem Holzweg. Aber 'langsam' einlegen bedeutet ja nicht, dass die Spannung langsam steigt. Die Spannung ist entweder da oder sie ist nicht da. Mit der Einlegegeschwindigkeit hat das aber nichts zu tun. In dem Moment, in dem der Kontakt hergestellt ist, ist die Spannung da und Strom fliesst. Das ganze wird nur dadurch verzögert, dass da immer irgendwelche Kapazitäten sind, die sich erst mal aufladen müssen. Was aber sein kann: Da elektrische Kontakte nicht 100% plan, eben und poliert sind, präsentiert sich dein langsames einlegen für die Schaltung so: Spannung da Spannung weg Spannung da Spannung weg da weg daaaaaaaaaa und dementsprechend lädt sich dann auch zb dein Siebkondensator, so einer vorhanden ist, langsamer auf und verzögert den Spannungsanstieg. D.h. die Themenkreise sind * Brown Out Fuse, bzw. ab welcher Spannungslage darf der µC anfangen mit arbeiten * was in eine ähnlich Kerbe schlägt wie ist die Verzögerung beim Neustart durch die Fuses eingestellt * was macht der Resetpin Im Grunde sind alles nur Variationen desselben Gedankens: Den µC solange sicher im Reset zu halten, bis die Spannung soweit gestiegen ist, dass eine sichere Funktion gewährleistet ist.
Karl Heinz Buchegger schrieb: > D.h. die Themenkreise sind > * Brown Out Fuse, bzw. ab welcher Spannungslage darf der µC anfangen > mit arbeiten > * was in eine ähnlich Kerbe schlägt > wie ist die Verzögerung beim Neustart durch die Fuses eingestellt > * was macht der Resetpin Genau die Punkte scheinen aber in Ordnung zu sein. Was mich gerade noch stutzig macht ist dass der Programmer/Debugger sich manchmal auch aufzuhängen scheint, bzw. das Programm nicht von Beginn an startet sondern von irgendwo mittendrin anfängt zu laufen. Aber wie kann das passieren?
Steven schrieb: > Aber wie kann das passieren? Must du mittels Debugging gucken, ob immer an gleicher Stelle oder zu gleichem Zeitpunkt.
Langsam kommt der Verdacht auf, dass es an fehlenden Abblock-Kondensatoren liegen könnte... ...
Hannes Lux schrieb: > Langsam kommt der Verdacht auf, dass es an fehlenden > Abblock-Kondensatoren liegen könnte... Abblockkondensatoren sind eigentlich vorhanden. Wie groß sollten den "Rippel" auf der Versorgungsspannung maximal sein? Oder denkst du an andere Verbraucher auf dem Board. Eigentlich ist da nur noch der RFID Chip....
Also Fakt ist der Degugger startet manchmal nach dem Programmiervorgang von alleine und dann mitten im Programm....
Vielleicht mag der Debugger solche Spielchen mit der VCC nicht. Schalte mal die Debugfuse aus und klemme auch den Debugger ab. Peter
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.