PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt PCINT-Verständnisfrage



Step
25.08.2006, 20:01
Hallo,

ich habe mal ´ne Anfänger-Verständnisfrage zu PCINT bei den Maga48, 88 und 168.

Nachfolgendes Demo-Listing hier aus dem Board verstehe ich nicht ganz.
Um gezielt Fragen stellen zu können, hab ich Zeilennummern vorangestellt:

1: Config Portb = Input
2: Portb = &HF 'activate pull up
3: Enable Interrupts 'enable global ints
4: Enable Pcint0 'we enable pcint0 as this has pcint0-pcint7
5: On Pcint0 Isr_pcint0 'we jump to this label when one of the pins is changed
6: Pcmsk0 = &B00001111 'enable pcint0-pcint3 (portb.0-portb.3)

1: Sämlliche Pins des Port B als Eingang deklariert.
2: Sämtliche Pins des Port B mit Pullup-Wiederstand beschaltet
3: Global Interrupts erlaubt
So...jetzt geht´s los........
4: Wird hier nur PB0, also Pin 14 eingeschaltet oder ALLE PBs?
5: Hiernach wurde mit Pcint0 die kpl. "B-Bank" eingeschaltet!?

Ausserdem heisst doch "'we jump to this label when one of the pins is changed", daß egal welcher der B-Pins ein anderes Level bekommt immer die ganze "B-Bank" eine Änderung meldet.

Wie kann man hier den z. B. den Pin PB5 (Pin 19) getrennt abfragen?

Ratlosen Dank 8-[

Wolfram

linux_80
25.08.2006, 23:08
Hallo,

1. würde ich auch sagen

2. nein, da steht nur &HF, das sind nur die untern 4 Bit !

3. ja

4. für alle PBs, steht ja da PCint 0 - 7

5. hiermit wird festgelegt, welcher Programmteil aufgerufen wird, wenn der Interrupt auftritt, es muss also irgendwo weiter unten dieser Name als Label vorkommen, und mit Return beendet werden.

6. hier wird festgelegt, dass nur bei den unteren 4 Bit der Interrupt ausgelöst wird (siehe auch 2.).

Wenn der Interupt ausgelöst wird, muss man im Programm feststellen (Port auslesen), welcher Pin es wirklich war, um darauf richtig zu reagieren.

Step
25.08.2006, 23:27
Hallo,

vielen Dank, ist nun ETWAS klarer....einen hab ich aber noch:

Punkt 1 bis 3 und Punkt 5 ist klar.
Punkt 4 leider nicht:
Ich unter Pkt. 4 deklariere ich Pcint0.
Pcint0 ist EIN spezieller Port - Pni 14.
Andererseits bedeutet "Enable Pcint0" daß, das Pcint0 bis Pcint7 eingeschaltet wurde!?
Das kapiere ich nicht!
Wenn Pcint0 doch präzise der Pin 14 ist, wieso ist er dann andererseits der komplette Port B??

Es scheint mir fehlt da heftig Background!


Wolfram

linux_80
25.08.2006, 23:50
Nicht verwechseln, den Interrupt der PCINT0 heisst, und der Pin PCINT0 !

Es gibt insgesamt 3 Interruptquellen die sich um die PCINTs kümmern, als Nr 0 - 2.

Jeder dieser PCINTx ist für einen ganzen Port zuständig, also der PCINT0 für PortB, einen PortA gibts ja nicht !

Wenn man also nun einen PinChange irgendwo am PortB feststellen will, muss man erstmal diesen aktivieren. (siehe Zeile 4)

Die nächste Stufe ist, den Pin festzulegen, der den IRQ auslösen darf, das macht man im PinChange Mask Register kurz PCMSK0 (siehe Zeile 6 oben).
Es können auch mehr sein als nur ein Pin, das einen IRQ auslösen darf, evtl. auch alle Pins, wie oben im Beispiel, die unteren 4.

Step
26.08.2006, 00:04
Hallo,

aha...jetzt schwant mir so einiges....hoffe ich.
Werde am WE mal Testroutinen proggen um zu sehen ob ich es WIRKLICH kapiert habe!
Wenn nicht, melde ich mich noch einmal!

Vielen Dank für deine Hilfe!

Wolfram