Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

Kinderleichte periphere Schnittstellenverbindung mit Pi, Python und Pmods!

PPP_Featured_5339015e4612be9dba8d0396eb89ebb3ca92a7d2.jpg

Die perfekte Kombination zur Erstellung peripherer Schnittstellen in kürzester Zeit.

Das Pmod – Peripheriemodul – ist ein offener Spezifikationsstandard von Digilent, der für die Anbindung von Peripheriegeräten an FPGA und Mikrocontroller-Hostplattformen konzipiert ist. Es ist in 6- und 12-poliger Ausführung erhältlich, hat einen typischerweise kompakten Formfaktor und bietet eine elegante Lösung für den Systemversuchsaufbau. Viele Techniker sind im Besitz mindestens einer kleinen Auswahl von Pmods.

So wie die Vielfalt der verfügbaren Pmods es möglich macht, schnell Prototypen für eine Vielzahl von Hardwarekonfigurationen herzustellen, ermöglicht die gut zugängliche Programmiersprache Python mit ihrem ertragreichen Software-Ökosystem die schnelle Erstellung von Anwendungsprototypen.

Geben Sie einen Raspberry Pi dazu, und Sie haben eine leistungsstarke Plattform zur Prototypenerstellung. Allerdings gibt es bei Hardware und Software einige Aspekte, die Integration und schnelle Prototypenerstellung noch etwas vereinfachen. Beginnen wir also mit Ersterem und behandeln die Pmod HAT!

DesignSpark Pmod HAT

PmodHAT_48594c4bdf4933b34dbcb1b10dbeff4255178dac.jpg

Die Pmod HAT (144-8419) verfügt über drei 2x6-polige Pmod-Ports mit Unterstützung für I2C-, SPI-, UART- und GPIO-Schnittstellen. Sie kann mit jedem Modell des Raspberry Pi verwendet werden, das über einen 40-poligen GPIO-Steckverbinder verfügt, wobei die Stromversorgung entweder über diesen oder einen Hohlstecker und ein externes 5-V-DC-Netzteil erfolgt.

Die Ports sind wie folgt gekennzeichnet:

  • JA: Unterstützt SPI- und GPIO-Pmods.
  • JB: Unterstützt SPI- und GPIO-Pmods sowie 6-polige I2C-Pmods in der unteren Reihe.
  • JC: Unterstützt UART- und GPIO-Pmods.

Es gibt außerdem zwei Steckbrücken:

  • JP1 und JP2: Ermöglicht Pull-up-Widerstände auf JB2 I2C bei Kurzschluss.
  • JP3: Ermöglicht das Schreiben in den integrierten EEPROM.

Der EEPROM speichert ein Gerätebaumfragment, das zur Identifizierung der Platine und entsprechenden Konfiguration von Betriebssystem und Treibern dient. Für diejenigen, die nicht mit dem Konzept des Gerätebaums vertraut sind: Es handelt sich hierbei um eine kompilierte Datenbank, die zur Beschreibung eines ARM-basierten Systems dient und Funktionen bereitstellt, die dem BIOS eines Intel/AMD-Computers ähneln. Diese wird nur bei weiter fortgeschrittenen Anwendungsbeispielen geändert.

Nun haben wir auf komfortable Weise die Hardware zusammengebaut, die verhindert, dass wir unschöne Steckbrückendrähte verwenden müssen, wie steht es nun mit der Software? Gehen wir zum DesignSpark.Pmod über!

DesignSpark.Pmod

DesignSpark_Pmod_Library_dc6a737211ce0a7c54df11baec550eaff97b67a2.jpg

DesignSpark.Pmod ist eine Python-Bibliothek mit folgenden Eigenschaften:

  • Sie bietet einfache, einheitliche Schnittstellen für unterstützte Pmods.
  • Sie überprüft, ob Pmod- und Port-Funktionen übereinstimmen.
  • Sie überprüft auf Konflikte bei der Portnutzung.
  • Sie wird mit Beispielen für den Einstieg bereitgestellt.

