IR Wireless Remote Control Module

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • ...aufgewärmt: IR-Decoder

      Ist zwar schon ein paar Tage alt der Thread, aber es passt nahtlos: Für den Einsatz diverser IR-FB‘s baue ich gerade an einem (relativ) universellen Decoder. Von diesen „Technik-Leichen“ habe ich einige (20?) rumliegen...

      Ziel ist es, mit ein paar Bytes Anpassung weitere Protokolle hinzuzufügen und das Ganze auch für einfache 433MHz Module einzusetzen. Wenn es halbwegs als Alpha-Version fertig ist stelle ich es hier ein. Verwendet wird ein Timer (läuft durch) und ein Pin Change Interrupt, an dem der TSOP hängt. Implementiert habe ich den ersten Teil als State Machine, weil der IR-Sensor massig Störungen einsammelt - vor allem von Leuchtstoffröhren (alte Tischleuchte). Gedimmte LED-Streifen (ca. 2kHz) stören dagegen wenig.
      Der ganze Kram soll in eine Datei gepackt werden, mit mäßigem Speicherkonsum (ca. 50Byte RAM und <2kB ROM) auskommen und den Programmablauf in der Main Loop wenig stören - die ISR braucht bei 8MHz unter 15 Mikrosekunden.

      Muss noch viel optimiert und entwanzt werden.

      Wollte das Ganze für die indirekte Beleuchtung mit Dimmer einsetzen, die meisten unserer FB‘s können mehrere Geräte ansprechen (DVD, BR, Videorecorder, ...).

      Das zugeschnittene Code-Schnippseln ist mir zu umständlich geworden...
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • monkye schrieb:

      Ziel ist es, mit ein paar Bytes Anpassung weitere Protokolle hinzuzufügen und das Ganze auch für einfache 433MHz Module einzusetzen. Wenn es halbwegs als Alpha-Version fertig ist stelle ich es hier ein.
      Dann mach doch bitte einen extra Thread auf.
      Hier ging es einzig um die genannten China-Module und deren einfachen Einsatz.
      Mit Erweiterungen und zig Protokollen würde das Ziel meines Beitrags, Anfängern ein Stück funktionierenden Code für eine einfach erhältliche Hardware zu geben, verfehlt.

      Danke, Michael
    • Michael schrieb:

      Beim freundlichen Chinesen gibt es kleine Fernbedienungen mit den Abmessungen 85x40x7. Im Lieferumfang ist noch ein Empfangsmodul (3 Bein IC) und ein 3poliges Kabel.
      Leider war in meiner Packung kein Empfangsmodul mehr dabei, aber für 1,15 Euro Kaufpreis lohnt sich eine Reklamation nicht. Auch die bei dem Auktionsfoto mit abgebildete LED fehlte (wozu auch immer die sein soll)
      Ich habe stattdessen ein TSOP38 aus der Kramkiste genommen, geht genauso gut.

      Die Fernbedienung sendet ein Telegramm von 68ms Länge, zuerst eine Startlücke mit 9ms, gefolgt von einem High von 4,5ms. (1/2)
      Danach folgen die 32 Bit Daten, dabei immer eine Lücke von 1/16 gefolgt von einem High von 1/16 oder 3/16, je nach Daten.
      Die ersten 8 Bit sind immer 0 und die zweiten 8 Bit sind immer 1.
      Das dritte Oktett enthält die Daten, das vierte Oktett das Zweierkomplement der Daten.
      Damit kann man die Übertragung leicht überprüfen.

      Die Software synchronisiert sich mit Timer0 auf den Startpuls und summiert dann einfach die 32 Bits in eine Long-Variable.
      In der Hauptschleife wird das Komplement geprüft und die entsprechende Tastenaktion ausgeführt.
      In diesem Fall einfach die Ausgabe auf ein LCD.

      Die Reichweite ist ordentlich, ich kann hier etwa 4 Meter weg gehen, mit meinem TSOP38 als Empfänger gibt es keine Probleme.

      Gruß, Michael

      BASCOM-Quellcode: Fernbedienung

      1. '(
      2. Infrarotfernbedienung vom freundlichen Chinesen
      3. Michael Bascomforum.de 05/2018
      4. 0 25
      5. 1 69
      6. 2 70
      7. 3 71
      8. 4 68
      9. 5 64
      10. 6 67
      11. 7 7
      12. 8 21
      13. 9 9
      14. asterisk 22
      15. hash 13
      16. up 24
      17. left 8
      18. ok 28
      19. right 90
      20. down 82
      21. ')
      22. $regfile = "M328pdef.dat" 'Atmega328p CPU
      23. $crystal = 16000000 '16Mhz Oszillator
      24. $hwstack = 64
      25. $swstack = 64
      26. $framesize = 40
      27. Config Lcd = 16 * 2
      28. Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
      29. Cursor Off
      30. Cls
      31. Config Clock = Soft
      32. Config Date = YMD , Separator =.' ANSI-Format
      33. Config Timer1 = Timer , Prescale = 256 'Sekundentimer
      34. On Timer1 T1_irq
      35. Start Timer1
      36. Enable Timer1
      37. On Int0 I_0irq 'Signaleingang
      38. Config Int0 = Falling
      39. Enable Int0
      40. Config Timer0 = Timer , Prescale = 1024 'Timer0 Signallänge
      41. On Timer0 T0_overflow
      42. Enable Timer0
      43. Enable Interrupts
      44. Led Alias Portb.5
      45. Dim X As Byte
      46. Dim Telegrammzaehler As Byte
      47. Dim Telegramm As Long
      48. Dim Zeit As Long
      49. Dim Temp As Byte
      50. Dim Eingang(4) As Byte At Telegramm Overlay
      51. Dim Neuesekunde As Bit
      52. Do
      53. If Neuesekunde = 1 Then
      54. Locate 1 , 1
      55. Lcd "Remote "
      56. Lcd Time(zeit)
      57. Neuesekunde = 0
      58. End If
      59. X = Eingang(3) + Eingang(4)
      60. If X = 255 Then
      61. Locate 2 , 1
      62. Lcd " Taste = "
      63. Select Case Eingang(3)
      64. Case 25:
      65. Lcd "0 "
      66. Case 69:
      67. Lcd "1 "
      68. Case 70:
      69. Lcd "2 "
      70. Case 71:
      71. Lcd "3 "
      72. Case 68:
      73. Lcd "4 "
      74. Case 64:
      75. Lcd "5 "
      76. Case 67:
      77. Lcd "6 "
      78. Case 7:
      79. Lcd "7 "
      80. Case 21:
      81. Lcd "8 "
      82. Case 9:
      83. Lcd "9 "
      84. Case 22:
      85. Lcd "Astersk"
      86. Case 13:
      87. Lcd "Hash "
      88. Case 24:
      89. Lcd "up "
      90. Case 8:
      91. Lcd "left "
      92. Case 28:
      93. Lcd "ok "
      94. Case 90:
      95. Lcd "right "
      96. Case 82:
      97. Lcd "down "
      98. End Select
      99. End If
      100. Waitms 50
      101. Loop
      102. T1_irq:
      103. Timer1 = 3036
      104. Neuesekunde = 1
      105. Incr Zeit
      106. Return
      107. I_0irq:
      108. Temp = Timer0
      109. Timer0 = 0
      110. Select Case Temp
      111. Case 12 To 22
      112. If Telegrammzaehler <= 31 Then
      113. Telegramm.telegrammzaehler = 0
      114. Toggle Portd.7
      115. End If
      116. Case 30 To 40
      117. If Telegrammzaehler <= 31 Then
      118. Telegramm.telegrammzaehler = 1
      119. Toggle Portd.6
      120. End If
      121. Case 210 To 215
      122. Led = 1
      123. Telegrammzaehler = 255
      124. End Select
      125. Incr Telegrammzaehler
      126. If Telegrammzaehler >= 32 Then
      127. Telegrammzaehler = 32
      128. End If
      129. Return
      130. T0_overflow:
      131. Led = 0
      132. Telegrammzaehler = 31
      133. Return
      Alles anzeigen
      IR_China_Telegramm.png

      IR_Remote.jpg
      Hallo Michael,

      ich habe mal eine Frage. Für ein Projekt mit einem Tiny2313 würde ich gerne diesen Code nutzen, um eine PWM zu regeln ( Motor Steuerung ). Pfeiltasten nach oben, Motor dreht schneller. Pfeiltaste nach unten. Motor dreht langsamer. Das erzeugen der PWM ist für mich kein Problem. Meine Problem ist aktuell das auswerten der Fernbedienung. Wenn es ein RC5 Code wäre, würde ich das hinbekommen. Bei dieser Fernbedienung stehe ich allerdings etwas auf dem Schlauch. Meine Frage: Wäre es möglich, für den Tiny2313 mal ein ganz einfaches Programm zu schreiben, das auf Tastendruck eine entsprechende LED an einem Ausgang zum Leuchten bringt, solange die Taste gedrückt wird. 2 Ausgänge würde da eigentlich schon reichen. Mir geht es einfach nur darum, dass ich sehe, wie ich das Abfragen müsste.

      Das würde mir sehr helfen.

      Viele Grüße
      Sven
    • Das Signal wird über den Int0 Pin eingelesen und Timer0 macht die Signalaufbereitung.
      Timer1 ist nur für die Uhr, das kann man auch für die PWM nutzen.


      BASCOM-Quellcode: Fernbedienung_2

      1. '(
      2. Infrarotfernbedienung vom freundlichen Chinesen
      3. Michael Bascomforum.de 05/2018
      4. 03/2024 Anpassung auf Attiny2313
      5. 0 25
      6. 1 69
      7. 2 70
      8. 3 71
      9. 4 68
      10. 5 64
      11. 6 67
      12. 7 7
      13. 8 21
      14. 9 9
      15. asterisk 22
      16. hash 13
      17. up 24
      18. left 8
      19. ok 28
      20. right 90
      21. down 82
      22. ')
      23. $regfile = "Attiny2313.dat" 'Attiny2313 CPU
      24. $crystal = 16000000 '16Mhz Oszillator
      25. $hwstack = 32
      26. $swstack = 16
      27. $framesize = 16
      28. Led1 Alias Portb.6
      29. Led2 Alias Portb.7
      30. Ddrb.6 = 1
      31. Ddrb.7 = 1
      32. Ddrb.3 = 1 'PWM OC1A
      33. On Int0 I_0irq 'Signaleingang
      34. Config Int0 = Falling
      35. Enable Int0
      36. Config Timer0 = Timer , Prescale = 1024 'Timer0 Signallänge
      37. On Timer0 T0_overflow
      38. Enable Timer0
      39. Config Timer1 = Pwm , Pwm = 8 , Compare_a_pwm = Clear_down , Prescale = 1
      40. Enable Interrupts
      41. Led Alias Portb.5
      42. Dim X As Byte
      43. Dim Telegrammzaehler As Byte
      44. Dim Telegramm As Long
      45. Dim Temp As Byte
      46. Dim Eingang(4) As Byte At Telegramm Overlay
      47. Dim Neuesekunde As Bit
      48. Do
      49. X = Eingang(3) + Eingang(4)
      50. If X = 255 Then
      51. Select Case Eingang(3)
      52. Case 25:
      53. Led1 = 1 '0"
      54. Case 69:
      55. Led1 = 0 '1
      56. Case 70:
      57. Led2 = 1 '2
      58. Case 71:
      59. Led2 = 0 '3
      60. Case 68:
      61. '4
      62. Case 64:
      63. '5
      64. Case 67:
      65. ' 6
      66. Case 7:
      67. '7
      68. Case 21:
      69. '8
      70. Case 9:
      71. '9
      72. Case 22:
      73. 'Astersk
      74. Case 13:
      75. 'Hash
      76. Case 24:
      77. If Pwm1a < 255 Then Incr Pwm1a 'up
      78. Case 8:
      79. 'left
      80. Case 28:
      81. 'ok
      82. Case 90:
      83. 'right
      84. Case 82:
      85. If Pwm1a > 0 Then Decr Pwm1a 'down
      86. End Select
      87. Eingang(3) = 0
      88. End If
      89. Waitms 50
      90. Loop
      91. I_0irq:
      92. Temp = Timer0
      93. Timer0 = 0
      94. Select Case Temp
      95. Case 12 To 22
      96. If Telegrammzaehler <= 31 Then
      97. Telegramm.telegrammzaehler = 0
      98. End If
      99. Case 30 To 40
      100. If Telegrammzaehler <= 31 Then
      101. Telegramm.telegrammzaehler = 1
      102. End If
      103. Case 210 To 215
      104. Led = 1
      105. Telegrammzaehler = 255
      106. End Select
      107. Incr Telegrammzaehler
      108. If Telegrammzaehler >= 32 Then
      109. Telegrammzaehler = 32
      110. End If
      111. Return
      112. T0_overflow:
      113. Led = 0
      114. Telegrammzaehler = 31
      115. Return
      Alles anzeigen
    • Dann musst du den prescale vom timer0 anpassen. Bei 8 Mhz, halbe Taktfrequenz vom Beispiel oben bräuchte dann einen halben prescale von oben, also 512 (wenn's den gibt?)
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich komme mir langsam etwas veräppelt vor.... Jetzt funktioniert es nicht mehr... Die LED an der Empfängerplatine blinkt immer, wenn ich einen Befehl gebe. Die LED an PB5 blinkt mal mit und mal nicht. Die LED lassen sich mittlerweile garnicht mehr steuern. Habe habe nochmal alles neu auf dem Steckbrett gebaut. Keine Veränderung. Ich verstehe das nicht. Zumal es ja schon mal funktioniert hatte. Warum lässt sich das jetzt nicht mehr reproduzieren. Ein Kondensator ist auch zwischen + und -. Ich habe mitterweile schon mal den Tiny getauscht. Genau das Gleiche.
    • Jetzt wäre ein Logikanalyser recht. Da gibt's beim Chinesen so geklonte Teile für sehr wenig Geld, die dann mit der software eines namhaften und entsprechend teuren Produkts auf dem Pc die Logiklevel darstellen können. Damit könnte man den Fehler einkreisen. Hilft dir jetzt grad leider nicht weiter.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hallo Sven,
      da das ja schon mal funktioniert hatte schlage ich vor erst mal nachzuweisen ob die Sendedioden am Handsender IR aussenden.
      Mit ein paar wenigen Bauteilen läßt sich das realisieren. Falls Interesse besteht, suche ich die Schaltung am Sonntag mal raus.
      Auch läßt sich das rudimentär mit der Kamera eines Mobiltelefons machen.
      Gruß Rudi
      Immer Glück haben ist fast wie können..

      Beitrag von Rudi Einstein ()

      Dieser Beitrag wurde von Michael aus folgendem Grund gelöscht: doppelt ().
    • Ich habe es jetzt nochmal mit einem neuen Tiny2313 und einem neuen IR Empfänger versucht. Keine Reaktion. So langsam weiß ich echt nicht mehr weiter. :(

      @Michael Hast du evtl noch eine Idee ? Könnte es evtl mit der anderen Frequenz zu tun haben ? Der Tiny läuft ja mit 4 MHz. Das müsste mit dem Vorverteiler mit 256 doch passen, oder ? Wie müsste die LED an PB5 denn reagieren ?