RC5 und ATMEGA168

Gast #404207
Lesenswert?

Hallo,

ich versuche mit einem ATMEGA168 und einem SFH 5110-36 IR-Empfänger RC5
Signale zu decodieren. Ich habe mich an das Code-Beispiel von Peter
Danneger gehalten, bekomme aber keine gültigen RC5 Codes. Es werden
zwar Bits empfangen, es sind aber keine gleichen Bit-Muster die bei
mehrmaligen Drücken einer Taste auf der Fernbedienung empfangen werden
(vom Repeat-Bit abgesehen). Der SFH 5110 ist wie im Datenblatt
angegeben mit Kondensator und Widerständen beschaltet um Störungen aus
der Spannungsversorgung zu minimieren.

Die Vermutung liegt nahe, dass das Timer-Intervall nicht stimmt, kann
aber keinen Fehler finden. Der ATMEGA ist extern mit 3.68 MHZ getaktet,
F_CPU ist korrekt eingestellt, serielle Übertragung an den PC
funktioniert auch. Jemand eine Idee oder ein funktionsfähiges
RC5-Beispiel für den ATMEGA88 o. ATMEGA168? Suche schon seit Tagen den
Fehler, komme aber einfach nicht weiter. Hoffe jemand weiss Rat.

Gruß
  Arne
Angehängte Dateien:
Gast #404210
Lesenswert?

die Receive Funktion steht in dem Code Beispiel ausserhalb der
Endlosschleife. Ich habe den PeDa Code auch mal ausprobiert und es hat
sofort geklappt. Da bleibt noch die Standardfrage ob du sicher bist das
auch wirklich RC5 gesendet wird. Ich habe noch eine alte FB von einem
Uralt Philipps CD Player. Oder programmierbare mit voreingestellten
Codes müssten auch gehen.

hier die main loop die ich zum testen benutzt hatte:

<C>
  for(;;)
  {        // main loop
    cli();
    i = rc5_data;      // read two bytes from interrupt !
    rc5_data = 0;
    sei();
    if( i )
    {
      PORTC = ~i;        // LED output
      putchar(( i >> 11 & 1) + '0');  // Toggle Bit
      putchar(' ');
      itoa( i >> 6 & 0x1F, s, 10);  // Device address
      puts( s );
      putchar(' ');
      cmd = (i & 0x3F) | (~i >> 7 & 0x40);
      itoa(cmd, s, 10); // Key Code
      puts( s );
      CheckCmd(cmd);  // Kommando auswerten
      puts( "\n\r" );
    }
    _delay_ms(10.0);
  }
</C>
Gast #404211
Lesenswert?

Hi JojoS,

die Receive Funktion ist mir in dem Code Beispiel in die falsche Zeile
gerutscht, uppps. Im tatsächlichen Code steht der Aufruf aber in der
Endlosschleife, kann daher aber nicht die Ursache sein. Als
Fernbedienung habe ich ne Universal "One for all" benutzt. Kann
vielleicht wirklich sein, dass die bei mir programmierten Geräte keine
RC5 sind, habe aber auch mal ein paar Codes für Philips TV's
verwendet. Teste das gleich sicherheitshalber nochmal...

Arne
Gast #404214
Lesenswert?

hast du den eingang (pind.2 in deinem fall?) tatsächlich auch auf
"eingang" eingestellt? pull-up eingeschaltet?

bei mir fuktioniert der code von peter in einem mega8 und in einem
mega48 einwandfrei.

auch die korrekten defines nicht fergessen:

#define  xRC5_IN    PIND
#define  xRC5    2      // IR input low active
#define  XTAL    3.68e6
#define RC5TIME   1.778e-3    // 1.778msec
#define PULSE_MIN  (XTAL / 512  RC5TIME  0.4 + 0.5)
#define PULSE_1_2  (XTAL / 512  RC5TIME  0.8 + 0.5)
#define PULSE_MAX  (XTAL / 512  RC5TIME  1.2 + 0.5)
Gast #404218
Lesenswert?

Hi,

als Vetcor ist ISR(TIMER0_OVF_vect) angegeben. Steht so in der
AVR-Doku.

Ich glaube das beste ist wenn ich mir einen ATMEGA8 und einen anderen
IR-Empfänger besorge und dort erstmal teste ob der RC5 Empfang
funktioniert. Daten kommen ja an, rc5_tmp ist mit 1 gefüllt, allerdings
wird nie ein gültiger RC5 Code daraus, an der FB kann es auch nicht
liegen, habe 5 verschiedene versucht und auf der Universal-FB alle
Philips Geräte getestet.

Arne

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