Forum: Mikrocontroller und Digitale Elektronik ungewollter Reset AtMega128


von Thomas (Gast)


Lesenswert?

Hallo,

ich verwende einen Mega128 in einem kleinen Projekt, um unter anderem 
einen Drehcoder auszuwerten. Der 2 Drehcoder Leitungen sind mit 5.6K 
Pull-up Widerständen gegen Vcc geschaltet und haben jeweils einen 100n 
Kondensatoren gegen Masse. Am Controller sind sie an PD0 (INT0) und PC4 
angeschlossen.

Wenn ich am Drehcoder drehen kommt es nun häufig zu einem Reset des 
Controllers. Im MCUCSR sind danach PORTF, EXTRF und JTRF gesetzt. Das 
Datenblatt sagt mir dazu auf Seite 51 verschiede Erklärungen, wobei ich 
nicht deuten kann wodurch dir Kombination aus den oben genannten 
auftreten soll.

Die Spannungsversorgung sollte eigentlich stabil sein. Die Schaltung ist 
auf einer doppelseitigen Platine, Abblockkondensatoren sind soweit 
überall verbaut.

Ich hoffe dass mir jemand weiterhelfen kann oder zumindest Ideen hat wo 
der Fehler liegen könnte. Vielen Dank
Thomas

von Johnny (Gast)


Lesenswert?

Ist der Reset Pin richtig beschaltet?
Ansonsten die Speisung mal während des Drehens mit einem KO messen.
Wenn ales nichts hilft; es kann auch ein Programmierfehler sein, welcher 
z.B. einen Stacküberlauf hervorruft.

von Peter K. (opa-peter)


Lesenswert?

Hi,
bin kein Experte aber wenn der Anschluss an INT0 ist wird doch ein 
interner Interrupt ausgelöst und dies ggf, noch während der vorherigen 
Interuptverarbeitung, wenn man schnell genug dreht...
Da scheint mir ein Stack Overflow leicht möglich.

von Thomas (Gast)


Lesenswert?

Ich habe die ganze Interrupt Steuerung aus meinem Programm 
auskommentiert. Es sollte also INT0 nicht mal mehr aktiv sein und daher 
schließe ich einen Softwarefehler aus.

Ja der Reset Pin sollte stimmen. Ich habe 5V in normalem Betrieb, mit 
aufgestecktem JTAG nur noch 4V. Dass das so ist war mir zwar noch nie 
aufgefallen aber nachdem ich an der Schaltung schon länger bastel geh 
ich mal davon aus dass das normal ist.

von wt (Gast)


Lesenswert?

wenn Interrupt freigeschalten ist, muß eine entsprechende ISR geben. 
Kann diese von sw nichtgefunden werden, weil der Zeiger nicht existiert, 
kommt es zum Reset am Baustein.

von wt (Gast)


Lesenswert?

hast Du auch den Interrupt flag disabled?

von Thomas (Gast)


Lesenswert?

Ich schalte keine Interrupts mehr frei.

von Thomas (Gast)


Lesenswert?

@wt
Ja, ich schalte nichts mehr ein.

von wt (Gast)


Lesenswert?

ferndiagnose wird immer schwieriger.

poste mal den code und schaltplan, der fehler kann sowohl in der hw als 
auch in der sw liegen.

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Der Schaltplan ist etwas größer, im angehängten Teil ist zu sehen wie 
der Drehcoder angeschlossen ist. Die Leitungen P0, P1... gehen dann 
direkt auf die Pins den Controllers wie ich es oben beschrieben habe. 
Können durch die Kondensatoren irgendwelche Probleme entstehen? 
Eigentlich sollten die ja wenn dann nur über die Schalter im Drehcoder 
entladen werden und damit dort etwas höhere Ströme verursachen?
1
int main(){
2
      
3
  io_init();  
4
5
  cli();
6
7
  while(1){
8
9
10
  }
11
    
12
  return 0;
13
}
14
15
void io_init(void)
16
{
17
   
18
  DDRC &= ~(1 << DDC0);                      // switch 0 (breakpoint)
19
  DDRC &= ~(1 << DDC1);                      // switch 1
20
  DDRC &= ~(1 << DDC2);                      // switch 2
21
  DDRC &= ~(1 << DDC3);                      // switch 3
22
  DDRC &= ~(1 << DDC4);                      // rotary encoder 0
23
  DDRC &= ~(1 << DDC5);                      // rotary encoder button
24
25
  DDRD &= ~(1 << DDD0);                      // rotary encoder 1
26
27
28
  //Pull Ups
29
  PORTD |= (1 << DDD0);
30
  PORTC |= (1 << DDC4);
31
  PORTC |= (1 << DDC5);
32
          
33
}

