Forum: Mikrocontroller und Digitale Elektronik Einschaltverhalten AVR


von Steven (Gast)


Lesenswert?

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?

von David .. (volatile)


Lesenswert?

BOD aktiviert?

von Peter D. (peda)


Lesenswert?

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

von Steven (Gast)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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

von Patrick (Gast)


Lesenswert?

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?

von David .. (volatile)


Lesenswert?

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

von Steven (Gast)


Lesenswert?

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

von Steven (Gast)


Lesenswert?

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.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

BOD wieder aktiv?
Takt fuses auf slow rising power eingestellt?

von Steven (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Steven (Gast)


Lesenswert?

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?

von Lemue (Gast)


Lesenswert?

Steven schrieb:
> Aber wie kann das passieren?

Must du mittels Debugging gucken, ob immer an gleicher Stelle oder zu 
gleichem Zeitpunkt.

von Hannes L. (hannes)


Lesenswert?

Langsam kommt der Verdacht auf, dass es an fehlenden 
Abblock-Kondensatoren liegen könnte...

...

von Steve (Gast)


Lesenswert?

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

von Steve (Gast)


Lesenswert?

Also Fakt ist der Degugger startet manchmal nach dem Programmiervorgang 
von alleine und dann mitten im Programm....

von Peter D. (peda)


Lesenswert?

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