Forum: Mikrocontroller und Digitale Elektronik 433 MHz Sender - klare Flanken


von Sascha M. (sascham)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe eine Intertechno Funkfernbedienung ausgelesen. (Nach einigen 
Problemen die Lösung hier: 
Beitrag "433 MHz SDR Signal dekodieren").

Nun möchte ich das Signal replizieren.

Im Anhang sind beide Signale (ausgelesen mit Universal Radio Hacker) 
dargestellt. Oben das Signal der Fernbedienung und unten das replizierte 
Signal.

Ich bekomme leider die Flanken nicht richtig gesendet. Wie kann man ein 
klares "1-Bit" bzw. An-Signal senden?

Hier der Python Code (realisiert über Raspberry PI 3):
1
import time
2
import sys
3
import RPi.GPIO as GPIO
4
5
a_on = 's1001111101011111000010010010000'
6
a_off = 's1001111101011111000010010000000'
7
b_on = 's1001111101011111000010010010001'
8
b_off = 's1001111101011111000010010000001'
9
10
#1 = short_on + short_off
11
#0 = short_on + long_off
12
13
short_on = 0.00025
14
short_off = 0.0003
15
long_off = 0.00132
16
s_bit_off = 0.00295
17
extended_delay = 0.1
18
19
20
NUM_ATTEMPTS = 5
21
TRANSMIT_PIN = 23
22
23
def transmit_code(code):
24
  '''Transmit a chosen code string using the GPIO transmitter'''
25
  GPIO.setmode(GPIO.BCM)
26
  GPIO.setup(TRANSMIT_PIN, GPIO.OUT)
27
  for t in range(NUM_ATTEMPTS):
28
    for i in code:
29
      if i == 's':
30
        GPIO.output(TRANSMIT_PIN, 1)
31
        time.sleep(short_on)
32
        GPIO.output(TRANSMIT_PIN, 0)
33
        time.sleep(s_bit_off)
34
      if i == '0':
35
        GPIO.output(TRANSMIT_PIN, 1)
36
        time.sleep(short_on)
37
        GPIO.output(TRANSMIT_PIN, 0)
38
        time.sleep(long_off)
39
      elif i == '1':
40
        GPIO.output(TRANSMIT_PIN, 1)
41
        time.sleep(short_on)
42
        GPIO.output(TRANSMIT_PIN, 0)
43
        time.sleep(short_off)
44
      else:
45
        continue
46
    GPIO.output(TRANSMIT_PIN, 0)
47
    time.sleep(extended_delay)
48
  GPIO.cleanup()
49
50
if __name__ == '__main__':
51
    for argument in sys.argv[1:]:
52
        exec('transmit_code(' + str(argument) + ')')

Mein anderes Anliegen: Die Fernbedienung sendet auf 433.868170 MHZ. Das 
ausgelesene Signal meines Senders erscheint bei 434 MHZ. Wird der 
Bandbreitenabstand mir ein Strich durch die Rechnung machen?

: Bearbeitet durch User
von Help (Gast)


Lesenswert?

Sascha M. schrieb:
> Ich bekomme leider die Flanken nicht richtig gesendet. Wie kann man ein
> klares "1-Bit" bzw. An-Signal senden?

Nimm einen Arduino, der kann das.

Einen Grossrechner zum Erzeugen von ein paar Bits .... neee ...

von Sascha M. (sascham)


Lesenswert?

Help schrieb:
> Sascha M. schrieb:
>> Ich bekomme leider die Flanken nicht richtig gesendet. Wie kann man ein
>> klares "1-Bit" bzw. An-Signal senden?
>
> Nimm einen Arduino, der kann das.
>
> Einen Grossrechner zum Erzeugen von ein paar Bits .... neee ...

Würdest du bitte kurz erläutern, warum das ein Rasp nicht kann und an 
was das liegt?

von Clock (Gast)


Lesenswert?

Das genaue Timing ist mit Linux kaum zu machen, ein AVR ist da besser.
Echtzeitfähigkeit btw. Könnte daran liegen.

von Mike (Gast)


Lesenswert?

>Würdest du bitte kurz erläutern, warum das ein Rasp nicht kann und an was das 
liegt?
Das Problem ist nicht der Raspi, sondern das Betriebssystem Linux. Es 
ist nun mal kein Echtzeitsystem, jeder laufende Prozess kann 
unterbrochen werden, um andere Aufgaben zu erledigen. Die 
"sleep"-Funktion garantiert nur eine Mindestwartezeit, die Nachtruhe 
kann aber auch deutlich länger dauern.
Shcau mal hier: 
https://www.mikrocontroller.net/article/Hardwarenahe_Programmierung_am_Raspberry_Pi
Vielleicht hilft es schon, die Priorität Deines Prozesses auf einen 
möglichst hohen Wert zu setzen.

von Mike (Gast)


Lesenswert?


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.