Hallo, ich kämpfe nun schon eine ganze Weile mit einem Problem. Ich versuche über den ICR1 am AT90CAN 8 PWM Signale auszuwerten. Vor dem Pin habe ich einen Muxer Baustein (CD4051BE) geschallten, der abwechselnd bis zu 8 Kanäle vom RC Empfänger durchschaltet. Die ISR (TIMER1_CAPT_vect) ruft eine Funktion auf, welche die Zählerstände auswertet und den Muxer schaltet. ISR (TIMER1_CAPT_vect) { icp_call(); } Je nach Flanke wird der Wert des ICR1 ausgewertet und in ein Array geschrieben. Zudem wird noch ein FLAG in der 8Bit Variable "result" gesetzt. dies benötige ich zum auswerten eines kompletten Empfangszyklus. int icp_call() { cli(); if (EDGE == negative) { diff[mux_CH] = ICR1 - start[mux_CH]; EDGE = positive; TCCR1B |= (1<<ICES1); result |= (1<<mux_CH); PORT_MUX &= 0xF8; mux_CH++; PORT_MUX |= mux_CH; if (mux_CH == max_CH) { mux_CH = MUX_CH0; PORT_MUX &= 0xF8; } } else if( EDGE == positive) { start[mux_CH] = ICR1; EDGE = negative; TCCR1B &= ~(1<<ICES1); } sei(); return 0; } Wenn man sich nach einem Durchlauf den Inhalt von diff[i] ansieht, dann stellt man fest, dass nur zwei Kanäle ausgewertet werden. für i = 0 und i = 2 erhält man exakt die selben Werte. Genau so für i = 1 und i = 3. Es scheint als ob hier irgendein Bit Dreher enthalten ist. Leider sehe ich diesen nicht (Betriebsblind). Kann von euch jemand meinen Fehler sehen? (Kompletter Code im Anhang) Danke für eure Hilfe. Gruß Fabian
:
Verschoben durch User
Manchmal ist es einfach besser man geht noch einmal in Ruhe alles durch. Es hat sich herausgestellt, dass ich am Anfang aus Bequemlichkeit nur den Pin 'A' des Muxers angeschlossen habe. Es bestätigt sich mal wieder: Kaum macht man es richtig - schon funktioniert es! Trotzdem danke!
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.