Aus Raspberry Pi Geek 08/2022

Datenverkehr mit dem Speicheroszilloskop analysieren (Seite 4)

PWM

Ein Raspberry Pi kennt verschiedene Modi, um Signale pulsweitenmoduliert auszugeben. Listing 5 zeigt ein Programm, das eine LED mit einer Ansteuerung von 100 Hz in der Helligkeit dimmt.

Listing 5

dimmen.py

#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
ledpin = 32
GPIO.setmode(GPIO.BOARD)
GPIO.setup(ledpin,GPIO.OUT)
pi_pwm = GPIO.PWM(ledpin,100)
pi_pwm.start(0)
print('start')
while True:
  print('up')
  for duty in range(0,101,1):
    pi_pwm.ChangeDutyCycle(duty)
    time.sleep(0.01)
    print(duty, end= ' ')
  print('down')
  for duty in range(100,-1,-1):
    pi_pwm.ChangeDutyCycle(duty)
    time.sleep(0.01)
    print(duty, end= '-')

Die Oszillogramme einer hell (Abbildung 10) und einer dunkel leuchtenden LED (Abbildung 11) unterscheiden sich in den Pausenzeiten. In den Abbildungen farbig hinterlegt sind die Intervalle, während derer die LED leuchtet.

Abbildung 10: Ein PWM-Signal mit 100 Hz einer hell leuchtenden LED. Durch die Länge der Pause wird die LED gedimmt.

Abbildung 10: Ein PWM-Signal mit 100 Hz einer hell leuchtenden LED. Durch die Länge der Pause wird die LED gedimmt.

Abbildung 11: Dasselbe PWM-Signal mit 100 Hz, allerdings mit längeren Pausen und somit einer weniger hell leuchtenden LED.

Abbildung 11: Dasselbe PWM-Signal mit 100 Hz, allerdings mit längeren Pausen und somit einer weniger hell leuchtenden LED.

I<+>2<+>C

Standardmäßig liegt die Taktrate des I2C-Busses eines Raspberry Pi bei 100 kHz. Tatsächlich arbeiten viele Sensoren auch mit bis zu 400 kHz. Da aber das Protokoll Timing-Fehler nicht erkennt, sollte man nur in besonderen Fällen höherschalten.

Möchten Sie die Arbeitsgeschwindigkeit ändern, öffnen Sie mit sudo nano /boot/config.txt die Konfigurationsdatei des Raspberry Pi im Standardeditor und passen den in Listing 6 gezeigten Abschnitt an. Die dort gezeigten Werte ändern die Taktrate auf 40 kHz, also auf 10 Prozent des maximal möglichen Werts. Eine Messung mit dem Oszilloskop bestätigt die Wirksamkeit der Umschaltung (Abbildung 12).

Listing 6

/boot/config.txt

[...]
#dtparam=i2c_arm=on
dtparam=i2c_arm=on,i2c_arm_baudrate=40000
[...]
Abbildung 12: Das auf 40&nbsp;kHz gedrosselte <span class="ui-element">CLK</span>-Taktsignal der I<sup>2</sup>C-Schnittstelle.

Abbildung 12: Das auf 40 kHz gedrosselte CLK-Taktsignal der I2C-Schnittstelle.

RS-232

An den Eingängen eines Raspberry Pi dürfen nicht mehr als 3,5 Volt anliegen. Wie aber misst man die Spannung, wenn man ein externes Gerät über die serielle Schnittstelle der GPIO ansprechen will? Es kann sein, dass die mittlere Spannung niedriger ausfällt als die Pegel, wenn das Gerät sendet. Hier gibt ein Oszilloskop unmittelbar Auskunft.

Die Befehle in Listing 7 identifizieren ein über die USB-Buchsen des Raspberry Pi angeschlossenes Gerät. Das Tool Dmesg nennt den Namen der Schnittstelle, hier ttyUSB0. Der zweite Befehl erkennt die Baudrate, mit der die Datenübertragung erfolgt, hier sind es 9600 Baud. Ein Bit wird demnach in 1/9600 Sekunden (also 104 Mikrosekunden) übertragen.

Listing 7

RS-232

$ dmesg | tail
[...]
usb 1-1.3: cp210x converter now attached to ttyUSB0
$ stty -F /dev/ttyUSB0
speed 9600 baud; line = 0;
-brkint -imaxbel

Diesen Wert zeigt auch das Oszillogramm (Abbildung 13). Das beantwortet die häufig gestellte Frage, ob tatsächlich 9600 Bit pro Sekunde übertragen werden. Die Netto-Datenrate liegt um mindestens 20 Prozent niedriger, da ein Datenwort von einem Start- und mindestens einem Stoppbit umschlossen wird.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben