www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pin Change Interrupt am Mega88


Autor: Jan Mueller (riker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin beim Empfang vom IR-Signalen auf Pin Change Interrupt 
angewiesen, da beide ext. Interrupts schon belegt sind.
Ich möchte aber nur auf fallende Flanken reagieren. Wie mache ich eine 
Abfrage, ob es eine fallende oder steigende Flanke war?

Oder muss ich mit einen Timer für die Bitzeit den PCI ausschalten und 
dann wieder Scharf machen?

Muss ich den PORT-PIN erst als Eingang initialisieren?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan Mueller wrote:

> Ich möchte aber nur auf fallende Flanken reagieren. Wie mache ich eine
> Abfrage, ob es eine fallende oder steigende Flanke war?

Den Zustand des Pins in der ISR abfragen.

> Oder muss ich mit einen Timer für die Bitzeit den PCI ausschalten und
> dann wieder Scharf machen?

Ist sicher sinnvoll.  Abschalten kann er sich ja selbst innerhalb
der ISR, zuschalten dann durch einen Timer.

> Muss ich den PORT-PIN erst als Eingang initialisieren?

Sinnvoller Weise ja (du willst ja von außen was eingeben), aber das ist
er ja nach einem Reset ohnehin.  Aber der PCInt funktioniert wohl auch
an einem Ausgang.

Autor: Jan Mueller (riker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Zustand abfragen:

Etwa so?:

ISR(PCINT2)
{
if(PIND & (1<<PIN6))
{
...    //Flanke war steigend
}else{
...    //Flanke war fallend
}
}

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schonmal über den ICP-Interrupt nachgedacht? Der liefert zusätzlich noch 
automatisch den Zeitstempel (Timer) für die Impulsmessung.

...

Autor: Jan Mueller (riker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich muss als Eingang PD6 benutzen. Die anderen sind alle schon 
belegt. (Platine ist vorgegeben und fertig!)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan Mueller wrote:

> Nein, ich muss als Eingang PD6 benutzen.

Das wäre AIN0.  Schade, AIN1 wäre einfacher, dann könntest du den
Komparator gegen die interne Bandgap benutzen. ;-)  Bei AIN0 brauchst
du irgendwas an AIN1 oder an einem der ADC-Pins, gegen das du
vergleichen kannst.

Ja, die Pin-Abfrage ist so OK.

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.