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?
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.
Den Zustand abfragen:
Etwa so?:
ISR(PCINT2)
{
if(PIND & (1<<PIN6))
{
... //Flanke war steigend
}else{
... //Flanke war fallend
}
}
Schonmal über den ICP-Interrupt nachgedacht? Der liefert zusätzlich noch automatisch den Zeitstempel (Timer) für die Impulsmessung. ...
Nein, ich muss als Eingang PD6 benutzen. Die anderen sind alle schon belegt. (Platine ist vorgegeben und fertig!)
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
Bitte melde dich an, um einen Beitrag zu schreiben.