mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RC5 und ATMEGA168


Autor: Lurch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CKDIV8 bei den Fuse-Bit's abgeknipst ?

Autor: Lurch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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>

Autor: Lurch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lurch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ....

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"if( (rc5_bit ^ PIND) & 1<<PD2 )"

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Lurch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Netzteil (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: JojoS (Gast)
Datum:

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

Autor: Lurch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lurch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.