Forum: Compiler & IDEs Interrupts Atmel mega 16


von steve (Gast)


Lesenswert?

Hi
 ich muss ein interrupt schreiben das immer nach einer bestimmten Zeit
 eine Prozedur aufruft um zwei radencoder abzutasten das hab ich mal
 so verwirklicht:

 outp((1<<WGM01)|(1<<CS02)|(1<<CS00),TCCR0);
 outp((1<<OCIE0),TIMSK);
 outp(121,OCR0);

 Mein Problem ist dass ich im Interrupt nur auf den einen Radencoder
 zugreifen kann aber der andere nicht abgefragt werden kann woran kann
 das denn liegen oder wie müsste mein Code richtig heißen

von Alex (Gast)


Lesenswert?

Warum legst du die beiden Radencoder nicht einfach auf INT0 bzw. INT1.
Bei Pegelwechsel bedingt durch die Radencoder wird automatisch ein
Interrupt ausgelöst. In der ISR muss dann nur eine entsprechende
Variable inkrementiert werden.
Finde ich besser, als Polling mittels eines Timers.

Gruss, Alex

von OldBug (Gast)


Lesenswert?

Hi!

>Mein Problem ist dass ich im Interrupt nur auf den einen Radencoder
>zugreifen kann aber der andere nicht abgefragt werden kann woran kann
>das denn liegen oder wie müsste mein Code richtig heißen

Das Versteh ich nicht so ganz. Wo sind denn die Encoder angeschlossen?
Btw: outp/inp etc. sind deprecated, siehe:

http://www.nongnu.org/avr-libc/user-manual/deprecated.html

Gruß,
Patrick...

von Peter D. (peda)


Lesenswert?

"Mein Problem ist dass ich im Interrupt nur auf den einen
Radencoder..."

Woher soll denn das einer wissen ?
Ohne den Code zu sehen, kann das keiner.

Hast Du auch beide angeschlossen ?


Peter

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.