IR-Decoder - universell

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Soooo, hab mal den Code überarbeitet und dabei stehe ich jetzt vor einem Scheidepunkt: Wenn es Performance laufen soll und Speicher-sparend implementiert, dann gibt es da Konfliktpotenzial. Und zwar in der Form, dass ich z.B. zur Laufzeit die Toleranzen berechne - damit spare ich Anfangs ein bisschen Flash, muss später aber viel Rechnen und auch dass kostet Flash (trotz funktionaler Zusammenfassung) und natürlich Laufzeit....

      Jetzt wollte ich nicht weitermachen, ohne den Gedanken mal genauer zu Beleuchten.

      Anregungen? Ideen willkommen!
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • @Mitch64, also ich hab nochmal über Deine Argumentation nachgedacht (Post #12) und mich dann gefragt, warum meine Variante keine Konstanten verwendet?

      In einem anderen Thread ging es quasi genau um das Thema „Konstanten“ - auch wenn die Überschrift etwas anderes vermuten lässt: LINK
      Verstehst Du was ich meine?
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Also ich bin jetzt etwas verwirrt, was du mir eigentlich mitteilen willst.

      Zum einen weil du ganz am Anfang (Post 1) schreibst, du willst einen IR-Decoder bauen. Später (meine ich) schreibst du, dass du eine IR-Fernbedienung nachbilden willst. Das wäre dann aber ein Encoder (der kodiert).

      Zum anderen ist mir gerade nicht klar, wo dein Speicher nicht reicht. Ist dein SRAM zu klein oder dein Flash?

      Und zum dritten, weiß ich nicht, ob dein aktueller code irgendwo hier einzusehen ist.

      Ich kann mich aber erinnern, dass es auch mal um die Statemachine ging und ich dir gesagt habe, dass du das Programm belassen solltest. Was willst du denn genau erreichen?
      Kaum macht man es richtig - und schon geht's!
    • Mitch64 wrote:

      Also ich bin jetzt etwas verwirrt, was du mir eigentlich mitteilen willst.
      Die Antwort stand im Post davor:

      monkye wrote:

      @Mitch64, also ich hab nochmal über Deine Argumentation nachgedacht (Post #12) und mich dann gefragt, warum meine Variante keine Konstanten verwendet?

      Dann fängst Du ganz am Anfang an und wechselst zum Encoder: Nein, das habe ich nie geschrieben.


      Mitch64 wrote:

      Zum anderen ist mir gerade nicht klar, wo dein Speicher nicht reicht. Ist dein SRAM zu klein oder dein Flash?
      Beides, denn der Empfang von Signalen soll im Hitergrund erfolgen und zur Steuerung oder Verarbeitung derselben in einem anderen Anwendungskontext dienen (Beispiele: LED-Deko-Streifen, ferngesteuert mit der TV-Fernbedienung oder Einschalten eines Relais, welches per 433MHz-Baumarkt-Fernbedienung geschalten wird - deshalb ja UNIVERSELL)


      Und jetzt zurück zum Ausgangspunkt:

      Mitch64 wrote:

      Ich kann mich aber erinnern, dass es auch mal um die Statemachine ging und ich dir gesagt habe, dass du das Programm belassen solltest. Was willst du denn genau erreichen?

      Mir ging es um Deine Darlegung, dass ich keine "State Machine" verwende, weil dazu Konstanten notwendig sind. In dem von mir angegeben Link haben andere Forenmitglieder mir genau das erklärt - das z.B. "12" eine Konstante ist. Und so war es in der 1. Version ja auch umgesetzt.

      OK, Haken dran (für mich).
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Neue Version - nicht unbedingt optimaler, aber strukturierter...

      Yamaha RAV28 - IR Remote Control _ Dekodiert.PNG

      Liest sich wie folgt für 1.Zeile:

      P1 = Protokoll 1
      22-46 = Impuls 22 Ticks - Pause 46 Ticks
      13-21 = Impulsbreite von 13 - 21 Ticks ======> deshalb ist der Messwert 22 außerhalb des Bereichs, FEHLER --> Bit = 2
      32_1 = 32 Datenbits - 1 Stopp-Bit
      0112 = erkanntes Bitmuster --> das 4. Bit ist ungültig

      Um Speicherplatz im Flash zu sparen habe ich die Abtastrate von 8 Mikrosekunden auf 32 Mikrosekunden hochgenommen (Prescaler von 64 auf 256), damit muss weniger gerechnet werden - weil ich die Toleranzgrenzen speichere UND die sind nur 1 Byte groß anstatt 1 Word.

      Damit das gängige Intertechno auch geht habe ich einen Kompromiss vorgesehen: Anstatt 4 Bit-Phasen auszuwerten werden jetzt die erkannten Bits einfach gespeichert. Bei der Auswertung muss die Umsetzung dann erfolgen, weil ja 2 Sende-Bits ein Datenbit ergeben:
      00 = 0
      11 = 1
      01 = F
      10 = E

      Inzwischen gibt es ja mehrere Protokollvarianten, welche auch mit den Zuständen 0, 1, F, E hantieren.

      In der Datei "IR-SlowRF-Def-Protocol.inc" sind die Definitionen als Tabelle hinterlegt und auch absichtlich vertikal gespeichert, weil sich die Parameter leichter lesen lassen.

      Ja, und die Zeiten habe ich einmal gegen eine Excel geworfen und die Werte abgeschrieben....

      Protokolle_Umrechnung Zeiten in Ticks.PNG
      Files
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • So, noch mal ein paar Fehler entsorgt...

      Was sich vorerst als ungeeignet erwiesen hat: Der Pin-Change-Interrupt für Funksignale, denn bei den "billigen" Teilen a la MX-05V o.ä. kommt jede Menge Müll herein, der zu einer sehr hohen Last beim MC führt.Datenmüll via 433MHz Receiver.PNG

      Hier teste ich erstmal andere Receiver und dann denke ich nochmal über die Zeitbasis nach...
      Files
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • UPDATE:
      Bisher hatte ich es nicht geschafft, den Empfang von 433MHz Funksignalen (typische Baumarkt Steckdosen z.B.) halbwegs hinzubekommen. Nach einigen Runden am Simulator war es dann klar: An einigen Stellen braucht die State Machine einfach zu lange und wird quasi von den schneller eintreffenden Signalen regelrecht überrannt. Der MC hängt sich nicht auf, aber die Messungen sind halt immer ungültig. Alles rund um die IR-Empfänger ging ja bisher problemlos, nur die "schnelleren" 433MHz Impulse (die kürzesten um die 200 Mikrosekunden) wurden zum "Problem".

      Die Auflösung ist simpel: Die kleine Geschichte braucht im Schnitt 4.000 Takte!

      BASCOM Source Code

      1. Dim sCode As String * 32
      2. Dim IRSRF_bLastBit As Byte
      3. sCode = sCode + STR(IRSRF_bLastBit)

      Hab die Wandlung manuell gemacht und direkt in den String geschrieben, dass dauert nur 62 Takte....
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Guter Tipp, zumindest lassen sich - je nach Anzahl der Cases - ein paar Takte sparen. Eine meiner Erkenntnise aus dem Projekt: Universeller Code ist meist entweder langsamer oder platzfressender als „zugeschnitten“.
      Schick ist aber, dass ich jetzt IRDA und SlowRF mit einer Lösung „erschlagen“ kann. Was noch fehlt ist ein Refactoring...
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Neuer Zwischenstand

      Jetzt kommen die Tinys besser mit dem Funkmüll zurecht und am Timing habe ich auch noch geschraubt.
      Wichtigste Erkenntnisse:
      1. Die preiswerten 433MHz-Steckdosen Sets haben extreme Schwankungen beim Timing, teilweise bis zu 50%. Wenn das nicht berücksichtigt ist, dann wird wenig erkannt.
      2. Ein nebeneinander von 433MHz und IRDA an einem Signaleingang ist fast sinnlos. Warum? Weil im Funkbereich unentwegt Müll am Eingang landet, der aber den parallelen IRDA-Empfang zunichte machen würde.
      3. Es macht Sinn für solche Projekte einen extra Chip zu verwenden, auf den einen Euro kommt es meist nicht an. Der könnte auch als Digitalfilter verwendet werden.
      4. Selbst die allerbilligsten Sende- Empfangskombinationen lassen über weitere Strecken ein Senden/Empfangen mit UART zu, in meinen Tests locker über 15-20m. (der Sender bekam aber per Step-Up mehr als 5V)
      5. Der Prozessor ist beim Empfang von Funksignalen immer sehr gut beschäftigt. Die LED signalisiert mit wildem Flackern (jeweils Toggeln bei jedem Ereignis - Pin Change) das da viel reinprasselt.
      6. "Teure Empfänger" (z.B. RXB6 ider RXB8) machen es in Bezug auf die Prozessorlast nur wenig besser - aber die Reichweiter erhöht sich stark.


      Die Implementierung per Polling mach ich im nächsten Schritt, mal sehen was das bringt.
      Files
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Hallo,
      ich hatte anfangs auch das Problem, dass mir zu viele Interrupts rausgeschmissen wurden, weil die Empfänger sehr empfindlich sind.
      Das sah dann so aus:
      868RX_ohne_Kondensator.png

      Deutlich sieht man, dass praktisch kontinuierlich Signale kommen und damit dauernd Interrupts ausgelöst werden.
      Die SW kommt aber dennoch damit zurecht, nur hat der Kontroller halt mehr zu tun.
      Unten sieht man, was daraus gemacht wird. Eine empfangene 0 sollte 800 lang sein, einen 1 1200. Im Durchschnitt passt das auch. Aber es werden auch kürzere und längere Impulse dazwischengemischt. Wie etwa Last=309 in Zeile 4 oder Last=2822 in Zeile 5.
      Dadurch wird nicht mehr jedes Protokoll doppelt empfangen.

      Source Code

      1. 00:04:45 00.00.00 56 5A 00 AA 00 66 Bügeln : 0 --- --- 0_Avg=794 1_Avg=1188 Last=793
      2. 00:04:48 00.00.00 3E 13 00 AA 00 07 Gäste : 0 --- --- 0_Avg=794 1_Avg=1187 Last=1194
      3. 00:04:48 00.00.00 3E 13 00 AA 00 07 Gäste : 0 --- --- 0_Avg=795 1_Avg=1180 Last=1209
      4. 00:04:52 00.00.00 B3 F7 55 55 27 87 Daniela : zu zu 62 0_Avg=798 1_Avg=1202 Last=309
      5. 00:04:53 00.00.00 BC EE 55 55 29 89 Basti : zu zu 65 0_Avg=792 1_Avg=1195 Last=2822
      6. 00:05:05 00.00.00 59 60 00 A6 FF 6A Zentrale: 244 --- --- 0_Avg=794 1_Avg=1188 Last=800
      7. 00:05:06 00.00.00 59 60 00 A6 FF 6A Zentrale: 244 --- --- 0_Avg=793 1_Avg=1188 Last=796
      8. 00:05:08 00.00.00 F7 69 55 55 28 3E Waschkue: zu zu 64 0_Avg=791 1_Avg=1194 Last=1214
      9. 00:05:11 00.00.00 33 38 00 A6 21 3E Baden : 65 --- --- 0_Avg=795 1_Avg=1186 Last=1186
      10. 00:05:11 00.00.00 33 38 00 A6 21 3E Baden : 65 --- --- 0_Avg=795 1_Avg=1182 Last=1185
      11. 00:05:17 00.00.00 EA DA 55 55 33 AD Kochen : zu zu 81 0_Avg=797 1_Avg=1198 Last=1214
      12. 00:05:24 00.00.00 88 96 55 55 3F 13 Schuppen: zu zu 100 0_Avg=809 1_Avg=1212 Last=1229
      13. 00:05:25 00.00.00 88 96 55 55 3F 13 Schuppen: zu zu 100 0_Avg=807 1_Avg=1217 Last=1227
      14. 00:05:36 00.00.00 2B 0F 00 AA 00 F0 Gäste WC: 0 --- --- 0_Avg=795 1_Avg=1212 Last=2601
      15. 00:05:36 00.00.00 2B 0F 00 AA 00 F0 Gäste WC: 0 --- --- 0_Avg=795 1_Avg=1211 Last=2321
      16. 00:05:39 00.00.00 CB B6 55 55 30 67 Schlafen: zu zu 76 0_Avg=792 1_Avg=1194 Last=1208
      17. 00:05:39 00.00.00 34 49 00 AA 00 33 Schlafen: 0 --- --- 0_Avg=796 1_Avg=1180 Last=2545
      18. 00:05:39 00.00.00 34 49 00 AA 00 33 Schlafen: 0 --- --- 0_Avg=793 1_Avg=1186 Last=807
      19. 00:05:43 00.00.00 25 56 00 AA 00 31 Fl Unten: 0 --- --- 0_Avg=794 1_Avg=1189 Last=1189
      20. 00:05:43 00.00.00 25 56 00 AA 00 31 Fl Unten: 0 --- --- 0_Avg=792 1_Avg=1188 Last=1189
      21. 00:05:56 00.00.00 43 11 00 A6 00 06 Basti : 0 --- --- 0_Avg=794 1_Avg=1213 Last=798
      22. 00:05:56 00.00.00 43 11 00 A6 00 06 Basti : 0 --- --- 0_Avg=793 1_Avg=1217 Last=787
      23. 00:05:57 00.00.00 43 11 7D 67 2F 73 Basti : 0_Avg=795 1_Avg=1218 Last=1220
      24. 00:05:57 00.00.00 43 11 42 69 B6 C1 Basti : tlow = 182 0_Avg=796 1_Avg=1217 Last=1216
      25. 00:05:57 00.00.00 43 11 43 79 00 1C Basti : temp = 182 0_Avg=794 1_Avg=1187 Last=1193
      26. 00:05:57 00.00.00 43 11 4B 67 2F 41 Basti : 0_Avg=794 1_Avg=1218 Last=787
      27. 00:05:57 00.00.00 43 11 4B 77 2F 51 Basti : 0_Avg=794 1_Avg=1188 Last=1185
      28. 00:05:58 00.00.00 43 11 44 69 00 0D Basti : 0_Avg=794 1_Avg=1218 Last=1224
      29. 00:05:58 00.00.00 43 11 4B 67 2F 41 Basti : 0_Avg=794 1_Avg=1217 Last=797
      30. 00:05:58 00.00.00 43 11 4B 77 2F 51 Basti : 0_Avg=795 1_Avg=1187 Last=1191
      31. 00:05:58 00.00.00 43 11 7E 67 2F 74 Basti : 0_Avg=795 1_Avg=1218 Last=794
      Display All

      Dann habe ich am Ausgang des Empfängers einfach einen 100nF Kondensator gegen GND eingesetzt. Dann sehen die Signale so aus:
      868RX_mit_100nF.png

      Man sieht sofort, dass außer dem Nutzsignal fast nichts mehr durchkommt. In den Daten sieht es dann so aus:

      Source Code

      1. 00:00:53 00.00.00 25 56 00 AA 00 31 Fl Unten: 0 --- --- 0_Avg=792 1_Avg=1189 Last=1192
      2. 00:00:53 00.00.00 25 56 00 AA 00 31 Fl Unten: 0 --- --- 0_Avg=792 1_Avg=1190 Last=1197
      3. 00:00:56 00.00.00 91 DD 55 55 1A 3E K-Tür : zu zu 41 0_Avg=800 1_Avg=1207 Last=1251
      4. 00:00:57 00.00.00 91 DD 55 55 1A 3E K-Tür : zu zu 41 0_Avg=799 1_Avg=1209 Last=1231
      5. 00:00:59 00.00.00 34 49 00 AA 00 33 Schlafen: 0 --- --- 0_Avg=792 1_Avg=1191 Last=798
      6. 00:00:59 00.00.00 34 49 00 AA 00 33 Schlafen: 0 --- --- 0_Avg=792 1_Avg=1189 Last=787
      7. 00:01:01 00.00.00 9E C0 55 55 3F 53 HeizungK: zu zu 100 0_Avg=784 1_Avg=1188 Last=797
      8. 00:01:02 00.00.00 9E C0 55 55 3F 53 HeizungK: zu zu 100 0_Avg=787 1_Avg=1189 Last=801
      9. 00:01:11 00.00.00 12 44 00 A6 15 1D Essen : 40 --- --- 0_Avg=792 1_Avg=1190 Last=795
      10. 00:01:11 00.00.00 12 44 00 A6 15 1D Essen : 40 --- --- 0_Avg=792 1_Avg=1190 Last=790
      11. 00:01:14 00.00.00 B3 F7 55 55 27 87 Daniela : zu zu 62 0_Avg=797 1_Avg=1206 Last=813
      12. 00:01:15 00.00.00 B3 F7 55 55 27 87 Daniela : zu zu 62 0_Avg=801 1_Avg=1209 Last=813
      13. 00:01:15 00.00.00 43 11 00 A6 00 06 Basti : 0 --- --- 0_Avg=793 1_Avg=1222 Last=790
      14. 00:01:15 00.00.00 43 11 00 A6 00 06 Basti : 0 --- --- 0_Avg=793 1_Avg=1218 Last=797
      15. 00:01:25 00.00.00 0A 63 00 AA 0E 31 Wohnen : 25 --- --- 0_Avg=793 1_Avg=1219 Last=1223
      16. 00:01:25 00.00.00 0A 63 00 AA 0E 31 Wohnen : 25 --- --- 0_Avg=792 1_Avg=1220 Last=1222
      17. 00:01:33 00.00.00 60 22 00 AA 00 38 Fl Oben : 0 --- --- 0_Avg=793 1_Avg=1219 Last=1219
      18. 00:01:33 00.00.00 60 22 00 AA 00 38 Fl Oben : 0 --- --- 0_Avg=792 1_Avg=1220 Last=1220
      19. 00:01:34 00.00.00 15 25 00 A6 12 FE Kochen : 35 --- --- 0_Avg=793 1_Avg=1190 Last=1196
      20. 00:01:34 00.00.00 15 25 00 A6 12 FE Kochen : 35 --- --- 0_Avg=792 1_Avg=1189 Last=1192
      21. 00:01:41 00.00.00 BC EE 55 55 29 89 Basti : zu zu 65 0_Avg=790 1_Avg=1197 Last=1212
      22. 00:01:42 00.00.00 BC EE 55 55 29 89 Basti : zu zu 65 0_Avg=791 1_Avg=1197 Last=1215
      23. 00:01:58 00.00.00 56 5A 00 AA 00 66 Bügeln : 0 --- --- 0_Avg=792 1_Avg=1190 Last=790
      24. 00:01:58 00.00.00 56 5A 00 AA 00 66 Bügeln : 0 --- --- 0_Avg=792 1_Avg=1190 Last=794
      25. 00:01:58 00.00.00 F7 69 55 55 28 3E Waschkue: zu zu 64 0_Avg=790 1_Avg=1195 Last=1210
      26. 00:01:59 00.00.00 3E 13 00 AA 00 07 Gäste : 0 --- --- 0_Avg=793 1_Avg=1189 Last=1186
      27. 00:01:59 00.00.00 3E 13 00 AA 00 07 Gäste : 0 --- --- 0_Avg=792 1_Avg=1189 Last=1192
      28. 00:01:59 00.00.00 F7 69 55 55 28 3E Waschkue: zu zu 64 0_Avg=789 1_Avg=1195 Last=1213
      29. 00:02:18 00.00.00 EA DA 55 55 33 AD Kochen : zu zu 81 0_Avg=794 1_Avg=1200 Last=1219
      30. 00:02:18 00.00.00 CE 22 55 55 33 D9 Werkstat: zu zu 81 0_Avg=797 1_Avg=1205 Last=1221
      31. 00:02:19 00.00.00 EA DA 55 55 33 AD Kochen : zu zu 81 0_Avg=795 1_Avg=1203 Last=1211
      32. 00:02:19 00.00.00 CE 22 55 55 33 D9 Werkstat: zu zu 81 0_Avg=797 1_Avg=1205 Last=1218
      33. 00:02:20 00.00.00 88 96 55 55 3F 13 Schuppen: zu zu 100 0_Avg=806 1_Avg=1218 Last=1237
      34. 00:02:21 00.00.00 88 96 55 55 3F 13 Schuppen: zu zu 100 0_Avg=804 1_Avg=1221 Last=1224
      35. 00:02:22 00.00.00 59 60 00 A6 FF 6A Zentrale: 244 --- --- 0_Avg=793 1_Avg=1189 Last=792
      36. 00:02:22 00.00.00 59 60 00 A6 FF 6A Zentrale: 244 --- --- 0_Avg=792 1_Avg=1190 Last=794
      37. 00:02:27 00.00.00 33 38 7D 77 2F 9A Baden : 0_Avg=793 1_Avg=1188 Last=793
      38. 00:02:27 00.00.00 33 38 42 79 D0 02 Baden : tlow = 208 0_Avg=793 1_Avg=1189 Last=1191
      39. 00:02:28 00.00.00 33 38 43 79 00 33 Baden : temp = 208 0_Avg=793 1_Avg=1189 Last=794
      40. 00:02:28 00.00.00 33 38 4B 77 00 39 Baden : 0_Avg=793 1_Avg=1189 Last=792
      41. 00:02:29 00.00.00 33 38 44 79 00 34 Baden : 0_Avg=792 1_Avg=1189 Last=1190
      42. 00:02:31 00.00.00 F5 9C 55 55 14 5B Wohnen : zu zu 32 0_Avg=788 1_Avg=1191 Last=1210
      43. 00:02:32 00.00.00 F5 9C 55 55 14 5B Wohnen : zu zu 32 0_Avg=791 1_Avg=1194 Last=1201
      44. 00:02:34 00.00.00 9F BD 55 55 29 3B Fl Oben : zu zu 65 0_Avg=795 1_Avg=1201 Last=1220
      45. 00:02:35 00.00.00 9F BD 55 55 29 3B Fl Oben : zu zu 65 0_Avg=798 1_Avg=1207 Last=1227
      46. 00:02:42 00.00.00 2B 0F 00 AA 00 F0 Gäste WC: 0 --- --- 0_Avg=793 1_Avg=1220 Last=803
      47. 00:02:42 00.00.00 2B 0F 00 AA 00 F0 Gäste WC: 0 --- --- 0_Avg=793 1_Avg=1218 Last=796
      Display All
      Alle kommen doppelt und es ist kein einziger Wert außerhalb der Toleranz.
      Kannst ja mal sehen, ob so etwas einfaches oder ein richtiger Filter hilft.
    • Den klassischen Tiefpass habe ich auch verwendet, das bewirkt schon ein bissel was. Allerdings leidet darunter die Reichweite, zumindest meine Erfahrung.
      Muss mal ein paar Bilder machen, da sieht man die kleinen Mods sofort.

      Der RXB6 besitzt ja einen RSSI Ausgang, den werde ich in der Signalerkennung integrieren. Irgendwie hab ich noch zu wenig Druck, um den CC1101 mit BASCOM zu verwenden, obwohl der ein Haufen Sachen in Hardware kann...
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Da ich FS20/FHT Signale (Amplituden moduliert) empfangen und auswerten will, verwende ich den Empfänger von ELV.
      Für meine eigenen Komponenten dann den zugehörigen Sender.
      Wo hast du denn den Tiefpass angeschlossen, dass der die Reichweite deines Empfängers ändert? Bei mir passiert das nicht, der absorbiert nur das Hintergrundrauschen. Wahrscheinlich ändert der auch die Steilheit der Ausgangsflanken, aber das scheint kein Problem zu sein.
      Der Decoder ist in Bascom geschrieben und verwendet den Input Capture.
    • OK, den Empfänger kannte ich nicht. Aber ja, meist gucke ich in den 433MHz Bereich - deshalb wahrscheinlich. Für 868MHz verwende ich aktuell nur CC1101.

      Der Tiefpass ist am Ausgang angeschlossen. Bei den XY-MV05V wirkt der Tiefpass auf die Ausgangsstufe und beeinflusst den BIAS (letzter OP, der als Komperator arbeitet). Beim RXB6 wird das Signal zum Trapez verschliffen, der meiste Schrott bleibt. Hab jetzt bei einem Exemplar die Abschirmung entfernt und spiele ein bisschen mit den Filtern und der AGC Steuerung.

      Der Vorteil des Timer-basierten Polling Dekoders wäre die Unabhängigkeit von Störungen, die wirken unterhalb des ISR-Aufrufzeit nicht. Damit steht immer ein ziemlich kalkulierbarer Zeitbereich für die eigentliche Applikation zur Verfügung.

      Meine Hausautomation läuft mit Z-Wave, ZigBee, Enocean und Eigenbau. FS20 wollte ich dann nicht mehr dazu kaufen. Wettersensoren baue ich fast immer selbst.
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Was verstehst du denn unter "Timer-basierten Polling"?
      Dein Programm habe ich jetzt noch nicht wirklich verstanden, aber du nutzt doch den PCINT0 an PinA.0, also einen Interrupt bei Signaländerung. Das würde ich nicht als Polling bezeichnen. Für mich wäre das eher, alle x-µs in der Timer ISR einen Eingang abfragen. Aber vielleicht übersehe ich da was.
      Wenn ich viele, schnelle Inputs habe, dann habe ich mir angewöhnt, Daten erst einmal platt wegzuschreiben, meistens in einen Ringspeicher. Die MainLoop muss dann nur oft genug nachschauen, dass der Speicher nicht überläuft. Eine zeitkritische MainLoop geht in meinen Augen gar nicht, da kommt es zu Race Conditions, wo bur schwer vorhersagbar ist, was passiert.
      Wenn das bei dir so funktioniert ist aber alles gut, du weißt ja, was du tust. Das sieht man deinem Code an.
    • Mein Plan war, einen 8-Bit Timer durchlaufen zu lassen und alle 50-100 Mikrosekunden (beim Timer-Überlauf) den Eingangs-Pin zu prüfen (also Polling). Damit lassen sich die meisten Slow-RF Anwendungen erschlagen.
      Für anspruchsvollere Themen verwenden die meisten Systeme jedenfalls kaum noch OOK zusammen mit dem 433MHz Bereich.

      Das bisherige Programm läuft per PCINT - das hast Du richtig gesehen. Es läuft als State Machine. Die Stellen die schnell sein müssen, habe ich optimiert. Das finale Aufräumen fehlt noch.

      Auf einen Puffer habe ich in der finalen Version verzichtet, weil der Speicher frisst. Da schreibe ich die Bits einzeln in den Puffer, der maximal 128 Bit umfasst. Die Auswertung muss in der Applikation erfolgen, die das Signal benötigt.
      Soll heißen: Das Funkß bzw. IRDA-spezifische Protokoll wird nicht betrachtet, sondern nur die Bits zurück geliefert.
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.