www.mikrocontroller.net

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


Autor: Andi (Gast)
Datum:

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

Autor: Profi (Gast)
Datum:

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

Autor: Andi (Gast)
Datum:

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

Autor: Andi (Gast)
Datum:

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

Gruß
Andi

Autor: Andi (Gast)
Datum:

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

Autor: Andi (Gast)
Datum:

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

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.