Um die Rubrik der AD/DA-Wandler abzurunden, möchte ich hier noch exemplarisch die Funktionsweise eines 12 Bit DA-Wandler erklären.

Als Baustein kommt der AD7394 zum Einsatz, wem 10 Bit reichen, der kann auch den AD7395 verwenden. Die Funktionsweise bleibt vom Prinzip her gleich.

Zur Pinbelegung:
AGND (Analog Ground), DGND (Digital Ground) und VDD stellen die Spannungsversorgung dar. Die Betriebsspannung darf zwischen 2,7-5,5V liegen. Die Referenzspannung VREF muss kleiner oder gleich der Betriebsspannung VDD sein. Im zuvor genannten Spannungsbereich wird die Funktion des AD-Wandler garantiert.
Wer bereits mit dem SPI gearbeitet hat, der weiß, das CLK, SDI und /CS der Kommunikation dienen. Wie man schon an der Pinbezeichnung erkennen kann, dienen VOUTA und VOUTB der Spannungsausgabe, der IC hat also zwei DA-Kanäle. Da bei diesem DA-Wandler auf Befehlsbytes in der Kommunikation verzichtet wurde, musste eine Möglichkeit geschaffen werden ihm zu signalisieren, für welchen Ausgang der vom MC gesendete Digitalwert gelten soll. Hierfür dienen /LDA und /LDB. Toll ist das eigentlich nicht, da dieser Schaltkreis dadurch zwei zusätzliche Pins kostet, die Entwickler aber natürlich Arbeitszeit gespart haben :-)
Der /RS-Pin dient wie man der Bezeichnung beinahe schon entnehmen kann dem Reset. Nach dem Reset sind beide Ausgänge entweder auf 0V oder auf VREF/2, dies wird durch den Pegel an MSB determiniert. Zu guter letzt noch /SHDN. Dieser Pin versetzt den DA-Wandler in einen Energiesparmodus.
Wer sich fragt, was die Striche über den Pin-Bezeichnern bedeuten, dem sei gesagt, dass die für active-low Verhalten steht. D.h. der Pin reagiert bei einem Wechsel von H- auf L-Pegel an seinem Eingang.

Die ausgegebene Spannung berechnet sich für den 12 Bit DA-Wandler wie folgt (DW = vom MC gesendetes Datenwort - 12 Bit Wert):

VOUT = VREF * DW / 4096

Zum Anschluss gibt es nicht viel zu sagen, der obligatorische Kerko mit 100nF zwischen VDD und GND sollte nicht fehlen. Wer möchte, kann parallel dazu beispielsweise noch einen 10uF Elko setzen, dessen Größe ist unkritisch. DGND und AGND können verbunden werden. Eine zusätzlicher Kerko kann noch zwischen VREF und GND angeschlossen werden (fakultativ).

Die eigentliche Kommunikation ist relativ einfach. Wer noch nicht mit dem SPI gearbeitet hat, den möchte ich vorerst auf den entsprechenden Abschnitt verweisen, da nach dessen durchlesen das Verstehen leichter fallen sollte.

Die Kommunikation startet wie immer durch das gegen Masse ziehen von /CS. Auch wenn der IC eigentlich nur 12 Bits benötigt, so muss man bei Verwendung des Hardware SPI des ATMega notgedrungen 16 Bit an ihn senden, da es byte-basierend arbeitet. Jedoch macht das nicht weiter Arbeit, da der DA-Wandler von sich aus die oberen 4 Bits des ersten Bytes ignoriert (wir senden hier einfach Nullen). Ist der Wert im Schieberegister angekommen, so deselektiert man den Baustein, indem man /CS wieder auf H-Pegel legt. Nun gilt es festzulegen, für welchen Ausgang der gesendete Wert gelten soll. Die signalisiert man durch das gegen Masse ziehen des entsprechenden Pins (/LDB, /LDA). Man kann auch beide Pins gleichzeitig wählen, um auf beiden DA-Ausgängen denselben Wert zu erhalten. Kurz darauf sollte man die Pins wieder auf H-Pegel legen.

Wen die genaue Vorgehensweise im Quelltext interessiert, den verweise ich auf die Rubrik Programme. Alternativ kann ein Testprogramm auch hier herunter geladen werden.