Startseite>Teil 9: Analog-Digital-Wandler PCF8591
Aus Raspberry Pi Geek 04/2016

Teil 9: Analog-Digital-Wandler PCF8591

© Marc Torrell Faro, 123RF

Durchgestuft

Martin Mohr

Mit dem PCF8591 schlagen Sie eine Brücke zur analogen Welt. Allerdings will der Einsatz gut bedacht sein.

Bisher ging es in unserer Reihe zum I2C-Bus nur um rein digitale Halbleiterbausteine. Mit dem PCF8591 kommt nun zum ersten Mal ein A/D-D/A-Wandler ins Spiel. Dabei handelt es sich um einen relativ einfachen Wandler mit 8 Bit Auflösung, was für viele Anwendungen völlig genügt.

Der PCF8591 verfügt über vier analoge Eingänge sowie einen analogen Ausgang und kommt in einem bastlerfreundlichen DIL-16-Gehäuse daher (Abbildung 1). Der Chip verfügt über drei Adressleitungen, sodass Sie theoretisch an einem I2C-Bus acht dieser Bausteine betreiben können, die dann die Adressen 0x48 bis 0x4F belegen.

Abbildung 1: Das Pinout des PCF8591.

Abbildung 1: Das Pinout des PCF8591.

Der PCF8591 arbeitet in Bezug auf die Spannung in einem Bereich von 2,6 bis 6 Volt. Der Messbereich reicht von 0 Volt bis zur eigenen Betriebsspannung. Sie steuern alle Funktionen über ein Kontrollregister; die Tabelle “PCF8591: Steuerregister” zeigt die Bedeutung der einzelnen Bits.

PCF8591: Steuerregister

Bit

Funktion

0, 1

Auswahl des A/D-Kanals. 00: Kanal 0, 01: Kanal 1, 10: Kanal 2, 11: Kanal 3

2

Auto-Inkrement-Funktion (high = aktiv)

3

immer 0

4, 5

Programmieren der Analogkanäle (Details siehe Datenblatt)

6

Analog-Output aktivieren (high = aktiv)

7

immer 0

Die analogen Eingänge weisen einen maximalen Leckstrom von 100 Nanoampere auf – so wenig, dass es Messungen nur minimal verfälscht. Sie benötigen also keine zusätzlichen Operationsverstärker zur Impedanzwandlung der Analogeingänge. Für weitergehende Informationen empfiehlt sich ein Blick ins Datenblatt des Wandlers, der im Test in einem einfachen Versuch zum Einsatz kam.

Im Einsatz

Der Aufbau eines Schaltkreises mit dem Wandler erfordert nur wenige Komponenten. Die vier analogen Eingänge wurden für das Beispiel, wie im Schaltplan zu sehen, mit Potentiometern beschaltet. Mithilfe der Potis erzeugen Sie Analogwerte zwischen 0 Volt und der Betriebsspannung. Achten Sie bei der Auswahl der Potentiometer darauf, dass sie eine lineare Charakteristik aufweisen, keine logarithmische.

Potis mit linearer Charakteristik stellen deshalb eine bessere Wahl dar, weil bei ihnen eine bestimmte Winkeldifferenz immer einer festen Differenz der Spannung entspricht. Sie eignen sich also als Positionsgeber, weil sie in der Mittelstellung die Spannung genau halbieren. Potis mit logarithmischer Charakteristik dagegen kommen beispielsweise in Verstärkerstufen zum Einstellen der Lautstärke zum Einsatz, weil das menschliche Gehör eine logarithmische Charakteristik aufweist.

An den analogen Ausgang schließen Sie ein handelsübliches Multimeter an. Sie finden den kompletten Schaltplan (Abbildung 2) auch als gEDA- und EPS-Datei auf der Heft-DVD. Abbildung 3 zeigt den kompletten Versuchsaufbau. Um dessen Funktion zu testen, verwenden Sie das Tool I2cdetect (Listing 1).

Abbildung 2: Der Schaltplan unseres Versuchsaufbaus.

Abbildung 2: Der Schaltplan unseres Versuchsaufbaus.

Abbildung 3: Der Testaufbau auf einem Prototyping Board.

Abbildung 3: Der Testaufbau auf einem Prototyping Board.

Listing 1

 

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Alternativ fragen Sie die einzelnen analogen Eingänge mithilfe des Werkzeugs I2cget ab (Listing 2). Der entsprechende Befehl wirkt auf den ersten Blick etwas komplex. Das liegt jedoch schlicht daran, dass Sie alle vier Kanäle hintereinander abfragen und der erste Messwert pro Kanal immer den Wert der vorherigen Messung liefert. Wie das zustande kommt, ist einfach zu erklären: Mit dem ersten Zugriff weisen Sie den Baustein an, einen neuen Wert zu messen. Der steht dann beim nächsten Zugriff im entsprechenden Register.

Listing 2

 

$ watch -n 0.5 '\
i2cget -y 1 0x48 0x40 > /dev/null; i2cget -y 1 0x48 0x40; \
i2cget -y 1 0x48 0x41 > /dev/null; i2cget -y 1 0x48 0x41; \
i2cget -y 1 0x48 0x42 > /dev/null; i2cget -y 1 0x48 0x42; \
i2cget -y 1 0x48 0x43 > /dev/null; i2cget -y 1 0x48 0x43'

Beim Ausprobieren sehen Sie hier schon, dass es zwischen den einzelnen Kanälen ein Übersprechen gibt. Bei einem Stückpreis von unter 3 Euro für den PCF8591 lassen sich solche Effekte aber kaum vermeiden – für hochwertigere Wandler müssen Sie wesentlich tiefer in die Tasche greifen.

Um einen Analogwert am Ausgang des PCF8591 zu erzeugen, verwenden Sie die Kommandos aus Listing 3.

Listing 3

 

$ i2cset -y 1 0x48 0x40 0x00
$ i2cset -y 1 0x48 0x40 0xff

Testprogramm

Damit beim Ausprobieren keine Langeweile aufkommt, greifen Sie im nächsten Beispiel zu einem in Java geschriebenen Testprogramm mit grafischer Oberfläche (Abbildung 4). Allerdings hat Oracle im JDK für die ARM-Architektur die JavaFX-Komponenten entfernt, sodass Sie auf das gute alte AWT zurückgreifen müssen. Wie schon im letzten Teil unserer I2C-Serie setzen wir wieder auf der Java-Umgebung aus Teil 6 der Reihe auf.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland