Forum: Mikrocontroller und Digitale Elektronik RC5 und ATMEGA168


von Lurch (Gast)


Angehängte Dateien:

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

von Steffen (Gast)


Lesenswert?

CKDIV8 bei den Fuse-Bit's abgeknipst ?

von Lurch (Gast)


Lesenswert?

Hi,

das CKDIV8 Fuse-Bit ist auf 1 gesetzt. Habe gerade testweise mal das
Bit auf 0 (Divide clock by 8= aktiv) gesetzt, hatte nur zur Folge dass
die ser. Übertragung nicht mehr korrekte Zeichen überträgt.

Arne

von JojoS (Gast)


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>

von Lurch (Gast)


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

von Lurch (Gast)


Lesenswert?

Habe nochmal ein paar Fernbedienungen getestet, so ziemlich alle Philips
Geräte, leider wird wieder kein gültiger RC5 empfangen.

Ich geh am Stock ....

von emil (Gast)


Lesenswert?

"if( (rc5_bit ^ PIND) & 1<<PD2 )"

von emil (Gast)


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)

von Lurch (Gast)


Lesenswert?

Hi emil,

der Port ist auf Eingang gestellt:

DDRD &= ~(1<<PD2);
PORTD |= (1<<PD2);

Any Ideas? Habe jetzt so ziemlich alles auspobiert. Gibt es andere
Programmbeispiele zu RC5 als das von Peter Danneger?

Arne

von Netzteil (Gast)


Lesenswert?

Schau noch mal nach anderen Fernbedienungen. Ich hatte ein ähnliches
Problem und letztendlich lag es daran, dass die FBs einfach gar kein
rc5 gesendet hatten (obwohl Philips draufstand).

Schönen Gruß

von JojoS (Gast)


Lesenswert?

ist beim Kompilieren das richtige Device eingestellt? Der 168er hat
andere Interruptvektoren (2-Word lange statt 1 Word wie bei 48/88).

von Lurch (Gast)


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

von Lurch (Gast)


Lesenswert?

Falls es interessiert, den Fehler habe ich vorgestern entdeckt. 2
Variablen waren anstelle von 16 bit integer nur als uint8_t deklariert.
Aua, 10 x mit Stirn auf die Tischkante schlag

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.