www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ungewollter Reset AtMega128


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Kaiser (opa-peter)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast Du auch den Interrupt flag disabled?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich schalte keine Interrupts mehr frei.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@wt
Ja, ich schalte nichts mehr ein.

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ferndiagnose wird immer schwieriger.

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

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?
int main(){
      
  io_init();  

  cli();

  while(1){


  }
    
  return 0;
}

void io_init(void)
{
   
  DDRC &= ~(1 << DDC0);                      // switch 0 (breakpoint)
  DDRC &= ~(1 << DDC1);                      // switch 1
  DDRC &= ~(1 << DDC2);                      // switch 2
  DDRC &= ~(1 << DDC3);                      // switch 3
  DDRC &= ~(1 << DDC4);                      // rotary encoder 0
  DDRC &= ~(1 << DDC5);                      // rotary encoder button

  DDRD &= ~(1 << DDD0);                      // rotary encoder 1


  //Pull Ups
  PORTD |= (1 << DDD0);
  PORTC |= (1 << DDC4);
  PORTC |= (1 << DDC5);
          
}

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prozesor beschaltung ist auch wichtig

Autor: Thomas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bitteschön.

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

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

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja mache ich, wird aber später...

Autor: wt (Gast)
Datum:

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

Autor: Thomas (Gast)
Datum:

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

Was hast du denn im Verdacht?

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 
;-)

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.