Das Lesen von Texten über das Kabel

Beim Lesen der Signale muss man sich zunächst fragen, in welchem Rhythmus das Kabel abgefragt werden soll. Im folgenden Quelltext wird alle 50ms abgefragt, was der 10-fachen Geschwindigkeit des Senders entspricht. Daher sollte jedes Bit 10 Mal gelesen werden. Dies ist im Quelltext entsprechend durch die Variable countberücksichtigt:

empfangsliste = []                  # Liste zum Protokollieren
last = 0                            # der letzte gelesene Wert
count = 0
while true:                         # Empfangsschleife
  if GPIO.input(19):                # eine 1 liegt an ?
     if last == 0:                  # Flankenwechsel AUS -> AN ?
        if count > 4:               # nennenswerte Dauer der letzten 0 ?
           empfangsliste.append(0)  # 0 protokollieren
        count = 0                   # neu zaehlen
     last=1
     count=count+1
     if count > 9:                  # lange Serie ohne Flankenwechsel ?
        empfangsliste.append(1)     # 1 protokollieren
        count = 0
  else:                             # eine 0 liegt an!
     if last == 1:                  # Flankenwechsel AN -> AUS ?
        if count > 4:
           empfangsliste.append(1)  # 1 protokollieren
        count = 0
     last=0
     count=count+1
     if count > 9:                  # lange Serie ohne Flankenwechsel
        empfangsliste.append(0)     # 0 protokollieren
        count = 0
  sleep(0.05)
Zudem werden in diesem Programmausschnitt alle gelesenen Bits in der empfangsliste festgehalten.

Aufgabe 1

Baue den Quelltext und das Grundgerüst aus Abschnitt 11.5.4.1 zu einem Gesamtprogramm zusammen und überprüfe die Richtigkeit durch passende Ausgaben beim Empfang eines geeigneten Senderprogramms aus dem vorigen Abschnitt!

Berücksichtigung des Startsignals

Durch den folgenden Quelltext kann zu Beginn auf das Startsignal (die Bitfolge 00000001) gewartet werden.

while GPIO.input(19) == 0:  # warten auf das Startsignal (Pegel = 1)
    last = 0
sleep(0.6)                  # großzügiges Warten auf das Ende der 1 
last = GPIO.input(19)       # Anfangswert für last
Danach kann mit dem Protokollieren der empfangenen Bits begonnen werden.

Zusammenbau des Textes

In der Empfangsschleife kann man nun abwarten, bis 8 Bits (ein Byte) protokolliert sind und diese dann entsprechend in eine Zahl und ein Textzeichen zurückwandeln.

Das Abtrennen eines Bytes wird durch Listenoperationen realisiert:

  if len(empfangsliste) >= 8:         # mindestens 8 Bit empfangen
     einbyte=empfangsliste[0:8]          # erste 8 Elemente kopieren
     nummer=umwandeln(einbyte)           # Umwandlung Bin -> Dec
     text = text + chr(nummer)        # gelesenes Zeichen anhängen
     empfangsliste=empfangsliste[8:]  # ersten 8 Elemente löschen 

Aufgabe 2

Baue den Quelltext in das Gesamtprogramm ein. Implementiere zusätzlich das Unterprogramm umwandeln(code). Teste wieder ausführlich an geeigneten Sendeprogrammen.

Aufgabe 3

Jetzt fehlen noch 2 Ergänzungen zum kompletten Empfangsprogramm: zum einen muss die Empfangsschleife enden, wenn das Stoppsignal empfangen wird und zum anderen muss noch das Paritätsbit geprüft werden. Dabei ist jedoch zu beachten, das dann 9 statt 8 Bits gemeinsam gelesen und verarbeitet werden müssen.

X

Fehler melden

X

Suche