Forum: Mikrocontroller und Digitale Elektronik AVR ICR1 am AT90CAN 8 PWM Signale auswerten (RC) mit MUX CD4051BE


von Fabian V. (fabian29)


Angehängte Dateien:

Lesenswert?

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
von Fabian V. (fabian29)


Lesenswert?

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