Pin-Multiplexing ist Standard bei vielen (den meisten?) modernen SoCs und kann für eine große Flexibilität sorgen; jedoch ist dafür eine anfängliche Einrichtung zum Konfigurieren der E/A-Stifte für Ihre spezielle Verwendung erforderlich. Pmods lassen sich mit einer Reihe unterschiedlicher Methoden verbinden, und wenn man diese beiden Dinge kombiniert, bedeutet das, dass Sie darauf achten müssen, z. B. SPI- und GPIO-Pmod nicht mit Ports zu verbinden, die Host-E/A-Pins gemeinsam nutzen, was zu einem Setup-Konflikt führen würde.

Die Bibliothek überprüft, ob ein Pmod von einem bestimmten Anschluss auf der HAT unterstützt wird und ob diese Verwendung nicht zu einem Konflikt führen würde. Die erste Version bietet außerdem eine komfortable Schnittstelle für 6 Pmods, und die Bibliothek wurde so entwickelt, dass sie erweitert werden kann, um noch mehr zu unterstützen.

Einbau

PPP_pip-install_29e9d84dd7beb941ba2aac80c14e823ba9539c25.jpg

 

Zunächst müssen wir dafür sorgen, dass SPI aktiviert ist. Dies kann mithilfe von raspi-config erfolgen.

$ sudo raspi-config

Auswahl:

  • Option 5 – Schnittstelle
  • P4 – SPI
  • Aktivieren → JA

Als Nächstes müssen wir ein paar Abhängigkeiten des Raspbian-Build installieren:

$ sudo apt-get update

$ sudo apt-get install python-pip python-dev libfreetype6-dev libjpeg-dev build-essential

Abschließend können wir auch den Python Package Manager verwenden, um DesignSpark.Pmod und die Abhängigkeiten zu installieren:

$ sudo -H pip install designspark.pmod


Hinweis: Die offiziellen Dokumente finden Sie unter

Diese Website sollte immer als Referenz für die aktuelle Dokumentation herangezogen werden.

Die zugehörige PyPi-Projektseite und das GitHub-Entwicklungs-Repository befinden sich unter:


Schnittstellenanbindung mit Pmods

Zum Zeitpunkt der Erstellung dieses Dokuments werden sechs Pmods von der Bibliothek unterstützt, und nun werfen wir einen kurzen Blick auf sie und auf die grundlegenden Methoden für ihre Schnittstellenanbindung.

PmodAD1

PmodAD1-oblique_d6fec91453981860a2c38fa802d01913d7ecd883.jpg 

 

 

 

 

 

 

 

 

 

 

PmodAD1 (134-6443)  ist ein Zweikanal-12-Bit-ADC, das über ein Analog Devices AD7476A mit einer Abtastrate von bis zu 1 Million Abtastwerte pro Sekunde sowie eine 6-polige SPI-Pmod-Schnittstelle verfügt.

Zum Auslesen daraus brauchen wir nur die Bibliothek importieren, ein Objekt mit dem AD1-Modul auf einem geeigneten Port erstellen und dann die readA1Volt()-Methode anzuwenden, um einen ADC-Messwert zu erhalten. Beispiel:

from DesignSpark.Pmod.HAT import createPmod

adc = createPmod('AD1','JBA')

volts = adc.readA1Volts()
print(volts)

In diesem Beispiel wird der Port „JAA“ verwendet, bei dem es sich um die oberste Zeile des 2x6-poligen JA-Steckverbinders handelt.

Beachten Sie, dass aufgrund der Art der SPI-Konfiguration bei Verwendung mit einem Pi derzeit nur ADC-Kanal A1 unterstützt wird.

PmodHB3

PmodHB3-oblique_5087382f1a57ac745e1018eed9c4156fc16224d2.jpg

 

 

 

 

 

 

 

 

 

 

 

 

Das PmodHB3 (Digilent Artikelnr.410-069) ist eine 2A-H-Brückenschaltung für DC-Motoren mit bis zu 12 V mit einer 6-poligen GPIO-Schnittstelle.

Wieder importieren wir die Bibliothek und drehen dann den Motor einfach in Vorwärtsrichtung:

motor = createPmod('HB3','JAA')
motor.forward(20)

