Zum Einstieg habe ich mit dem PCF8591 beschäftigt.

Dieser Wandler wird über das TWI (= I²C) an den MC angeschlossen, kostet also nur zwei Pins. Er stellt 4 Pins mit einer Auflösung von 8Bit zur Verfügung. Das ist zwar nicht viel, soll für den Anfang aber erst einmal reichen. Des weiteren bringt er einen analogen Ausgang sowie 3 Adress-Pins mit. An denen kann in Hardware (Pins entweder auf Masse oder Vcc legen) die Adresse des einzelnen Wandlers festgelegt werden. Es können also maximal 2^3=8 Wandler am Bus betrieben werden. Die Abtastrate des Wandler wird durch die Busfrequenz determiniert.

 

Pin-Nr. Bezeichner Beschreibung
1 AIN0 analoger Eingang
2 AIN1 analoger Eingang
3 AIN2 analoger Eingang
4 AIN3 analoger Eingang
5 A0 Hardware-Adresse
6 A1 Hardware-Adresse
7 A2 Hardware-Adresse
8 VSS negative Versorgungsspannung
9 SDA TWI Datenleitung
10 SCL TWI Taktleitung
11 OSC Oszillatorein- bzw. -ausgang
12 EXT externer/interner Oszillator
13 AGND Masse
14 VREF Referenzspannung
15 AOUT analoger Ausgang
16 VDD positive Versorgungsspannung

Die Pins des AD-Wandlers sollten nie unbeschalten bleiben. Freie nicht benutzte Pins sollten entweder auf Vcc oder GND (AGND) gelegt werden, um Störungen zu vermeiden. Es kann entweder ein interner oder ein externer Oszillator für den AD-Wandler verwendet werden. Für den internen Wandler muss EXT-Pin auf Masse (Vss) gelegt werden. Die Oszillatorfrequenz ist dann an OSC verfügbar.

 Nun ins Detail:

Die Adresse des Wandlers hat den folgenden Aufbau:

 1    0    0    1    A2    A1    A0    R/W  

Die Adresse, bestehend aus dem fixen High-Nibble und dem konfigurierbaren Low-Nibble wird unmittelbar nach dem START an den Wandler übermittelt. Das R/W-Bit legt fest, ob ein Lese- oder Schreibzugriff durchgeführt werden soll. Je nachdem, ob in A0:2 eine '1' oder eine '0' stehen soll, muss der korrespondierende Pin auf Masse oder Vcc gelegt werden.

Unmittelbar nach dem Adressbyte muss das Befehlsbyte gesendet werden.

 0   analoger
Ausgang
AD-
Modus
AD-
Modus
 0   Autoinc. AD-
Kanal
AD-
Kanal

Wie man sieht, können diverse Sachen konfiguriert werden, doch der Reihe nach. Das oberste Bit (MSB) ist immer Null. Das 6. Bit legt fest, ob der analoge Ausgang aktiviert oder deaktiviert sein soll. Die Bits 5 und 4 definieren, wie die Eingänge verwendet werden sollen (normale AD-Eingänge, differentielle Eingänge, ...). Bit 3 ist wiederum immer Null. Bit 2 legt fest, ob nach einer AD-Wandlung automatisch zum nächsten Kanal (also AD-Pin) gewechselt werden soll. Die Bits 0 und 1 legen den zu nutzenden AD-Eingang fest.

DA-Konvertierung

Das dritte an den Wandler gesendete Byte wird in eine korrespondierende Spannung umgewandelt und ausgegeben, vorausgesetzt Bit 7 im zweiten Byte war gesetzt. Die Spannung bleibt solange erhalten, bis ein neues Byte empfangen oder die Ausgabe beendet wurde.

AD-Konvertierung

An einen AD-Wert zu gelangen gestaltet sich eigentlich relativ einfach. Im Gegensatz zur DA-Konvertierung muss hier im Adressbyte der Lesemodus (Bit 0) ausgewählt werden. Hat der Wandler ein entsprechendes Byte empfangen, startet er sofort eine AD-Wandlung. Diese wird durchgeführt, während der Wandler das zuletzt gewandelte Byte überträgt. Nach dem Einschalten ist das erste übertragene Byte mit 0x80 festgelegt.

Ein Testaufbau könnte so aussehen:

Die Beschaltung sollte anhand der obigen Beschreibungen selbsterklärend sein. Die Hardware-Adresse des Bausteins ist 1001000x. AD-Kanal 0 wird im normalen "single ended" Modus betrieben. Es wird der interne Oszillator verwendet. Der Elko zwischen VDD und GND dient der Spannungsstabilisierung. Je nach Beschaltung sollte auch noch VREF auf diese Weise stabilisiert werden. Allerdings muss man es meiner Meinung nach bei 8 Bit Auflösung auch nicht übertreiben.

Das war eigentlich schon alles, was zu diesem Baustein gesagt werden muss. Ein Codebeispiel kann der Rubrik Programme entnommen werden oder direkt hier herunter geladen werden. Wem die Funktionsweise des I²C-Bus (=TWI) unklar ist, der sollte sich die Rubrik TWI zu Gemüte führen.

Anmerkung zum Code:

Es wurden nicht alle Fähigkeiten des Bausteins bei der Implementierung berücksichtigt. Die Routinen sehen AD-Wandlungen an AIN0:3 vor sowie das ausgeben einer analogen Spannung an AOUT. Wer mehr Fähigkeiten des Sensors nutzen möchte, dem sollte die Erweiterung der Routinen nicht schwer fallen.

 

Zurück zur Startseite.