ungewollter Reset AtMega128

Gast #1143805
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
Gast #1143856
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.
#1143874
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.
Gast #1143877
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.
Gast #1143879
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.
Gast #1143918
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
}
Angehängte Dateien:
Gast #1143957
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!
Gast #1143982
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
Gast #1144229
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.
Gast #1144234
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 
;-)
Gast #1144837
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.
Gast #1144887
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ß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.