Forum: Mikrocontroller und Digitale Elektronik Probs mit Pin Change Interrupt!


von Andi (Gast)


Lesenswert?

Hallo!

Langsam bin ich am ver(zweifeln)!
Ist der PA7 ein Mister Besonders?
Ich benutze beim Tiny26 den PA7 zum erfassen einer Haltezeit.
PA7 ist als Input mit Pullup eingestellt und anfangs high.
Wird er auf Masse geschaltet, reagiert darauf der Pin Change Interrupt
was bemerkt, das ein Pegelwechsel war und darauf hin ein Register
aktuallisiert.
Aber seltsammer weise wird kein Pin Change Interrupt ausgeführt, wenn
der Pegel an PA7 von low auf high geht.
Auch bei einem erneuten Wechsel von high auf low keine Ausführung des
Pin Change Interrupt.
Egal, wie oft ich an PA7 einen Wechsel mache.
Ich benutze noch ADC an ADC4 (PA5) mit AVCC als Spannungsquelle.
Liegt es etwa daran?
Habe was darüber gelesen, das beim Analog Comparator PA7 und PA6
benutzt wird, aber das ist hier nicht der Fall.
Während des indirekten Scans an PA7 wird kein ADC ausgeführt (Single
Mode) und es wird vorher darauf gewartet, bis der ADC fertig ist.
Bisher ist mir dieses Prob nicht aufgefallen da ich in einem
Timer-Prog
immer eine LED an PB3 alle 250ms aus oder eingeschaltet habe was mir
als
Kontrolle und Zeitmessung diente.
Kaum mach ich das weg, geht das mit dem PA7-Change nicht.
Habe mit 2 Tiny26 schon alles mögliche versucht und schmeiße alle
Tiny26 bald in den Müll.

Gruß
Andi

von Profi (Gast)


Lesenswert?

Hast Du die Flanke, bei der der Interrupt ausgelöst werden soll,
umgestellt (high->low nach low->high)?
Hast Du den Interrupt wieder scharf gemacht, nachdem er ausgelöst
wurde?

von Andi (Gast)


Lesenswert?

Muß man die Flanke einstellen?
Ich verwende nicht den INT0.
Laut DOC kommt doch automatisch bei jedem Wechsel ein PCIRQ.
Der Interrupt wird doch nach einem RETI wieder scharf gemacht, I-Bit in
SREG wird gesetzt.
Das Flag-Bit, PCIF in GIFR, wird nach dem Sprung in den PCIRQ sofort
wieder zurück gesetzt (0).

Ich muß noch sagen, das der Pin PA7 und PA6 als Input UND Output
verwendet werden.
Auf Input wird so umgestellt was zu 99,99% der Fall ist:
 sbi   porta,7    ;Pullups aktivieren
 cbi   ddra,7     ;Datenrichtung auf Input

Auf Output wird so umgestellt:
 sbi   ddra,7     ;Datenrichtung auf Output
 cbi   porta,7    ;Pullups aktivieren

Mir ist aufgefallen, das wenn das Prog nach einer bestimmten Wartezeit
mit dem obigen Code auf Output umschaltet und kurz darauf wieder auf
Input, der Pin Change auf PA7 oder PA6 nicht reagiert.
Solange das Prog nicht auf Output und Input umschaltet, gehts mit dem
PCIRQ.
Ich stell das mal um und schaun ma mal...
Vielleicht braucht das ja die richtige Reihenfolge.

Gruß
Andi

von Andi (Gast)


Lesenswert?

Meinte natürlich folgendes zum Output:
 sbi   ddra,7     ;Datenrichtung auf Output
 cbi   porta,7    ;Leitung an PA7 auf GND

Gruß
Andi

von Andi (Gast)


Lesenswert?

So, jetzt ist es Eindeutig.
Keine Reaktion bei einem Pegelwechsel an PA6 und PA7 im Tiny26.
WAS SOLL DAS?
SCH... DOC!!!
Habe in dem Pin Change Interrupt Programm ne Sichthilfe eingebaut
welche für ca. ne halbe Sekunde eine LED ausschaltet und danach wieder
ein.
An den Pins PB0 - PB6 (PB7 ist ja Reset) und PA3 gehts wunderbar aber
natürlich an PA6 und PA7 nicht obwohl in der DOC drin steht, das diese
beiden beim PCIE1 dabei sein sollen.
Habe es mit 4 Tiny26 probiert, einer war noch unangetastet, und überall
das gleiche.
Weis jemand, warum das so ist?

Gruß
Andi

von Andi (Gast)


Lesenswert?

So, müßte mich jetzt einigermaßen beruhigt haben, da es jetzt geht.
Standardmäßig ist an PA6 und PA7 der Analog Comparator, AIN0 und AIN1,
aktiv wodurch natürlich die Pin Change-Funktion an PA6 und PA7
deaktiviert ist da es sich ja um eine "Alternate Function" handelt.
In der ganzen DOC zum Tiny26 gibt es eine Zeile, die darauf hinweist,
das der Analog Comparator bei 0 aktiviert ist und zum abschalten eine 1
braucht. Grrrrrrrr
Schaltet man den AC nicht ab kann man trotzdem die Pin-Pegel auslesen
aber es geht kein PCINT an PA6 und PA7.
Das Bit "ACD" (Analog Comparator Disable, Bit 7) im Register "ACSR"
setzen (1) = AC aus, initial Value = 0 also an.
Vielleicht hilft es noch anderen weiter die sich auch wundern, warum
keine PCINT-Funktion an PA6 und PA7 geht.

Gruß
Andi

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.