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.
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 |
|---|---|
|
|
Auswahl des A/D-Kanals. |
|
|
Auto-Inkrement-Funktion (high = aktiv) |
|
|
immer 0 |
|
|
Programmieren der Analogkanäle (Details siehe Datenblatt) |
|
|
Analog-Output aktivieren (high = aktiv) |
|
|
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).
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









