Verschiedene Typen aus der MSP430-Mikrocontrollereerie haben einen eingebauten A/D-Wandler, so dass man auf einfache Weise eine präzise Erfassung analoger Signale in die eigene Anwendung integrieren kann. Als Bezeichnung finden wir die Wandlermodule ADC10, ADC12 und SD16_ A.
Beim ADC10 und ADC12 handelt es sich um Wandler nach dem sukzessiven Approximationsverfahren, das wir in Abschnitt 5.2.2 auch unter der Bezeichnung Wägeverfahren kennengelernt haben. Die Zahlangabe steht für die Wandler-Auflösung von 10 bzw. 12 Bit. Einige Typen der MSP430x20x3-Reihe (die x stehen als Platzhalter) haben einen genauen 16-Bit-Sigma-Delta-Wandler SD16_ A integriert. Obwohl dieser Wandler nur in wenigen Typen integriert ist, ist dieser doch der Erwähnung wert, da er zum Beispiel im MSP430-USB-Stick- Development-Tool - EZ430-F2013 vorhanden ist. Da ADC10 und ADC12 sehr ähnlich aufgebaut sind, können sie zusammen beschrieben werden. Dem SD16_ A ist ein eigenes Unterkapitel gewidmet.
Um die in den vorherigen Abschnitten beschriebenen Techniken zur Analog/Digital-Umsetzung auf einem Mikrocontroller wie dem MSP430 implementieren zu können, bedarf es neben dem eigentlichen A/D-Wandler noch einer Reihe vor- und nachgeschalteter Logik in Form einer Steuereinheit. Der A/D-Wandler und die Steuereinheit werden in dem so genannten ADC10- bzw. ADC12-Block zusammengefasst.
Der ADC12-Block ist wie viele andere Funktionseinheiten des MSP430 auf Energieeffizienz getrimmt. Das macht sich zum Beispiel durch die vielfältige Taktquellenauswahl für den ADC12 bemerkbar, wie wir sie auch schon bei vielen anderen Funktionseinheiten kennengelernt haben. Das gesamte Blockschaltbild des ADC12 ist in Bild 5.14 dargestellt. Der ADC10-Block ist demgegenüber mit etwas weniger Funktionsumfang ausgestattet. Dies betrifft mehrheitlich die Möglichkeiten der Speicherung des Wandlerergebnisses.
Der ADC10/12 verfügt über insgesamt acht Eingänge für die A/D-Wandlung. Intern ist auf dem Chip allerdings nur ein physikalischer A/D-Wandler implementiert. Die acht Eingänge sind daher über einen Multiplexer mit dem eigentlichen Wandler verknüpft. Man muss also über den Multiplexer sequentiell den richtigen Eingang auswählen, mit dem ein Signal erfasst werden soll. Ein A/D-Wandler benötigt immer auch eine Referenzspannung um in Bezug zu dieser messen zu können. Auch hier zeichnet sich der MSP430 wieder durch seine Flexibilität aus: Man kann flexibel auf verschiedene interne Referenzspannungen oder eine externe Referenzspannung zurückgreifen. Eine weitere Besonderheit des MSP430 ist die frei wählbare ”Beruhigungszeit” für die A/D-Wandlung, durch die man auch bei großem Innenwiderstand der Quelle die volle Auflösung des Wandlers erreichen kann.
Für die Einstellung der A/D-Wandlung stehen mit dem ADC12-Control-Register 0 (ADC12CTL0) und ADC12-Control-Register 1 (ADC12CTL1) zwei Konfigurationsregister zur Verfügung. Die Bitbelegung beider Register ist in Bild 5.15 dargestellt.
Grau unterlegte Bereiche können nur dann beschrieben werden, wenn das ENC-Bit gelöscht ist.
Damit ist sichergestellt, dass während der A/D-Wandlung keine unabsichtlichen Änderungen an den
Einstellungen vorgenommen werden können. Umgekehrt steuert man mit dem ENC-Bit, ob eine
Wandlung durchgeführt werden darf (ENC = 1) oder nicht. Mit dem ADC12ON-Bit kann man die
gesamten Peripheriekomponenten global an- oder ausschalten (0 = ADC12 off, 1 = ADC12
on).
Nachdem wir nun den AD-Wandler angeschaltet haben, wollen wir als Erstes die Taktquelle der ADC12-Funktionseinheit festlegen. Der Takt wird intern im A/D-Wandler benötigt, um den Ablauf der Wandlung (z.B. Ansteuerung Sample-and-Hold, sukzessive Approximation, Ausgabe Ergebnis) zu steuern. Je nachdem mit welcher Frequenz man dort arbeitet, resultiert daraus die benötigte Wandlungszeit.
SSELx | Taktquelle |
00 | ADC12OSC |
01 | ACLK |
10 | MCLK |
11 | SMCLK |
Mit den SSELx-Bits legt man die Taktquelle fest. Tabelle 5.1 listet die verfügbaren Taktquellen auf. Der A/D-Wandler hat mit dem ADC12OSC sogar noch einen eigenen internen Oszillator, der unabhängig vom Systemtakt arbeitet. Die genaue ADC12OSC-Frequenz liegt im Bereich von 3.7MHz bis 6.4MHz und hängt von vielen weiteren Faktoren wie z.B. MSP430-Typ und Charge sowie der Versorgungsspannung und der Betriebstemperatur ab. Mit den Bits ADC12DIVx kann man zusätzlich einen Softwareteiler zwischen 1 (000) und 8 (111) für die Taktquelle konfigurieren.
Auf das Bit ADC12BUSY kann nur lesend zugegriffen werden. Es detektiert, ob die ADC12-Funktionseinheit zur Zeit aktiv oder inaktiv ist. Das Bit ADC12SC startet softwareseitig die A/D-Wandlung. Es sollte gleichzeitig mit dem ENC-Bit gesetzt werden (ENC = 0 ADC12 deaktiviert, um Einstellungen zu ändern; ENC = 1 ADC12 aktiviert, Einstellungen können nicht geändert werden). Nach der A/D-Wandlung wird das ADC12SC-Bit wieder automatisch gelöscht. Daran kann man detektieren, ob die A/D-Wandlung abgeschlossen wurde.
Die Referenzspannung des A/D-Wandlers gibt an, bei welcher Spannung das Wandlungsergebnis maximal ist. Durch geeignete optimale Anpassung der Referenzspannung an den Eingangsspannungsbereich lässt sich die effektive Auflösung des A/D-Wandlers optimieren. Der MSP430 unterstützt sowohl interne als auch externe Referenzspannungen. Die interne Referenz ist optimiert bezüglich Energieverbrauch und benötigt fast keine externen Komponenten. Möchte man aus Gründen des Wertebereichs oder der Genauigkeit eine externe Referenzspannung vorgeben, so ist auch dies möglich.
Interne Referenzspannung Der MSP430 stellt zwei wählbare interne Referenzspannungen, 1.5V und 2.5V, zur Verfügung. Die Auswahl der Referenzspannung erfolgt mit Hilfe des Bits REF2_5V im ADC12CTL0- bzw. ADC10CTL0-Register. Um als interne Referenzspannung 2.5V zu erhalten, muss das Bit gesetzt werden. Ist REF2_5V gelöscht, so generiert der MSP 1.5V als interne Referenzspannung.
Für die Erzeugung der internen Referenzspannung ist der Referenzspannungsgenerator zuständig. Es ist notwendig den Generator mit Hilfe des REFON-Bits im ADC12CTL0- bzw. ADC10CTL0-Register ein- (REFON = 1) bzw. bei Nichtbenutzung zum Energiesparen auszuschalten (REFON = 0).
Bei Verwendung der internen Referenz sei dringend empfohlen, diese durch eine Parallelschaltung aus einem 10μF (Tantal- oder Elektrolyt-) und einem 0.1μF (Keramik-) Kondensator zwischen V REF+ und der analogen Masse AV SS zu stützen, um Störungen auf diesem kritischen Signalpfad auf ein Mindestmaß zu reduzieren.
Als weitere Maßnahme zur Verringerung von Störungen sollte zudem die analoge Masse von der digitalen Masse getrennt werden. Damit werden Rückwirkungen von digitalen Schaltsignalen auf die A/D-Wandlung vermieden. Beide Massen werden am besten nur an genau einem Punkt in der Schaltung miteinander verbunden, gegebenenfalls über eine zwischengeschaltete Ferrit-Induktivität oder gar einen kleinen Widerstand (1..10Ohm).
Beim Einschalten des Referenzspannungsgenerators sollte mit der ersten Wandlung mindestens 17ms gewartet werden, bis sich die Kondensatoren der Referenzspannung aufgeladen haben.
Externe Referenzspannung Die externe Referenzspannung wird an die Anschlüsse V eREF+ (z.B. Pin 10 für den MSP430F149) und V eREF- (z.B. Pin 11 für den MSP430F149) angeschlossen. Dabei muss beachtet werden, dass die maximalen und minimalen Spannungsgrenzwerte für die Anschlüsse nicht über- und unterschritten werden. Für den MSP430F149 sind dies 1.4V ≤ V eREF+ ≤ V AV CC und 0V ≤ V eREF-≤ 1.2V.
Der A/D-Wandler kann in verschiedenen Betriebsarten betrieben werden, die mit den CONSEQx-Bits ausgewählt werden können. Eine Auflistung dazu gibt Tabelle 5.2. Im Single-Channel-Modus wird die A/D-Wandlung für einen ausgewählten Eingang ausgeführt. Im Sequence-of-Channels-Modus definiert eine Kanalliste, welche der A/D-Wandlerkanäle sequentiell gemessen werden.
CONSEQx | Betriebsart |
00 | Single-Channel (einmalig) |
01 | Sequence-of-Channels (einmalig) |
10 | Single-Channel continuous (kontinuierlich) |
11 | Sequence-of-Channels continuous (kontinuierlich) |
Der Benutzer kann zudem entscheiden, ob der MSP430 nur eine einmalige A/D-Wandlung ausführen soll oder ob die A/D-Wandlung stets im Hintergrund kontinuierlich laufen soll. Beim so genannten Multi-Sample-Betrieb (Sequence-of-Channels, Single-Channel continuous oder Sequence-of-Channels continuous) werden automatisch mehrere A/D-Wandlungen vom Mikroprozessor ausgeführt. Mit dem MSC-Bit legt man fest, wie die Sample-Vorgänge getriggert werden. Die Triggerung kann dabei sowohl intern (nach jeder Samplung automatisch) erfolgen oder durch den Timer A (bzw. Timer B). Die Signale des Timers werden als SHI-Signal an die ADC12-Funktionseinheit geleitet. Mit MSC = 0 wird die A/D-Wandlung durch das Timer-Signal getriggert. Mit MSC = 1 erfolgt die A/D-Wandlung zum schnellstmöglichen Zeitpunkt automatisch, also direkt nach einer abgeschlossenen Wandlung. Die Triggerquelle kann mit den Bits SHSx im Register ADC12CTL1 festgelegt werden.
Wenn automatisch hintereinander der A/D-Wert mehrerer Kanäle erfasst werden soll, kann man den Sequence-of-Channels-Modus verwenden. Der Mikroprozessor beginnt dann die Kanäle nacheinander zu erfassen, wobei mit den Bits CSTARTADDx der Startkanal festgelegt werden kann.
Die Speicherung des Wandlerergebnisses wird im ADC12-Modul etwas anders gehandhabt als im ADC10-Modul. Aus diesem Grund müssen wir an dieser Stelle zwischen beiden Funktionseinheiten differenzieren. Beim ADC12 hat man insgesamt 15 Ergebnisregister zur Auswahl, die das Wandlerergebnis speichern. Beim ADC10 steht nur ein einziges Register dafür zur Verfügung.
ADC10 Im Single-Channel-Modus wählt man beim ADC10 über den Multiplexer mit den INCHx-Bits im ADC10CTL1-Register den Eingang aus, der im nächsten Abtastschritt gemessen werden soll. Nach Abschluss der Wandlung steht das Ergebnis im ADC10MEM-Register zur Verfügung. Im Sequence-of-Channels-Modus gibt die Wertigkeit der INCHx-Bits an, bis zu welchem Kanal (beginnend bei Kanal 0) nacheinander eine A/D-Wandlung durchgeführt werden soll.
INCHx | A/D-Eingang |
0000 | A0 |
0001 | A1 |
0010 | A2 |
0011 | A3 |
0100 | A4 |
0101 | A5 |
0110 | A6 |
0111 | A7 |
INCHx | A/D-Eingang |
1000 | V e REF+ |
1001 | V REF-/V eREF- |
1010 | Temperatur-Sensor |
1011 | ∕2 |
1100 | ∕2 |
1101 | ∕2 |
1110 | ∕2 |
1111 | ∕2 |
Tabelle 5.3 zeigt die zur Auswahl stehenden Eingangskanäle. Neben den physikalischen Eingängen A0 bis A7 können weitere Eingangssignale gemessen werden. Zum Beispiel die Betriebsspannung oder die Referenzspannung aber auch ein interner Temperatursensor. Dies kann man dann dazu verwenden den Offset des Wandlers zu kalibrieren oder auch durch Kompensation des Temperaturverhaltens die Genauigkeit der Messung zu verbessern. Das ADC10DF-Flag im selben Register legt die Formatierung für den A/D-Wert im ADC10MEM-Register fest (ADC10DF = 0 linksbündig, ADC10DF = 1 rechtsbündig).
ADC12 Die Speicherung der A/D-Werte ist beim ADC12 etwas komplexer. Anders als beim ADC10 definiert man bei der A/D-Wandlung nicht einen bestimmten Eingang, sondern jedes der insgesamt 15 verschiedenen Ergebnisregister ADC12MEMx hat ein eigenes Konfigurationsregister ADC12MCTLx. Die Bitbelegung des ADC12MCTLx-Registers ist in Bild 5.16 dargestellt.
In diesem wird dann für jeden Messkanal der A/D-Eingangskanal sowie die Referenzspannung ausgewählt. Die Codierung der INCHx-Bits ist identisch mit Tabelle 5.3. Mit den Bits SREFx legt man die der A/D-Wandlung zugrunde liegende Referenzspannung fest (Tabelle 5.4). Durch Setzen des EOS-Flags bestimmt man das Ende einer Sequenz im Sequence-of-Channels-Modus. Das heißt, die ADC12MCTLx-Register werden so lange eines nach dem anderen abgearbeitet, bis bei einem das EOS-Flag gesetzt ist.
SREFx | Referenzspannungen |
000 | V R+ = AV CC und V R- = AV SS |
001 | V R+ = V REF+ und V R- = AV SS |
010 | V R+ = V eREF+ und V R- = AV SS |
011 | V R+ = V eREF+ und V R- = AV SS |
100 | V R+ = AV CC und V R- = V REF-∕V eREF- |
101 | V R+ = V eREF+ und V R- = V REF-∕V eREF- |
110 | V R+ = V eREF+ und V R- = V REF-∕V eREF- |
111 | V R+ = V eREF+ und V R- = V REF-∕V eREF- |
Damit sich während der Wandlung das zu messende Signal nicht ändert, muss dem eigentlichen A/D-Wandler eine Sample-and-Hold-Schaltung vorgeschaltet sein, siehe Kapitel 5.2.2. Schaltungstechnisch wird dafür ein Speicherkondensator auf die Signalspannung Usig aufgeladen. Die dafür benötigte Zeit berechnet sich aus der Zeitkonstanten des entstehenden Tiefpasses mit τ = R ⋅ C, wobei C die Kapazität des Kondensators und R der Innenwiderstand der Messwertquelle und des Eingangs-Multiplexers ist. Um die volle Auflösungsgenauigkeit zu erreichen, muss man also eine gewisse Zeit warten, bevor man mit der eigentlichen A/D-Wandlung beginnen kann. Genau berechnen kann man dies wie folgt:
Der zeitliche Verlauf der Spannung am Kondensator ist bei maximaler Signaländerung gegeben durch:
| (5.14) |
Die Abweichung nach der Wartezeit TPause muss kleiner als 1∕2 LSB sein. Daraus kann man dann folgende Bedingung formulieren:
| (5.15) |
Da Usig∕ULSB im „Worst-Case“ 212 ist, folgt dann nach Logarithmieren und Umformen für die Kanal-Wartezeit:
| (5.16) |
Da man noch zusätzlich etwas Zeit für den Schaltvorgang berücksichtigen muss, kommen zu dieser Zeit nochmals 800ns hinzu. Der im MSP430 integrierte Kondensator kann je nach gewähltem Modell unterschiedlich ausfallen. In der MSP430x1xx-Serie ist dieser etwa 40pF groß. Der Widerstand R setzt sich aus dem Innenwiderstand der Signalquelle und dem etwa 2kΩ großen Eingangswiderstand des Multiplexers zusammen. Daraus folgt dann:
Mit der Gleichung 5.17 lässt sich die Pausenzeit für die A/D-Wandlung bei 12 Bit berechnen. Für die 10-Bit-Variante muss man nur 9.011 durch ln(211) = 7.625 ersetzen. Im Steuerregister ADC10CTL0 für Mikrocontroller mit dem 10-Bit-Analog/Digital-Wandler lässt sich mit Hilfe der Bits ADC10SHTx die Sample-Pause-Zeit einstellen (Tabelle 5.5).
SHTx | Sample-Pause-Zeit |
00 | 4 x ADC10CLK Zyklen |
01 | 8 x ADC10CLKs Zyklen |
10 | 16 x ADC10CLKs Zyklen |
11 | 64 x ADC10CLKs Zyklen |
Mit dem Bit SHP legt man fest, ob die Sample-Pause-Zeit mit Hilfe des SHI-Signals, das zum Beispiel mit dem Timer A getriggert werden kann, oder durch Einstellungen des Benutzers definiert wird. Für SHP = 0 wird die Sample-Pause-Zeit direkt über das SHI-Signal gesteuert. Mit SHP = 1 erfolgt über das SHI-Signal lediglich eine Triggerung. Ist auf dem Mikrocontroller ein 12-Bit-Analog/Digital-Wandler implementiert, so lässt sich die Sample-Pause-Zeit dann durch die Bits SHT0x und SHT1x im ADC12CTL0-Register gemäß Tabelle 5.6 einstellen. Dabei kontrolliert SHT0x die Zeit für die Sample-Register ADC12MEM0 bis ADC12MEM7, hingegen SHT1x die Zeit für ADC12MEM8 bis ADC12MEM15.
| |
|
|
| |
SHT0x | Sample-Pause-Zeit |
| |
|
|
|
|
0000 | 4 x ADCCLK |
0001 | 8 x ADCCLK |
0010 | 16 x ADCCLK |
0011 | 32 x ADCCLK |
0100 | 64 x ADCCLK |
0101 | 96 x ADCCLK |
0110 | 128 x ADCCLK |
0111 | 192 x ADCCLK |
| |
|
|
| |
SHT0x | Sample-Pause-Zeit |
| |
|
|
| |
1000 | 256 x ADCCLK |
1001 | 348 x ADCCLK |
1010 | 512 x ADCCLK |
1011 | 768 x ADCCLK |
1100 | 1024 x ADCCLK |
1101 | 1024 x ADCCLK |
1110 | 1024 x ADCCLK |
1111 | 1024 x ADCCLK |
Nun ist nur noch festzulegen, aus welcher Quelle der Sample-Pause-Zeit-Timer gespeist werden soll. Ein Blick in das Blockschaltbild (Bild 5.14) verrät uns, dass hierzu erst einmal eine der möglichen Quellen ausgewählt werden muss. Hierzu werden die SHSx-Bits im Kontrollregister gemäß Tabelle 5.7 entsprechend eingestellt.
SHSx | Sample-and-Hold-Time-Source |
00 | ADC12SC |
01 | TimerA.OUT1 |
10 | TimerB.OUT0 |
11 | TimerB.OUT1 |
Mit dem ISSH-Bit kann man das Signal des SSH-Clock-Inputs auch noch invertieren (ISSH = 1). Im Normalfall braucht man diese Option allerdings nicht. Als weitere Option kann man beim ADC12 den Teiler für die Sample-Pause-Zeit umgehen und direkt die Pause-Zeit steuern. Dies macht vor allem bei Verwendung der Timer als Zeitquelle Sinn. Für einen Bypass wird das SHP-Bit auf 0 gesetzt.
Auf die interruptgesteuerte A/D-Wandlung sollte immer dann zurückgegriffen werden, wenn man den MSP430 für Low-Power-Anwendungen auslegen will. Beim Low-Power-Modus 3 kann der MSP mit Hilfe des Takts ACLK die A/D-Wandlung im Hintergrund ausführen und bei einer abgeschlossenen Konvertierung einen Interrupt aufrufen. Besonders energiesparend wird das Programm, wenn wir die Taktquelle ACLK mit dem niederfrequenten 32kHz-Quarz verwenden. Auf dem MEDIT-Board ist an XIN/XOUT (LFXT1CLK) ein niederfrequenter Uhrenquarz angeschlossen. Die Taktquelle muss darüber hinaus nicht weiter initialisiert werden, weil sich die ACLK direkt aus der LFXT1CLK (mit einstellbaren Vorteilern) ableiten lässt. Im ADC12-Control-Register 1 müssen wir nun noch ACLK als Taktquelle für das A/D-Wandler-Modul auswählen (siehe Listing 5.2) und den Interrupt für ADC12 aktivieren.
Eine Vorlage für die Interrupt-Service-Routine wird in Listing 5.3 vorgestellt. Mit ADC12MEM0 kann auf das Ergebnis der A/D-Wandlung zurückgegriffen werden. Weil wir keine Veränderungen am Konfigurationsregister ADC12MCTL0 vorgenommen haben (für A/D-Kanal 0) dient als Eingang der Port A0 (P6.0). Nach der Abarbeitung des Interrupts schaltet sich der Mikrocontroller automatisch wieder in den Low-Power-Modus 3.
Die Interrupt-Funktionalität des MSP430 geht jedoch noch weiter, als bisher vorgestellt. Insgesamt drei verschiedene Interrupttypen werden bei der A/D-Wandlung unterschieden:
Die drei unterschiedlichen Interrupttypen lassen sich mit den Registern ADC12IFG0 bis ADC12IFG15, ADC12OV und ADC12TOV abfangen. Die Flags ADC12IFGx befinden sich im Register ADC12IFG. Wird das Bit ADC12OVIE im Register ADC12CTL0, also dem Control-Register 0 gesetzt, so wird die Overflow-Interrupt-Funktionalität aktiviert. Ein Interrupt wird aber nur dann aufgerufen, wenn Interrupts global aktiviert sind. Ein Beispiel für die globale Aktivierung ist in Listing 5.4 gezeigt.
Analog zum ADC12OVIE-Flag kann mit dem Bit ADC12TOVIE der Conversation-Time-Overflow-Interrupt-Modus aktiviert werden. Auch hierbei wird ein Interrupt nur dann aufgerufen, wenn Interrupts global aktiviert sind.
Auf einigen Mikrocontrollertypen wie dem MSPF2013, der sich auf dem USB-Starter-Board befindet, ist weder der ADC10 noch der ADC12 implementiert. Stattdessen verfügen diese Controller über einen 16-Bit-Sigma-Delta-A/D-Wandler, den SD16_ A. Die Funktionalität des A/D-Wandlers ist sehr groß und wird daher in diesem Abschnitt nur kurz dargestellt.
Das Blockschaltbild des SD16_ A ist in Bild 5.17 dargestellt. Der A/D-Wandler verfügt je nach MSP-Device über acht verschiedene Eingänge und zwei mögliche Referenzspannungen (externe und interne) sowie über eine Auflösung von 16 Bit.
Beim MSPF2013 stehen vier unabhängige A/D-Quellen (A0 bis A3, A4 wird von A0 und A1 belegt) zur Verfügung, wobei jede Quelle über zwei unterschiedliche Eingänge Ax+ und Ax- (z.B. A0+ und A0-) verfügt. Die Pinbelegung ist dem Datenblatt des MSPF2013 zu entnehmen. Über einen Multiplexer werden wie beim ADC10/ADC12 die Signale an die SD16_ A-Funktionseinheit geleitet.
Im Register SD16CTL (Bild 5.18) kann die Taktquelle und der Software-Teiler für den SD16_ A eingestellt werden. Wir werden hierbei nur auf die wichtigsten Bits und Flags eingehen.
Mit SD16SSELx wird die Taktquelle (MCLK = 00, SMCLK = 01 oder ACLK = 10) ausgewählt und mit SD16DIVx durch einen Software-Teiler (1 = 000, 3 = 001, 16 = 010, 48 = 011) geteilt. Mit SD16REFON kann der Referenzspannungsgenerator aktiviert (SD16REFON = 1) werden. Bei Verwendung einer externen Referenz kann der Generator deaktiviert werden um Energie zu sparen. Die interne Referenzspannung generiert eine Spannung von 1.2V, die sich in eine maximale positive Referenzspannung von 0.6V und eine minimale negative Referenzspannung von -0.6V aufteilt. Ein weiteres Konfigurationsregister ist das SD16CCTL0, dessen Bitbelegung in Bild 5.19 dargestellt ist.
Wichtig ist hierbei das Bit SD16UNI, womit der Unipolar- oder Bipolar-Modus aktiviert wird. Im Bipolar-Modus (SD16UNI = 0) wird die Differenz zwischen zwei Eingangssignalen (z.B. A0+ und A0-) ermittelt, demgegenüber wird im Unipolarmodus (SD16UNI = 0) nur das Eingangssignal bezogen zur Masse bestimmt. Mit den Bits SD16XOSR und SD16OSRx lässt sich die Oversampling-Rate einstellen. Wie schon in Kapitel 5.2.5 erwähnt basiert der Sigma-Delta-Wandler im Wesentlichen auf einem 1-Bit-A/D-Wandler mit Oversampling. Die Einstellungen für verschiedene Oversampling-Raten sind in Tabelle 5.8 aufgeführt. Darüber hinaus wird mit dem Bit SD16IE der Interrupt für die Berechnung eines A/D-Wertes aktiviert. Die eigentliche A/D-Wandlung wird wie beim ADC12 durch Setzen des Bits SD16SC gestartet.
SD12OSRx | SD12XOSR | Oversampling-Rate |
00 | 0 | 256 |
01 | 0 | 128 |
10 | 0 | 64 |
11 | 0 | 32 |
00 | 1 | 512 |
01 | 1 | 1024 |
Der gewünschte Eingang kann im Register SD16INCTL0 über die Bits SD16INCHx gewählt werden. Der Multiplexer verknüpft dann den jeweiligen Kanal (Tabelle 5.9) mit dem SD16_ A-Wandler. Nur die Kanäle A0 bis A4 sind auf externe Pins herausgeführt. A5 bis A7 sind interne Kanäle und dienen der Kalibrierung. Das Ergebnis der A/D-Wandler steht im Register SD16MEM0.
Kanal | SD16INCHx |
A0 | 000 |
A1 | 001 |
A2 | 010 |
A3 | 011 |
A4 | 100 |
A5 (Überwachen der Versorgungsspannung) | 101 |
A6 (interner Temperatursensor) | 110 |
A7 (Offset-Kalibrierung) | 111 |
Dieser Abschnitt umfasst bei weitem nicht die volle Funktionalität des SD16_ A und kann daher nur als Überblick dienen. Eine vollständige Beschreibung würde den Rahmen dieses Kapitels sprengen. Daher sei an dieser Stelle auf das Datenblatt der MSPx2xx-Familie verwiesen.