mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PCINT (Pin Change Interrupt) bei der Attiny / Mega Serie - Fragen


Autor: Rene K. (draconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gehe ich richtig in der Annahme das ein PCINT, also ein Pin Change 
Interrupt, wie der Name schon sagt, jegliche Flankenänderung als 
Interrupt nutzt?

Also sowohl eine steigende und eine fallende Flanke? Dies kann man 
leider auf Hardwareebene nicht so einstellen das er ausschließlich 
steigend oder fallend Detektiert so wie es bei einem normalen Externen 
Interrupt möglich ist?!

Wie löst ihr das dann Softwareseitig um eine Steigende / Fallende Flanke 
zu ermitteln? Einfach denn Interrupt kommen lassen und dann 
kontrollieren ob der Pegel am Pin high oder low ist?

Also so zum Beispiel (tiny44, PCINT1):

void PC_Int() org 0x0002
{
   if(PINA.B1 == 1)
   {
      //steigender Flanke
   } else {
     
      //fallende Flanke
   }
}


Oder kann man dies auch eleganter lösen?!

Autor: Rene K. (draconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rene K. schrieb:
> void PC_Int() org 0x0002
> {
>    if(PINA.B1 == 1)
>    {
>       //steigender Flanke
>    } else {
>
>       //fallende Flanke
>    }
> }

Das wären mir im übrigen schon wieder 5 Clocks die mir nach dem 
Interrupt fehlen würden:
;                 void PC_Int() org 0x0002
;                 if(PINA.B1 == 1)

        IN         R27, PINA+0
        SBRS       R27, 1
        JMP        L_PC_Int0

;                 } else {

        JMP        L_PC_Int1
L_PC_Int0:
;                 steigende Flanke}
L_PC_Int1:
;                 fallende Flanke}

Autor: B. G. (smarti)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ist nicht ganze deine Frage aber ggf. hilft es dir dennoch:

Beitrag "Problem mit Pin Change Interrupt und Timer Interrupt"

Grüßle

Autor: Micha H. (mlh) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rene K. schrieb:
> Also sowohl eine steigende und eine fallende Flanke? Dies kann man
> leider auf Hardwareebene nicht so einstellen das er ausschließlich
> steigend oder fallend Detektiert so wie es bei einem normalen Externen
> Interrupt möglich ist?!

Meine Datenblätter sagen was anderes.

Autor: Rene K. (draconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
B. G. schrieb:
> Hallo,
>
> ist nicht ganze deine Frage aber ggf. hilft es dir dennoch:
> Beitrag "Problem mit Pin Change Interrupt und Timer Interrupt"
>
> Grüßle

Danke für diesen Thread, werde ihn mir mal genauer anschauen. ;)

Micha H. schrieb:
> Rene K. schrieb:
>> Also sowohl eine steigende und eine fallende Flanke? Dies kann man
>> leider auf Hardwareebene nicht so einstellen das er ausschließlich
>> steigend oder fallend Detektiert so wie es bei einem normalen Externen
>> Interrupt möglich ist?!
>
> Meine Datenblätter sagen was anderes.

Zu was? Mein Datenblatt sagt mir dazu folgendes:

"When the PCIE1 bit is set (one) and the I-bit in the Status Register 
(SREG) is set (one), pin
change interrupt 1 is enabled. Any change on any enabled PCINT11..8 pin 
will cause an interrupt.
The corresponding interrupt of Pin Change Interrupt Request is executed 
from the PCI1
Interrupt Vector. PCINT11..8 pins are enabled individually by the PCMSK1 
Register."

Deshalb gehe ich davon aus das jeder Flankenwechsel gezählt wird. Das 
ist ja ebend meine Frage ;)

Autor: Micha H. (mlh) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Table 43. Interrupt 0 Sense Control
ISC01 ISC00 Description
0 0 The low level of INT0 generates an interrupt request.
0 1 Any logical change on INT0 generates an interrupt request.
1 0 The falling edge of INT0 generates an interrupt request.
1 1 The rising edge of INT0 generates an interrupt request.


Da Du keinen konkreten Controller genannt hast, habe ich einfach mal 
Mega48/88/168 rausgezogen.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Micha H. schrieb:
> Table 43. Interrupt 0 Sense Control
> ISC01 ISC00 Description
> 0 0 The low level of INT0 generates an interrupt request.
> 0 1 Any logical change on INT0 generates an interrupt request.
> 1 0 The falling edge of INT0 generates an interrupt request.
> 1 1 The rising edge of INT0 generates an interrupt request.
>
>
> Da Du keinen konkreten Controller genannt hast, habe ich einfach mal
> Mega48/88/168 rausgezogen.

und der Zusammenhang mit den PCINTs liegt wo?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Da Du keinen konkreten Controller genannt hast, habe ich einfach mal
>Mega48/88/168 rausgezogen.

Aber die falsche Stelle. Es geht um PCINT, nicht um INT0/1. Dort ist 
alles klar.

PCINT wird bei einer Änderung getriggert. Die Flanke muss manuell 
dedektiert werden.

MfG Spess

Autor: Micha H. (mlh) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Aber die falsche Stelle. Es geht um PCINT, nicht um INT0/1. Dort ist
> alles klar.

Das habe ich übersehen. In dem Fall muss die Auswertung der Flanke wohl 
selbst gemacht werden.

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.