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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.