Automatische PC-Sperrung via USB und 433MHz-Sender/Empfänger

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

    • Automatische PC-Sperrung via USB und 433MHz-Sender/Empfänger

      So, kaum vergehen 2 Jahre schon geht es mit dem Projekt weiter.

      Damals war der Ausgangspunkt das hier --> LINK

      Egal, lange her, nochmal kurz die Aufgabenstellung skizziert


      Beruflich bedingt muss ich häufig in "öffentlichen" Bereichen der Firma am PC arbeiten und den Rechner kurzfristig schnell verlassen, das auch noch an ständig wechselnden Arbeitsplätzen und fremden Rechnern
      Also jedesmal den Bildschirm sperren. Irgendwann vergisst man das halt. Is blöd.

      Ich benötige also eine Hardware die mir den Bildschirm automatisch sperrt sobald ich weiter als 3m vom Rechner weg bin.

      Mein Ansatz wäre ein AVR im Kästchen mittels USB das vom PC als normale USB-Tastatur erkannt wird. USB-Eingabegeräte werden von unserer Sicherheitspolicy noch nicht geblockt (USB-Sticks schon)
      Und als Trigger ein kleiner Sender. Sobald der Sender ausser Reichweite kommt muss der AVR über USB den Bildschirm sperren.

      Um weiterzuarbeiten muss dann das persönliche Kennwort eingegeben werden um den Rechner zu entsperren.


      Aufbauend auf diesen Informationen habe ich mir dann so eine Lösung gebaut.
      MCSELEC-Forum --> AN #197
      Elektronik-labor --> USBbascom

      Ich möchte euch hier die 3 Bestandteile der Lösung vorstellen.

      Das Projekt ist für mich abgeschlossen, es funktioniert und ist im regelmäßigen Einsatz.
      Allerdings, im Vorgriff auf die Details, ich würde einen anderen Sender/Empfänger verwenden denn das Ding das ich hier verwendet habe ist ein Glump.

      Fangen wir mal mit den Bildchen an:

      Teil 1
      Der Sender, hier noch ohne Antenne
      IMG_9860.JPG

      Eingebaut in ein Döserl mit 5x3x1,5cm
      IMG_9868.JPG

      Schaltung dazu
      sender.jpg


      a bisserl größer.....
      Sender.pdf



      Teil 2 und 3
      Der Empfänger und das USB-Interface
      Auch noch ohne Antenne
      IMG_9893.JPG


      Schaltung dazu
      Empfänger.jpg


      a bisserl größer .....
      Empfänger.pdf

      ... gleich gehts weiter....
    • Weiter gehts,
      wir sind bei Teil 1, dem Sender

      Anforderung:
      - Akkubetrieb
      --- Laden des Akkus via USB direkt vom PC
      --- Betriebszeit mit einer Akkuladung > 8h

      - Einschalten ohne Schalter
      --- Verwendung eines Rüttelsensors

      - Automatische Abschaltung
      --- nach 3h ohne dass der Sender bewegt wird
      --- bei Batteriespannung < 3,3V

      Umsetzung

      Als Sender/Empfänger habe ich günstig mehrere Pärchen bei Pollin erstanden. Waren im Ausverkauf, hat er jetzt nicht mehr
      Das Datenblatt war bei Pollin offiziell zum Download, ich gehe davon aus dass es legal ist das hier einzustellen. Hab das Produkt ja gekauft.

      TX433N_DATASHEET.pdf

      Zur Modulation mittels Manchestercode hab ich das Beispiel von G-Heinrichs verwendet --> MANCHESTER


      Source Code

      1. '-------------------------
      2. ' Sender 433MHz für Monitorsperrung
      3. ' Stand 18.06.2017
      4. '
      5. ' Aufgabenstellung:
      6. ' Zyklisches Senden einer ASCII-Sequenz
      7. ' die vom 433MHz-Empfänger dekodiert wird
      8. ' Einschalten mit Rüttelschalter über INT0
      9. ' Automatisches Ausschalten nach 3h Inaktivität
      10. ' Ausschalten bei Akkuspannung < 3,3V
      11. ' Ströme
      12. ' Senden alle 2 sec für je 50ms 12mA
      13. ' Ruhestrom 6uA
      14. ' Stromversorgung LiION-Akku 3,7V/260mAh
      15. '
      16. ' Quelle Manchester-Codierung
      17. ' http://www.forum.g-heinrichs.de/viewtopic.php?f=12&t=76
      18. $regfile = "ATtiny13.DAT"
      19. $crystal = 1200000 ' Default-Einstellungen lassen
      20. $hwstack = 10
      21. $swstack = 10
      22. $framesize = 24
      23. '-------------------------
      24. ' Config Ports
      25. Config Portb.0 = Output ' PIN 5 Spannungsteiler Batteriespannungsmessung
      26. Spannungsteiler Alias Portb.0
      27. Spannungsteiler = 0
      28. Config Portb.1 = Input ' PIN 6 Rüttelschalter via Int1
      29. Portb.1 = 1 ' Pull Up EIN
      30. Config Portb.2 = Input ' PIN7 ADC1 vom Spannungsteiler für Spannungsmessung
      31. Config Portb.3 = Output ' PIN 2 LED für Statusanzeige
      32. Led Alias Portb.3
      33. Led = 0
      34. Config Portb.4 = Output ' PIN 3 Sender-Modulation
      35. Senderstrom Alias Portb.4
      36. Senderstrom = 0
      37. '-------------------------
      38. ' Config ADC
      39. Config Adc = Single , Prescaler = Auto , Reference = Internal 'Referenzspannung des ADC auf "Internal" = 1,1 V
      40. Stop Ac ' Komparator aus
      41. '-------------------------
      42. ' Config Interrupts
      43. Enable Interrupts
      44. On Int0 Irq_int
      45. '-------------------------
      46. ' Config Timer
      47. ' NONE
      48. '-------------------------
      49. ' Config Variablen / Konstanten
      50. Dim Sendezaehler As Byte
      51. Sendezaehler = 2 ' Anzahl der Sendungen --> Empfänger hat mehrere Versuche falls Synchronisierung nicht erfolgreich
      52. Dim Zaehler As Byte ' allgemeine Zählvariable
      53. Dim Schlafzaehler As Integer ' Zähler für Einschlafen wenn nicht bewegt
      54. Const Schlafjetzt = 5400 ' Ausschalten nach 5400 Zyklen --> ca 3h
      55. Dim Batteriezaehler As Integer ' Zähler für Batteriespannung messen
      56. Const Batteriejetzt = 100 ' Batteriespannung messen nach 100 Zyklen
      57. Dim Spannungsgrenze As Word ' Schaltschwelle am ADC
      58. Spannungsgrenze = 615 ' Bei Spannung < 3,3V abschalten
      59. Dim Messwert As Word ' gemessene Batteriespannung
      60. Dim Text As String * 2
      61. Text = "A"
      62. Dim I As Byte
      63. Dim J As Byte
      64. Dim Praeambel As Byte
      65. Dim Buchstabe As String * 1
      66. Dim Asciicode As Byte
      67. Dim Null As Byte
      68. Declare Sub Sendehf(b As Byte)
      69. Praeambel = &B10101010
      70. Null = 0
      71. '-------------------------
      72. ' Programmstart
      73. Anfang:
      74. For Zaehler = 1 To 10
      75. Toggle Led
      76. Waitms 500
      77. Next Zaehler
      78. Led = 0
      79. '-------------------------
      80. ' Hauptprogramm
      81. Do
      82. ' Überwachung Batteriespannung
      83. Incr Batteriezaehler
      84. If Batteriezaehler >= Batteriejetzt Then ' Zeit zur Batteriemessung? --> ja, mach es JETZT!
      85. Batteriezaehler = 0
      86. Spannungsteiler = 1 ' Spannungsteiler mit Spannung versorgen
      87. Start Adc ' Messen
      88. Waitms 10
      89. Messwert = Getadc(1)
      90. Messwert = Getadc(1)
      91. Stop Adc
      92. Spannungsteiler = 0 ' Spannungsteiler abschalten
      93. If Messwert < Spannungsgrenze Then ' in Tiefschlaf legen wenn Batterie leer
      94. Schlafzaehler = Schlafjetzt
      95. End If
      96. End If
      97. ' Betriebszeit überwachen
      98. Incr Schlafzaehler ' Betriebszeit erreicht? --> Einschlafen
      99. If Schlafzaehler > Schlafjetzt Then
      100. Batteriezaehler = Batteriejetzt ' Vorbereitung: beim nächsten Start Batterie messen
      101. Enable Int0 ' Rüttelschalter zum Aufwachen
      102. Config Powermode = Powerdown
      103. Disable Int0
      104. End If
      105. ' Befehle senden
      106. For Zaehler = 1 To Sendezaehler
      107. Gosub Senden
      108. Next
      109. ' Einschlafen in der inaktiven Zeit --> nur alle 2 Sekunden senden
      110. Config Watchdog = 2048 ' Verzögerung im Tiefschlaf
      111. Enable Watchdog
      112. Power Powerdown
      113. Disable Watchdog
      114. Loop
      115. End 'end program
      116. '-------------------------
      117. 'Senden
      118. Senden:
      119. Led = 1 ' Statusanzeige an
      120. Senderstrom = 0 ' Sender aus
      121. Call Sendehf(praeambel) ' Modulation starten zur Empfängersynchronisation
      122. For I = 1 To Len(text)
      123. Buchstabe = Mid(text , I , 1)
      124. Asciicode = Asc(buchstabe)
      125. Call Sendehf(asciicode) ' Modulation Nutztext
      126. Next I
      127. Call Sendehf(null) ' Modulation ENDE
      128. Senderstrom = 0 ' Sender aus
      129. Led = 0 ' Statusanzeige an
      130. Config Watchdog = 256 ' Verzögerung im Tiefschlaf --> 0,25 Sek Pause zwischen den Übertragungen
      131. Enable Watchdog
      132. Power Powerdown
      133. Return
      134. '-------------------------
      135. Sub Sendehf(b As Byte) ' Aufbereitung in Manchester-Code
      136. ' Manchesterkodierung
      137. For J = 0 To 7
      138. If B.j = 1 Then
      139. Senderstrom = 0
      140. Gosub Warte_1000
      141. Senderstrom = 1
      142. Gosub Warte_1000
      143. Else
      144. Senderstrom = 1
      145. Gosub Warte_1000
      146. Senderstrom = 0
      147. Gosub Warte_1000
      148. End If
      149. Next J
      150. End Sub
      151. '-------------------------
      152. ' Interrupt-Routinen
      153. Irq_int:
      154. Schlafzaehler = 0 ' Rüttelschalter ausgelöst --> Aufwachen und Zurückstellen
      155. Return
      156. '-------------------------
      157. ' Verzögerungen
      158. Warte_1000:
      159. Waitus 1000
      160. Return
      161. '-------------------------
      162. ' Versionsnummer ins EEPROM schreiben
      163. $eeprom
      164. Data "V2.01 01.Sept 2017" , "(C) by R.K"
      Display All
    • Jetzt kommt Teil 2, der Empfänger

      Anforderung:
      - Stromversorgung 5V via USB direkt aus dem PC
      - Funktionskontrolle durch DUO-LED
      --- grün Blinklicht --> Sender im Bereich
      --- rot Dauerlicht --> Sender ausser Bereich



      Umsetzung

      Auch das Datenblatt zum Empfänger war bei Pollin offiziell zum Download, sollte legal sein. Hab auch das Produkt gekauft.

      RX433_DATASHEET.pdf

      Und da stimmt jetzt das Schaltbild nicht, es ist kein ATTINY13 verbaut sondern einen ATTINY45.
      Ich hab einen 2. Timer benötigt, den hat der 13er nicht.

      Es ist jetzt so eingestellt dass 10 Sekunden nach dem Empfangsverlust der PORTB.3 für 50ms auf GND liegt und damit das USB-HID-Device triggert.
      Ich kann mich im Umkreis von etwa 3m um der Rechner bewegen dann bricht die Verbindung ab.
      Ab Verbindungsabbruch max 10 Sekunden und der Bildschirm sperrt.

      Passt doch.

      Interessant im Empfänger, der PIN3 muss mit einem 100k-Widerstand gegen GND beschaltet werden. Steht nur nirgendwo.
      Fehlt der Widerstand dann ist die Verstärkung so dermaßen hoch dass das Nutzsignal darin untergeht.

      Source Code

      1. '-------------------------
      2. ' Empfänger 433MHz für Monitorsperrung
      3. ' Stand 20.06.2017
      4. '
      5. ' Aufgabenstellung_
      6. ' Zyklisches Senden einer ASCII-Sequenz
      7. ' die vom 433MHz-Empfänger dekodiert wird
      8. ' Quelle Manchester-Codierung
      9. ' http://www.forum.g-heinrichs.de/viewtopic.php?f=12&t=76
      10. ' pin 1 = RESET
      11. ' pin 2 = PB3 logisch "0" --> Sendet Tastaturkommando
      12. ' pin 3 = PB4 vom Empfänger
      13. ' pin 4 = GND
      14. ' pin 5 = PB0 LED rot Empfangsverlust
      15. ' pin 6 = PB1 nicht verwendet --> TEST ONLY
      16. ' pin 7 = PB2 LED grün Empfang ok
      17. ' pin 8 = +5V
      18. '-------------------------
      19. ' FUSES
      20. ' Divide clock by 8: OFF
      21. ' Int RC-Oszillator: 8,0MHz
      22. $regfile = "ATtiny45.DAT"
      23. $crystal = 8000000
      24. $hwstack = 10
      25. $swstack = 10
      26. $framesize = 24
      27. '-------------------------
      28. ' Config Ports
      29. Config Portb.0 = Output ' PIN 5 Empfang ok
      30. Led_rot Alias Portb.0
      31. Config Portb.1 = Output ' PIN 6 Test only
      32. Test Alias Portb.1
      33. Config Portb.2 = Output ' PIN 7 Empfangsverlust
      34. Led_gruen Alias Portb.2
      35. Config Portb.3 = Output ' PIN 2 Tastatursignal zum HID-Device
      36. Tastatur Alias Portb.3
      37. Config Portb.4 = Input ' PIN 3 vom Empfänger
      38. Empfang Alias Pinb.4
      39. '-------------------------
      40. ' Config ADC
      41. '-------------------------
      42. ' Config Variablen
      43. Dim Zaehler As Word ' Zählt Durchläufe
      44. Const Zaehler_grenze = 400 ' Anzahl Durchläufe bis Bildschirmsperre (400 x 25msec = 10 sek)
      45. Dim Trigger As Byte ' nur 1x Tastaturkommando senden
      46. Dim Pulsdauer As Word
      47. Dim Text As String * 4
      48. Dim I As Byte
      49. Dim J As Byte
      50. Dim K As Byte
      51. Dim Pegel As Bit
      52. Dim Buchstabe As String * 1
      53. Dim Asciicode As Byte
      54. Dim Ergebnis As Byte
      55. '-------------------------
      56. ' Config Subs und Functions
      57. Declare Sub Wait_for_praeambel
      58. Declare Function Empfange_hf() As Byte
      59. '-------------------------
      60. ' Config Timer
      61. Config Timer0 = Timer , Prescale = 256 ' für Flankenauswertung
      62. Config Timer1 = Timer , Prescale = 1024 ' Für Auswertung Funkunterbrechung
      63. On Timer1 Timer_irq
      64. Const Timerpreload = 61 ' 25msec
      65. Timer1 = Timerpreload
      66. '-------------------------
      67. ' Hauptprogramm
      68. Zaehler = 0
      69. Trigger = 0
      70. Do
      71. Call Wait_for_praeambel()
      72. Text = ""
      73. If Zaehler > Zaehler_grenze Then Goto Ausgabe
      74. For I = 1 To 5
      75. Asciicode = Empfange_hf()
      76. If Asciicode = 0 Then Goto Ausgabe
      77. Buchstabe = Chr(asciicode)
      78. Text = Text + Buchstabe
      79. Next I
      80. Ausgabe:
      81. If Text = "A" Then ' Signal erkannt
      82. Led_rot = 0
      83. Led_gruen = 1
      84. Gosub Pause_50
      85. Gosub Pause_50
      86. Led_gruen = 0
      87. Zaehler = 0 ' bei NULL beginnen
      88. Trigger = 0 ' Ausgelöst rücksetzen
      89. End If
      90. If Trigger = 0 And Zaehler > Zaehler_grenze Then ' Empfangsverlust > 15 sek
      91. Trigger = 1
      92. Led_rot = 1
      93. Led_gruen = 0
      94. Tastatur = 0 ' Tastaturkommando auslösen durch LOW
      95. Gosub Pause_50
      96. Tastatur = 1 ' Tastaturkommando abschalten
      97. Gosub Pause_50
      98. Zaehler = 0
      99. End If
      100. Loop
      101. End 'end program
      102. '-------------------------
      103. ' Dekodierung
      104. Function Empfange_hf() As Byte
      105. Gosub Pause_500
      106. For J = 0 To 7
      107. If Empfang = 1 Then
      108. Ergebnis.j = 0
      109. Do
      110. Loop Until Empfang = 0
      111. Else
      112. Ergebnis.j = 1
      113. Do
      114. Loop Until Empfang = 1
      115. End If
      116. If J < 7 Then Waitus 1500
      117. Next J
      118. Gosub Pause_500
      119. Gosub Pause_500
      120. Empfange_hf = Ergebnis
      121. End Function
      122. '-------------------------
      123. Sub Wait_for_praeambel()
      124. Start Timer0
      125. Timer1 = Timerpreload
      126. Enable Timer1
      127. Enable Interrupts
      128. Zaehler = 0
      129. Anfang:
      130. ' Bit 0
      131. Do
      132. If Zaehler > Zaehler_grenze Then Goto Absprung
      133. Loop Until Empfang = 1
      134. Do
      135. If Zaehler > Zaehler_grenze Then Goto Absprung
      136. Loop Until Empfang = 0
      137. Timer0 = 0
      138. Pegel = 1
      139. For K = 1 To 7
      140. ' Bit 1 - 7
      141. Do
      142. If Zaehler > Zaehler_grenze Then Goto Absprung
      143. Loop Until Empfang = Pegel
      144. Pulsdauer = Timer0
      145. Timer0 = 0
      146. If Pulsdauer < 54 Then Goto Anfang ' kleiner als 1,75 ms
      147. If Pulsdauer > 71 Then Goto Anfang ' größer als 2,25 ms
      148. Toggle Pegel
      149. Next K
      150. Absprung:
      151. Stop Timer0
      152. Timer0 = 0
      153. Disable Timer1
      154. Timer1 = Timerpreload
      155. Disable Interrupts
      156. ' Ende der Präambel
      157. Gosub Pause_500
      158. Gosub Pause_500
      159. End Sub
      160. '-------------------------
      161. ' Taktgeber 25msec
      162. Timer_irq:
      163. Timer1 = Timerpreload
      164. Incr Zaehler
      165. Toggle Test
      166. Return
      167. '-------------------------
      168. Pause_50:
      169. Waitms 50
      170. Return
      171. Pause_500:
      172. Waitus 500
      173. Return
      174. '-------------------------
      175. ' Versionsnummer
      176. $eeprom
      177. Data "V2.01 01.Sept 2017" , "(C) by R.K"
      Display All
    • Mal vorab, es ist keine Übertragung die irgendwelchen Sicherheitsansprüchen genügt.
      Alles läuft im Klartext ab. Aber ich glaube es ist äusserst unwahrscheinlich dass hier ein Hacker ein gewinnbringendes Ziel findet.
      Zumal sich das ja alles in meinem unmittelbaren Umfeld abspielt.

      Was kann schlimmstenfalls passieren? Der Bildschirm sperrt nicht automatisch.
      Also das gleiche wenn ich das manuelle Sperren vergesse.
      Nach 5 Minuten zieht die Policy des Rechners; dann ist das Ding sowieso dicht.



      Kurz mal zum Timing des Senders

      Um den Stromverbrauch des Senders in Grenzen zu halten und auch das 433MHz-Frequenzband nicht allzuviel zuzumüllen läuft das nach diesem Schema:

      Start:
      - Messen der Akkuspannung alle 100 Durchläufe (etwa alle 4,5 Minuten)

      - Senden der Präambel --> 25ms
      - Senden Nutztext --> 25ms
      - Pause 256ms via Watchdog-Timer
      - Senden der Präambel --> 25ms
      - Senden Nutztext --> 25ms
      - Pause via Watchdog-Timer -->256ms
      Es hat sich gezeigt dass die Synchronisierung nicht immer funktioniert. Deshalb 2x

      - Pause via Watchdog-Timer --> 2048ms

      Ein kompletter Zyklus liegt also bei grob 2800ms wobei für 100ms HF abgestrahlt wird.
      Sind dann 3,5% Belegungsdauer. Könnte man noch dran drehen.
    • Jetzt zum Teil 3, dem HID-Device.

      Die Quellen hatte ich ja schon im 1. Post beschrieben
      Elektronik-labor --> USBbascom

      Es ist dort sehr gut beschrieben, auch die Eigenarten und die Lizenzthematik.

      Benötigt wird die Lib "swusb.lbx". Hier bin ich mir nicht sicher inwieweit ein Copyright verletzt wird wenn ich das hier einstelle.
      Also lass ich das bleiben, Tante Google findet die Quelle auch so.

      Nach dem Einstecken des USB-Steckers dauert es einige Sekunden bis das Device vom Betriebssystem erkannt wird (getestet unter W10_Home und W10_Ultimate)

      Screenshot_ollopas.jpg

      Am USB2-Port funktioniert es prima an USB3 tut sich nix.

      Ganz ehrlich, ich habe keine Ahnung wie das im Detail funktioniert.
      Auf jeden Fall Hut ab und größter Respekt dem Entwickler dieses Programmes. a_17_af3b400f

      Nach etwas Suchen findet man auch die Einsprungpunkte um das für seine Zwecke zu modifizieren (Ab Zeile 261)
      Ab Zeile 344 kommen die KeyCodes ins Spiel die gesendet werden sollen.
      In meinem Fall sende ich WIN+L was den Bildschirm sperrt.

      Der Quelltext hat um einiges mehr als 10000 Zeichen; hier also das als Download

      USB_HID_20170810.bas
    • Lessons learned:

      Würde ich das nochmal machen dann mit diesen Änderungen:

      1) Ein vernünftiger Sender, entweder RFM12 bzw der Nachfolger oder gleich mit Bluetooth
      Das von mir verwendete Teil ist instabil, hat nur AM und reagiert extrem auf Abschirmung des Körpers.
      Möglicherweise hab ich auch nur eine seltsame Baureihe/Bauform erwischt. Diese Art der Sender/Empfänger sind ja
      auch millionenfach in Funksteckdosen, Funkklingeln, Wetterstationen etc verbaut. Da funktioniert es ja auch.

      2) Den Sender kleiner bauen dass er auch in die Hemdtasche passt

      3) Den Empfänger mit Funktionstasten ausstatten.
      Wenn ich schon so ein Teil habe warum nicht mit zusätzlichen Funktionen ausstatten für ständig wiederkehrende Aktionen?


      -- ENDE meines Monologs a_41_9c830c38 --
    • Riedleweg wrote:

      auch millionenfach in Funksteckdosen, Funkklingeln, Wetterstationen etc verbaut.
      Und genau das kann deinen Empfänger blokieren. Ich habe das schon mal getestet, mit eine Systemfremden Funkfernbedienung habe ich einen anderen Empfänger gestört der dann auf das eigentliche Signal nicht mehr reagiert hat.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Ein schönes Projekt und auch ein gutes Beispiel wenn man das gerne mal selber ausprobieren möchten. :thumbup:

      Riedleweg wrote:

      Also jedesmal den Bildschirm sperren. Irgendwann vergisst man das halt. Is blöd.
      Spätestens, wenn deine Kollegen über deinen offenen Rechner Einladungen zum Kantinenfrühstück verschicken, vergisst du das nicht mehr ;)

      Riedleweg wrote:

      Was kann schlimmstenfalls passieren?
      Mach doch mal eine Risikoanalyse ;)
      -Der Akku könnte abbrennen
      -CE fehlt
      -Softwareeinsatz im gewerblichen Bereich
      -der Admin könnte es merken und deinen PC für Gadgets sperren

      Letzteres wäre für mich auch blöd, da ich gerne diverse Hilfsmittel an den Firmen-PC andocke.

      Die Ladeschaltung ist imho noch ausbaufähig, ich hätte als Gehäuse vielleicht gleich eine kleine Powerbank genutzt, die hat das drin.

      Mach weiter so ;)
    • djmsc wrote:

      Und genau das kann deinen Empfänger blockieren. Ich habe das schon mal getestet, mit eine Systemfremden Funkfernbedienung habe ich einen anderen Empfänger gestört der dann auf das eigentliche Signal nicht mehr reagiert hat.


      An das hatte ich auch gedacht und das lange Zeit mit dem Oszi beobachtet ob da noch irgendwas überlagert ist. War es nicht.
      Auszuschliessen ist es damit aber nicht, ich sehe ja nur den Ausgang.

      Der Empfänger verschleift (manchmal) die Flanken. Ich werd da irgendwann mal einen Schmitt-Trigger dazwischenklemmen, mal sehen ob das was hilft.

      Aber wie schon geschrieben, es läuft und mit dem Schönheitsfehler kann ich leben.