Forum: Mikrocontroller und Digitale Elektronik Gerätesteuerung mit IR-Fernbediehnung Atmega8 und TSOP4836


von Falkner F. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich bin neu hier im Forum. Vielen Dank schon einmal für eure 
Unterstützung. Soeben habe ich mein Steckbord verdrahtet für einen 
ersten Versuchsaufbau. RS232 für die Terminalausgabe und das Debugging 
läuft. Nun habe ich an Pind2 einen TSOP4836 angeschlossen. Mit meinem 
Logik-Prüfer sehe ich das wenn ich auf eine X-beliebige Taste der 
Fernbedienung drücke das dieser auf LOW pulsiert. Leider wird mir die 
Adresse bzw. das Commando nicht angezeigt. Ich sitze jetzt seit ein paar 
Stunden davor und komme leider nicht weiter. Das Manchesterverfahren 
etc. habe ich alles verstanden. Was noch offen ist, kann ich für einen 
Test jede beliebige Fernbedienung benutzen oder muss ich dafür eine 
Universalfernbediehnung besorgen? Das habe ich noch nicht 
herausgefunden. Aber jenes würde einiges erklären :-). Ärgerlich wärs 
jedenfalls. Den Code poste ich mit dazu. Ich danke jedem der mir hier 
ein paar wertvolle Tipps geben kann, damit ich mein Projekt zu Ende 
führe. Danke für Eure Mithilfe und ein schönes Wochenende.

Liebe Grüße

Falkner

--Code Abschnitt--

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 2400

Config Rc5 = Pind.2
Portd.2 = 1

Enable Interrupts

Dim Address As Byte
Dim Command As Byte
Dim Flag As Word
Flag = 1

Do
   Getrc5(address , Command)
   Print Address
   Print Command

   If Flag = 1 Then
      Print "Wait for Command"
      Flag = 0
   End If

   If Address <> 255 Then
      Reset Command.7
      Cls
      Print "Addresse: " ; Address ; " Commando: " ; Command
      Flag = 1
   End If
Loop

End                                                         'end program

von Stephan S. (plonk)


Lesenswert?

Meine Bascom-Zeiten sind schon länger vorbei, aber ich meine zu wissen, 
dass der Befehl Getrc5 nur das RC5-Protokoll decodieren kann. Das 
verwenden aber längst nicht alle IR-Fernbedienungen. Hast du das 
überprüft?
Zeig uns zusätzlich vielleicht auch ein Sample deiner Fernbedienung am 
TSOP, dann sind genauere Angaben möglich.

MfG

: Bearbeitet durch User
von Falkner F. (Gast)


Angehängte Dateien:

Lesenswert?

Das ging jetzt aber Flott. Vielen Dank dafür. Ich habe mich an das 
Beispiel der Hilfe gehalten. Keine der aufgeführten Fernbedienungen 
ging. Doch sie gehen eigentlich so wie ich das messen kann mit dem 
Logikprüfer. Da sehe ich das die LED am Prüfer blinkt. Dann gehe ich mal 
davon aus, dass der TSOP auch das macht was er soll. Ich denke auch das 
es an der Funktion liegt. Gibt es den einen eleganteren Weg? Der 
Versuchsaufbau ist jetzt mit einem Atmega8 soll aber später durch einen 
Attiny ersetzt werden. Was will ich machen? Ich will wenn das auslesen 
klappt genau auf eine Taste abfragen und damit später eine Last schalten 
über ein Relais. Danke für eure Mithilfe.

Liebe Grüße

Falkner

von lohmann (Gast)


Lesenswert?

Solange du nicht sicher weißt, ob eine der Fernbedienungen RC5 sendet, 
ist das stochern im Nebel. Hat du nur einen Logiktester oder auch ein 
Oszilloskop? Wenn Oszilloskop, dann poste ein Screenshot von dem , was 
der TSOP ausgibt.

Anhand der im Netzt verfügbaren Beschreibungen des RC5 Protokolls kann 
man dann entscheiden, ob es wirklich RC5 ist.

Es gibt auch eine rc5send Kommando. Damit kannst du dir selbst eine FB 
aufbauen und mit dem Atmega empfangen. Würde ich als weiteren Test 
empfehlen.

von Stephan S. (plonk)


Lesenswert?