Die für die Vorwärts-Methode angegebene Zahl ist der Arbeitszyklus. Es gibt auch Methoden zum Drehen in Rückwärtsrichtung, zum Stoppen, zum Ändern der PWM-Frequenz und zum Bereinigen.

PmodISNS20

PmodISNS20-oblique_390f5a7c02d694d4e33983cefdd69b1c6f27bfe9.jpg

Wie das AD1 ist das Pmod ISNS20 (136-8069) ein weiteres 6-poliges SPI-Pmod, jedoch ist dieses ein hochpräziser Stromfühler mit ±20A-DC- oder AC-Eingang. Nach dem Importieren der Bibliothek gehen wir zum Auslesen folgendermaßen vor:

isens = createPmod('ISNS20','JBA')
mA = isens.readMilliAmps()
print(mA)

Ein Kinderspiel.

MIC3

PmodMIC3-oblique_5e9140d1b3eea171f7e4b73ffdf9991e23aa1815.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Mittlerweile sollten Sie daran gewöhnt sein, und um einen ganzzahligen Wert aus dem PmodMIC3 (Digilent Artikelnr.410-312) ADC auszulesen, importieren wir die Bibliothek und gehen folgendermaßen vor:

mic = createPmod('MIC3','JBA')
int = mic.readIntegerValue()
print(int)

 

OLEDrgb

PmodOLEDrgb-oblique_f78f8fa64b94653a6a0b33276294b34ac7e2f73c.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Das PmodOLEDrgb (134-6481)  ist ein organisches RGB-LED-Modul mit 96x64-Pixel-Anzeige und einer Farbauflösung von bis zu 16 Bit. Es ist das erste 12-polige Pmod, mit dem wir es zu tun haben. Es ist auch das erste, dessen Verwendung einige zusätzliche Bibliotheken erfordert.

Um „Hello, World!“ in einem Begrenzungsrahmen zu schreiben, gehen wir folgendermaßen vor:

from DesignSpark.Pmod.HAT import createPmod
from luma.core.render import canvas
from luma.oled.device import ssd1331
oled = createPmod('OLEDrgb','JA')
device = oled.getDevice()
        
with canvas(device) as draw:
   draw.rectangle(device.bounding_box, outline="white", fill="black")
   draw.text((16,20), "Hello, World!", fill="white")
    
   while True:
      pass

Die Bibliotheken luma.core und luma.oled bieten viele großartige Funktionen, die mit diesem Pmod verwendet werden können, und es empfiehlt sich sehr, die zugehörige Dokumentation zu konsultieren.

TC1

PmodTC1-oblique_7408c3491872fae9f9c23f40a13eda5fcf703a63.jpg

 

 

 

 

 

 

 

 

 

 

 

 

Das PmodTC1 (134-6476)  ist ein weiteres 6-poliges SPI-Pmod. Es verfügt über ein Kaltlötstellen-Thermoelement-Digitalwandler für einen Thermoelementdraht des Typs K. Der mit dem Modul bereitgestellte Draht bietet einen beeindruckenden Temperaturbereich von –73 °C bis 482 °C.

Nach dem Import der Bibliothek zum Auslesen gehen wir folgendermaßen vor:

therm = createPmod('TC1','JBA')
cel = therm.readCelcius()
print(cel)

 

Vollständige grundlegende Beispiele für jedes der oben genannten Pmods sowie einige etwas weiter fortgeschrittene – u. a. ein Beispiel mit einem analogen Ziffernblatt für das OLEDrgb-Modul – werden zusammen mit der API-Dokumentation unter Read the Docs bereitgestellt.

Fazit

Dank der DesignSpark Pmod HAT und der unterstützenden Bibliothek können wir jetzt also mit einem Raspberry Pi und Python schneller als je zuvor Pmods verbinden und Anwendungsprototypen erstellen. Es sollte nun auch relativ unkompliziert sein, Unterstützung für zusätzliche Pmods zur Bibliothek hinzuzufügen, und wenn Sie Unterstützung für ein für ein neues Modul bieten möchten, melden Sie sich.

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin