Flankenerkennung in der ISR, Timer 0

Gast #1459048
Lesenswert?

Hallo,
ich benutze den Timer0 als Rechteckgenerator am Pin PB3.
Wie kann ich in der ISR von Timer0 überprüfen, ob die Flanke jetzt oben 
oder unten ist? So wie ich verstanden habe wird die ISR bei steigender 
und bei fallender Flanke aufgerufen. Könnte man vielleicht dafür eine 
Variable Flanke unten/oben jedes mal umschalten, wenn man weiss welche 
zuerst
kommt? Ich habe leider kein Oszi zur Hand, bit_is_set(PINB, PB3) 
funktioniert nicht.



void timer_0_ini( void )
{
  TCNT0=0x00;
  TIMSK|=(1<<OCIE0);
  TCCR0= (1<<WGM01) | (1<<COM00) | (1<<CS01) | (1<<CS00);
  OCR0 =0;
}

ISR(TIMER2_OVF_vect)
{
   Flanke oben/unten?
}
Gast #1459080
Lesenswert?

Danke,
es soll heisen:


ISR(TIMER0_COMP_vect)
{
...


Pin auslesen geht nicht!? In dem Datenblatt steht, wenn COM01 oder COM00 
gesetzt, normale Funktion wird überschrieben, wahrscheinlich deswegen 
funktioniert Pin auslesen nicht.

Welche Flanke wird zuerst in der ISR abgefangen?
Gast #1459110
Lesenswert?

>ISR(TIMER0_COMP_vect)
>{
>...
>
>Pin auslesen geht nicht!? In dem Datenblatt steht, wenn COM01 oder COM00
>gesetzt, normale Funktion wird überschrieben, wahrscheinlich deswegen
>funktioniert Pin auslesen nicht.

>bit_is_set(PINB, PB3)

Was hat PB3 bei welchem AVR mit Timer0 zu tun?
Gast #1459126
Lesenswert?

Per HW toggeln macht wenig Sinn, wenn in der zugehörigen ISR mit 
gleicher Aufruffrequenz der Status abgefragt wird.

Da wäre es sinnvoller den Portpin gleich in der ISR per SW zu toggeln, 
dann kennt man auch den Zustand des Pins.

Nur stehen für die ISR < 64 Takte zur Verfügung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren