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
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.
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.
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.
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.
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?
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!
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.
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
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.
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
;-)
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.
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ß