Der TSOP decodiert nichts. Solange die Trägerfrequenz der Pakete im 
Rahmen liegt, gibt der (fast) alles aus, was reinkommt.
Bei deinen Fernbedienungen kann ich schonmal sagen: die beiden von 
Samsung habe ich auch, die verwenden nicht das RC5-Protokoll.
Falls du kein Oszilloskop/Logikanalysator hast oder keinen zweiten µC, 
um einen Sender zu bauen, dann wird es schwierig. Alternativ decodiere 
doch "zu Fuß", d.h. ohne der Bascom-Funktion. Da wäre es aber auch von 
Vorteil, das Protokoll zu kennen.

MfG

: Bearbeitet durch User
von Falkner F. (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Du hast recht die getrc5(address,command) Funktion blockiert alles. 
Kommentiere ich die aus ist alles gut. Sobald ich diese wieder 
einzementieren geht nichts mehr. Irgendwie scheint er mit dem Signal 
nicht zurecht zu kommen. Die Fragen ist halt wenn ich das mit PWM machen 
oder AC/DC Wandler auf was ich dann prüfen soll? Ich habe soeben eine 
alte Schweiger Universalfernbedienung gefunden. Geht leider auch nix. 
Hast du ne Idee ob ich das mit der getadc() Funktion mal einlesen soll 
und der soll mir dann mal auspacken was er damit decodiert?

Oh je was habe ich mir da nur angetan?
Danke für deinen Support.

Liebe Grüße

Falkner

von lohmann (Gast)


Lesenswert?

Falkner F. schrieb:

Das Bild zeigt kein RC5. Nach 
http://www.sprut.de/electronic/ir/rc5.htm#2 sieht das anders aus.

von Falkner F. (Gast)


Lesenswert?

Du hast Recht. Das Signal wird oben auch bisschen überlagert. Ich habe 
für solche Fälle 4 von der Sorte gekauft. Das jetzt alle defekt sind 
kann ich fast nicht glauben. Das Kennbild aller ist ähnlich. Ich hab es 
jetzt noch einwenig feiner hinbekommen. Aber wenn man auf einer Taste 
dauer drauf bleibt dann kommt oben ein vertikaler Stick im Rechteck. In 
der Zwischenzeit habe ich versucht das Signal einzulesen via ADC. Und 
das geht einwanfrei. Drücke ein paar Tasten dann kommen unterschiedliche 
Werte von 0-1023. Aber wie gesagt das ist dann eher nach dem 
Zufallsprinzip. Sauberer wäre die andere Funktion wenn es den mal 
klappen würde. Ich habe auch TSOP4838er gekauft. Die haben ein ähnliches 
Bild allerdings auf einer 38KHZ Frequenz. Es ist zum Mäusemelken. Aber 
das hast du mir ja schon einwenig angedeutet. Scheint wohl ich baue mir 
das nach allbewerter Manier mit Sender Empfänger mit der alten guten TTL 
Technik. Nix mit flexibler Programmierung diesmal. Ok. Danke dir für 
deinen Support. Und nochmal ein schönes Wochenende.

Liebe Grüße

Falkner

von Stephan S. (plonk)


Lesenswert?

Naja, so schnell würde ich persönlich nicht die Flinte ins Korn werfen.
Dein Oszi-Bild zeigt leider nicht die ganze Wahrheit. Kriegst du das 
besser hin? Also mit definierten Pegeln (etwas mit den 
Triggereinstellungen spielen) und mit einer ausreichenden Zeit für die 
Horizontalablenkung, sodass mindestens ein ganzer Block zu sehen ist.
Mit diesen Infos könntest du dann das entsprechende Protokoll 
decodieren.
Aber die Methode per ADC ist Unfug. Kreativ aber nicht zielführend ;-)

MfG

: Bearbeitet durch User
von Wolfgang A. (Gast)


Lesenswert?

Falkner F. schrieb:
> Scheint wohl ich baue mir das nach allbewerter Manier mit Sender
> Empfänger mit der alten guten TTL Technik

Stephan S. schrieb:
> er TSOP decodiert nichts. Solange die Trägerfrequenz der Pakete im
> Rahmen liegt, gibt der (fast) alles aus, was reinkommt.

Die TSOP machen nur die Pegelanpassung und filtern den 36..38kHz 
Hilfsträger wieder raus. Die Datenbits kommen am Empfänger ziemlich 
genau so raus, wie man sie beim Sender auf den 38kHz-Träger 
draufmoduliert hat.

Das Übertragungsprotokoll ist im OSI Modell über der 
Bitübertragungsschicht angesiedelt. Warum willst du da mit TTL-Gräbern 
rummachen? Das ist alles so langsam, dass du das gut einem µC überlassen 
kannst.

von Jojo S. (Gast)


Lesenswert?

Falkner F. schrieb:
> Du hast Recht. Das Signal wird oben auch bisschen überlagert.

Das sieht so aus weil das Signal nicht periodisch ist, mit dem einfachen 
Oszi kommst du da nicht weit. Ideal wäre ein Speicheroszi oder min ein 
Logic Analyzer. Als McGyver Lösung gibt es noch die Soundkarte zu 
missbrauchen, suche mal nach 'Soundkarte Oszilloskop'.
Dann gibt es hier in der Artikelsammlung noch den IRMP Artikel. Ist ein 
Universal IR Empfänger, zwar in C aber in dem Artikel stehen viele 
brauchbare Infos. ZB das die meisten FB heute den NEC Code verwenden.
In Bascom kannst du versuchen das Signal mit konstanter Rate abzutasten, 
die Nullen und Einsen in einem Array zu speichern und das auf der 
seriellen ausgeben. Da hast du allerdings nicht viel Speicher im Mega8.

von Forengast (Gast)


Lesenswert?

Jojo S. schrieb:
> Ideal wäre ein Speicheroszi oder min ein Logic Analyzer.

Einen brauchbaren Logikanalysator für soetwas gibt es mittlerweile für 
unter 7€ bei ebay (z.B. 141803548716). Das kann doch nicht das Problem 
sein.

von Jojo S. (Gast)


Lesenswert?

Forengast schrieb:
> Einen brauchbaren Logikanalysator für soetwas gibt es mittlerweile für
> unter 7€ bei ebay (z.B. 141803548716). Das kann doch nicht das Problem
> sein.

Nur wenn man Samstag Abend da sitzt und etwas machen möchte... Außer 
Dschungelcamp gucken meine ich.

von Stephan S. (plonk)


Lesenswert?

Jojo S. schrieb:
> In Bascom kannst du versuchen das Signal mit konstanter Rate abzutasten,
> die Nullen und Einsen in einem Array zu speichern und das auf der
> seriellen ausgeben. Da hast du allerdings nicht viel Speicher im Mega8.

So ähnlich habe ich das gerade in einem Kommunikationssystem gemacht 
(ohne serielle Schnittstelle...). Statt eines Arrays aber ein Integer, 
der reicht völlig mit etwas Bitschubserei. Acht MSP430 mit je 1kB Flash 
kommunizieren so mittels IR und einer macht sogar noch ein paar Dinge 
nebenher. Also sollte der ATmega8 mit seinen 8kB das alles locker in den 
Speicher bekommen ;-)

MfG

: Bearbeitet durch User
von Rudi Einstein (Gast)


Lesenswert?

Hallo Falkner,
dieser Sketch läuft bei mir für RC5 auf einem 2313 inclusive RS232 
Ausgabe und dürfte auf einem MEGA8 auch fehlerfrei laufen.
Gruß Rudi

'******************** RC5 Code Fernbedienungs-Empfänger für 8 
Kanäle*******************************
'     1111.1111 bin
'     255 dec
'     Lockbit
'        |   0110.1111  bin
'        |   111 dec
'        |   Fusebit
'        |     |     1101.1111 bin
'        |     |     223 dec
'        |     |   Fusebit High
'        |     |      |        1111.1111 bin
 '       |     |      |        255 dec
'        |     |      |     Extended Fusebit
'        |     |      |      |
$prog &HFF , &H6F , &HDF , &HFF                             ' Fusebits 
einstellen für attiny2313 und 12MHz Quarz
$lib "mcsbyte.lbx"
$regfile = "attiny2313.dat"
'$crystal = 3579545
$crystal = 12000000
$hwstack = 20
$swstack = 20
$framesize = 5
$baud = 4800


Config Rc5 = Pind.2                                         ' Eingang 
Sensor
Config Portb = Output                                       ' PortB als 
Ausgang


Enable Interrupts                                           ' Interrupts 
zulassen

Portb.0 = 0                                                 ' PortB auf 
High
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0
Portb.5 = 0
Portb.6 = 0
Portb.7 = 0

Dim Addr As Byte                                            'Variablen 
festlegen
Dim Comm As Byte

'Command- Zielports bestimmen
A1 Alias Portb.0                                            ' Ziffer1 
Pin12 Port B.0
A2 Alias Portb.1                                            ' Ziffer2 
Pin13 Port B.1
A3 Alias Portb.2                                            ' Ziffer3 
Pin14 Port B.2
A4 Alias Portb.3                                            ' Ziffer4 
Pin15 Port B.3
A5 Alias Portb.4                                            ' Ziffer5 
Pin16 Port B.4
A6 Alias Portb.5                                            ' Ziffer6 
Pin17 Port B.5
A7 Alias Portb.6                                            ' Ziffer7 
Pin18 Port B.6
A8 Alias Portb.7                                            ' Ziffer8 
Pin19 Port B.7

Do                                                          'Rc5 Empfang 
starten
  Getrc5(addr , Comm)
  If Addr <> 255 Then
    Reset Comm.7

    Select Case Comm


    Case 1 : Toggle A1                                      ' Wird 1 
gedrückt, schalte Ausgang 1
    Waitms 100                                              ' Sicherheit 
zum Schalten wegen toggle Befehl
    Case 2 : Toggle A2
    Waitms 100
    Case 3 : Toggle A3
    Waitms 100
    Case 4 : Toggle A4
    Waitms 100
    Case 5 : Toggle A5
    Waitms 100
    Case 6 : Toggle A6
    Waitms 100
    Case 7 : Toggle A7
    Waitms 100
    Case 8 : Toggle A8
    Waitms 100

    End Select

    Print "Taste: " ; Comm ; " empfangen" ; Chr(13)

  End If

  Loop

  End

von Stephan S. (plonk)


Lesenswert?

Waren wir nicht schon soweit, dass der RC5-Code nicht funktioniert?

MfG

von Falkner F. (Gast)


Lesenswert?

Hallo

Vielen herzlichen Dank für eure Bemühungen das ist ja weltklasse. Da 
weiss ich ja gar nicht wie ich das danken soll? Danke Danke Danke.

Mir ist gestern noch eine Idee in den Sinn gekommen. Nein nicht vor TV 
Dschungelkiste. Solche Dinge schaue ich nicht. Und zwar muss ich ja 
meiner Universalfernbediehnung erst mal den RC5 Code beibringen. Und das 
schaffe ich erst wenn ich noch ein altes Geräte finde z.B. einen alten 
Philips TV. Dann lerne ich sie dort an dann kann sie auch RC5 Signale 
senden. Und dann sollte mein TSOP Pegelwandler das richtige Signal 
rausspucken. Ich bin mir sicher das danach meine Schaltung rocken wird. 
Bin ich mir sogar sehr sicher. Manchmal sieht man eben vor lauter Bäumen 
den Wald nicht mehr. Das teste ich und poste es dann hier rein. Ich 
wünsche allen einen schönen Sonntag.

Liebe Grüße

Falkner

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Falkner F. schrieb:
> Mir ist gestern noch eine Idee in den Sinn gekommen. Nein nicht vor TV
> Dschungelkiste. Solche Dinge schaue ich nicht. Und zwar muss ich ja
> meiner Universalfernbediehnung erst mal den RC5 Code beibringen.

Ja, das wäre eine Möglichkeit, denn keine Deiner im Foto abgebildeten 
Fernbedienungen verwendet RC5. Und ich kann Dir versichern, dass 
heutzutage auch keine aktuelle Fernbedienung mehr RC5 benutzt, denn Rc5 
ist mangels Flexibilität längst ausgestorben.

Hinzu kommt, dass die fernöstliche Unterhaltungsindustrie noch nie RC5 
benutzt hat. RC5 wurde von Philips entwickelt und wurde gern von anderen 
europäischen (auch deutschen) Herstellern dann auch verwendet. Aber das 
ist Jahrzehnte her.

Du findest RC5 mit viel Glück noch auf einer Universalfernbedienung, die 
alte Philips-Geräte unterstützt.

Alternativ steigst Du von Bascom auf C um und benutzt die 
IRMP-Bibliothek. Diese erkennt alle Fernbedienungen, die Du oben im 
Foto abgelichtet hast - und mehr.

P.S.
Mit dieser Behauptung lehne ich mich auch nicht weit aus dem Fenster. 
Die FBs auf Deinem Foto nutzen das NEC-, SAMSUNG32- und evtl. eine noch 
das Kaseikyo-Protoll. Diese werden von IRMP neben weiteren 40 
Protokollen erkannt.

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.