Einschaltverhalten AVR

Gast #2963250
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?
#2963263
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
Gast #2963282
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?
Gast #2963294
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?
Gast #2963387
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?
Gast #2963472
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.
#2963519
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.
Gast #2963538
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?
Gast #2963789
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....

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren