Empfänger Impulse - Hilfe

Gast #179203
Lesenswert?
• ▲
▼
Hallo,

ich möchte gern die Empfängerimpulse meiner Futaba Anlage auswerten.
Signalleitung auf INT0.

Ich starte bei steigender Flanke einen Timer.
Setze die Flanke auf fallend.
Bei fallender Flanke möchte ich den Timer stoppen,
den Wert auslesen, und dann wieder fallende Flanke.

Im AVR Studio klappt die hälfte mit der steigende Flanke.
Aber wenn ich wieder PortPin2 auf low setze, dann passiert irgend ein
Mist.

Der Timer wird geresetet, das ISC00 Bit wird kurz gesetzt, dann
aber sofort wieder gelöscht.
Dann läuft der Timer wieder weiter.

Also bin ich irgendwie nur sehr kurz in der 2. INT0 Schleife.

Ich vermute, das ich anscheinend falsch auf das MCUCR teste.
Oder ich setze das MCUCR falsch.

Vielleicht kann sich jemand den code mal ansehen?!

Gruß Toby

Kann mir da vielleicht mal wer weiterhelfen?
Angehängte Dateien:
Gast #179204
Lesenswert?
• ▲
▼
Hallo, nochmal,

ich hatte auch schon diese Variante, aber dachte, ich wäre zu lang in
der Interrupt Routine.

SIGNAL(SIG_INTERRUPT0)
{
  if( MCUCR = 0x03) // Testen auf steigende Flanke
  {
  TCNT2 = 0; // Timer Reset
  TCCR2 = _BV (CS21) | _BV (CS20); // Timer2 1/64 MCU start
  MCUCR = 0x02; //_BV (ISC01); // INT0 fallende Flanke
  return;
  }

  if( MCUCR =0x02 ) // Testen auf fallende Flanke
  {
  TCCR2 = 0x00; // Timer2 Stoppen
  Pulsdauer = TCNT2; // Timer Wert = Pulsdauer
  MCUCR = 0x03; //_BV (ISC01) | _BV (ISC00); // INT0 auf steigende
Flanke
  return;
  }
}

Ich schätze, es liegt an dem testen.

Wie kann ich denn wohl auf einzelne Bits testen?

Aus einem anderem Beitrag :
""
Bitmanipulationen schreibt man in C so:

#define mybit0 1 // Bitnummer (0)
#define mybit1 1 // Bitnummer (1)
#define mybit "2...7"  1 // Bitnummer (2...7)

char myvar;

myvar |= 1 << mybit0; // Setzen

myvar &= ~(1 << mybit0); // Löschen

myvar ^= 1 << mybit0; // Invertieren

if( myvar & (1 << mybit0)) // Testen
""

Kann ich auch testen, ob das Bit nicht gesetzt ist?

So ????
if( myvar & ~(1 << mybit0))

Und wie teste ich, ob zwei Bits gesetzt sind?

So ????
if( myvar & (1 << mybit1) && (1 << mybit0))
Gast #179205
Lesenswert?
• ▲
▼
Hi,

diese beiden Anweisungen sind nicht richtig.

 if( MCUCR = 0x03) // Testen auf steigende Flanke
 if( MCUCR =0x02 ) // Testen auf fallende Flanke

Du weisst MCUCR den Wert = 0x03 und spaeter 0x02 zu. Eine
Gleichheitsabfrage macht man so z.B.
if( MCUCR == 0x03) // Testen auf steigende Flanke

Mfg

Dirk

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