von wt (Gast)


Lesenswert?

Prozesor beschaltung ist auch wichtig

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Bitteschön.

von wt (Gast)


Lesenswert?

ok,

1. L5 gehört raus, AGND und GND niederohmig zusammen schliessen
2. Reset Beschaltung: R11 100K, C14 100p
3. pins 21 und 52 mit min 1µF gegen masse beschalten
4. warum brauchst Du so niederohmige pullup's am encoder 5,6k, deine 
interne µP pullup's schpielen keine rolle mehr.

hast du interne beschaltung vom encoder? ich habe ein verdacht!

von Thomas (Gast)


Lesenswert?

Die 5.6K sind aus dem Datenblatt, die 100n aus einem anderen und ich 
wollte mir damit das Software entprellen sparen.

Ich verwende diesen Encoder:
http://www.farnell.com/datasheets/127163.pdf

"Terminal C" ist auf GND, A und B gehen auf RE0 und RE1.

von Thomas (Gast)


Lesenswert?

Ach ja, die internen Pull Ups bringen hatte ich anfangs nicht, sind nur 
bei der Fehlersuche drin gelandet.

von wt (Gast)


Lesenswert?

wenn Du punkte 1-3 bereits hast, schmeiß die ext. Pullup's 5.6k raus und 
laß die internen eingeschalten, für den ersten test. Cap. sollen 
richtung 1nF runter

es darf kein Reset mehr vorkommen. Bei erfolg erzähle ich dir meinen 
verdacht

von Thomas (Gast)


Lesenswert?

Ja mache ich, wird aber später...

von wt (Gast)


Lesenswert?

ist recht ich muß auch für ca 1Std. weg
bis dann

von Thomas (Gast)


Lesenswert?

Tut mir Leid, das wird heute nichts mehr, kann es leider erst morgen 
überprüfen.

Was hast du denn im Verdacht?

von wt (Gast)


Lesenswert?

durch niederohmigkeit des pullups wird für kurze Zeit Einbruch im Vcc 
verursacht. Dadurch geht µP in Reset. Beim Encoder habe ich damals 
10MOhm eingesetzt.

von Thomas (Gast)


Lesenswert?

Was meinst du mit Niederohmigkeit des Pullups? Sollten doch 5.6K bleiben 
und die sollten der Spannungsversorgung doch nichts antun? Ich meine ich 
hoffe inständig dass du Recht hast, ich kanns mir noch nicht erklären 
;-)

von Thomas (Gast)


Lesenswert?

Hallo,

hattest Recht! Vielen Dank Dir und auch den anderen! Ich habe sowohl die 
Widerstände als auch die Kondensatoren raus genommen und es ging sofort, 
hatte auch keinerlei prellen oder sonstige Probleme mit der Auswertung.
Dann habe ich die Kondensatoren wieder rein gemacht und bekamm wieder 
häufige Resets. Scheinbar waren 100n doch etwas übertrieben ;-) Was nur 
mit den Widerständen passiert habe ich jetzt nicht mehr extra 
ausprobiert, die internen Pullups tun ihre Sache ja ganz gut.

von wt (Gast)


Lesenswert?

gut gut,

hast Du die anderen Sachen auch umgesetzt? Wichtig ist auch, daß die 
Masse überall durchverbunden ist. Wenn Masse schwimmt, kann auch zum 
Systemreset kommen.

Beim Encoder, den du einsezen tust, ist eine enprellung von ca. 3-5ms 
notwendig, um Betriebssicherheit zu gewehrleisten, das muß Du 
sinnvollerweise in der sw machen. wie oben schon gesagt, kannst Du die 
Cap. richtung 100p-1nF einsetzen

gruß

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.