STM8 10-Bit Wandler ADC1
Der A/D-Wandler auf dem STM8 kann in sechs verschiedenen Modi betrieben werden. Diese unterscheiden sich in der Anzahl der Kanäle die in einem Zyklus eingelesen werden und wie das System die einzelnen Messwerte speichert.
ADC1 - Betriebsmodus Einstellungen | ||||||
Modus | CONT | DBUF | SCAN | EXTTRIG | Daten | Interrupt (option) |
"Single" | reset | reset | reset | reset | ACD_DRx | EOC - einmal ein Kanal |
"Continuous" | set | reset | reset | reset | ACD_DRx | EOC - zyklisch ein Kanal |
"Buffered Continuous" | set | set | reset | reset | ACD_DBiRx | EOC - zyklisch 8/10 Samples |
"Single SCAN" | reset | set | set | reset | ACD_DBiRx | EOC - einmal alle Kanäle |
"Continuous SCAN" | set | set | set | reset | ACD_DBiRx | EOC - zyklisch alle Kanäle |
"Hardware Trigger" | reset | (re)set | set | ACD_DBiRx/(ACD_DRx) | EOC - zyklisch alle Kanäle |
Die in der Tabelle aufgeführten Konfigurations-Bits befinden sich in folgenden Registern:
Die Daten der jeweiligen Messungen werden entweder in den beiden ADC_DRH / ADC_DRL Registern oder im Falle eines gesetzten DBUF Bits in den Datenpuffer Register Paaren ADC_DBiRH / ADC_DBiRL gespeichert. Wobei „i“ der Index der einzelnen Buffer Register ist. Je nach Bauteil und Anzahl der Analogeingänge kann „i“ von 0...7 oder von 0...9 variieren.
Nach dem Ende eines Messvorgangs wird das EOC Bit im Register ADC_CSR von der Hardware gesetzt. Durch Freigabe des EOCIE Bits im gleichen Register wird ein ADC-Interrupt ausgelöst.
Der einfachste Modus des A/D-Wandlers ist der „Single“ Modus bei dem eine einzelne A/D-Umsetzung für den im Register ADC_CSR ausgewählten Analogeingang durchgeführt wird.
Der ADC muß aktiviert sein, d.h. das ADON Bit im ADC_CR1 Register muß zunächst gesetzt sein. Ein erneuter Schreibvorgang auf das ADON Bit („1“) startet den ADC und das Ergebniss wird in die ADC_DRH und ADC_DRL Register geschrieben. Das Ende des Wandlervorgangs wird durch das EOC Bit angezeigt bzw. durch einen Interrupt gemeldet (EOCIE Bit muß gesetzt sein).
Die tSTABWartezeit ist nur dann notwendig wenn der ADC aus dem Stand-By Zustand aktiviert wird. Im aktiven Zustand kann der Wandler beliebige aufeinander folgende Messungen in 14 Zyklen des ADC Taktes durchführen ohne eine weitere Wartezeit einhalten zu müssen.
Durch das Setzen des CONT Bits im ADC_CR1 Register wird der „Continuous Mode“ aktiviert. Dabei wird ein einzelner Kanal wie im Single Mode digitalisiert und das Ergebniss in den ADC_DRH und ADC_DRL Registern gespeichert.
Nachdem der Wert abgespeichert wurde wird das EOC Bit gesetzt und gegebenenfalls ein Interrupt ausgelöst (falls EOCIE gesetzt wurde). Danach startet automatisch eine neue A/D-Wandlung.
Der eben beschriebene Continuous Mode kann durch zusätzliches Setzen des DBUF Bits in den “Continuous Buffered Mode” übergehen. In diesem Modus wird der selektierte Kanal ebenfalls kontinuierlich gewandelt, allerdings wird das Ergebniss nicht in die ADC_DRH und ADC_DRL Register geschrieben, sondern in den Datenpuffer (ADC_DBiRH, ADC_DBiRL Register).
Der Datenpuffer besteht aus Registerpaaren die über einen eigenen Adressbereich direkt gelesen werden können. Die Anzahl der Registerpaare kann bei den einzelnen STM8 Typen unterschiedlich sein, wobei die Implementierungen entweder 8 Registerpaare oder 10 Registerpaare beinhalten.
Für den Fall dass im Continuous Buffered Mode die Datenpuffer Register nicht rechtzeitig ausgelesen werden und der darauf folgende Zyklus ein oder mehrere Register überschreibt wird das OVR Flag im Register ADC_CR3 per Hardware gesetzt. Dieses Bit muß per Software zurückgesetzt werden.
Details zum Datenpuffer sind im entsprechende Kapitel „6.2 Die Datenpuffer Register (ADC_DBiRH , ADC_DBiRL)“ zu finden.
Alle bisher besprochenen Modi arbeiten ausschliesslich mit einem einzelnen Analogeingang der über das ADC_CRS Register ausgewählt wird. Die SCAN Modi erlauben dagegen das sukzessive Abfragen einer Reihe von Analogeingängen in einem Zyklus wobei die Abfrage mit dem Kanal 0 (AIN0) beginnt und bis zu dem Kanal durchgeführt wird der im ADC_CSR Register eingetragen ist.
Im Single SCAN Modus wird ein einzelner Zyklus über alle definierten Kanäle gestartet und die Ergebnisse werden in den Datenpuffer entsprechend ihrer Kanalnummer (AIN0 in ADC_DB0RH und ADC_DB0RLetc.) eingetragen.
Das Ende eines solchen SCAN Zyklus wird ebenfalls durch das EOC Flag gekennzeichnet bzw. löst einen entsprechenden Interrupt aus. Danach erfolgt keine weitere A/D-Wandlung bis der ADC erneut durch das Beschreiben des ADON Bits aktiviert wird.
Der Single SCAN Modus kann durch das Setzen des CONT Bits in einen kontinuierlichen Modus geändert werden wobei die selektierten Eingänge nacheinander, zyklisch abgefragt werden. Der Datenpuffer wird jeweils mit den Werten aller selektierten Kanäle beschrieben, worauf das EOC Bit gesetzt wird, bzw. ein Interrupt ausgelöst wird (EOCIE gesetzt).
Für den Fall dass im Continuous SCAN Mode die Datenpuffer Register nicht rechtzeitig ausgelesen werden und der darauf folgende Zyklus ein oder mehrere Register überschreibt wird das OVR Flag im Register ADC_CR3 per Hardware gesetzt. Dieses Bit muß per Software zurückgesetzt werden. Der Continuous SCAN Mode sollte nicht durch das Löschen des SCAN Bits gestoppt werden sondern durch das Zurücksetzen des ADON Bits.
Durch die Auswahl des Hardware Trigger Modus mit dem Bit EXTTRIG im Register ADC_CR2, kann eine A/D-Wandlung entweder über den externen Pin ADC_ETR oder über ein Timer Ausgangssignal TRGO ausgelöst werden. Die beiden Bits EXTSEL[1..0], ebenfalls im Register ADC_CR2 ermöglichen die Auswahl der Trigger Quelle zwischen ADC_ETR und TRGO (siehe „5.3 Das ADC Configuration Register 2 (ADC_CR2)“ ).
Ein externes Signal am Pin ADC_ETR kann mit der steigenden Flanke eine A/D-Wandlung auslösen. Dazu muß der „Externe Trigger Mode“ über das Bit EXTTRIG im Register ADC_CR2 gesetzt werden wenn der ADC1 deaktiviert ist (ADON = 0) und das EOC Bit ebenfalls gelöscht ist (EOC = 0). Das Setzen des EXTTRIG Bits sollte über einen BSET Befehl erfolgen oder über eine Befehlssequenz die keine weiteren Bits im ADC_CR2 gleichzeitig verändert.
Nach dem Setzen von EXTTRIG wird ein „High“-Pegel am ADC_ETR Pin den ADC-Wandler aktivieren. Die Stabilisierungszeit t STAB von 7 µs bis zu einer ersten A/D-Wandlung ist einzuhalten andernfalls ist das erste Ergebnis nicht im Rahmen der möglichen Genauigkeit.
Nach der Initialisierung kann durch das externe Signal ADC_ETR jeweils eine Messung ausgelöst werden.
Wird das TRGO Signal als Trigger ausgewählt so erzeugt der Timer 1 das entsprechende Signal aus verschiedenen einstellbaren Quellen:
Welches interne Signal des Timer 1 effektiv das TRGO Signal erzeugt wird über das TIM1_CR2 Register definiert. Das Bit-Feld MMS[2..0] beinhaltet folgende Selektionsmöglichkeiten:
Bei der Verwendung im Timer1 Trigger Modus über TRGO sollten alle ADC Register vor der Freigabe des Timers in der gewünschten Weise initialisiert sein.
Dieses Dokument sowie dessen Inhalt, insbesondere Texte, Fotografien und Grafiken, unterliegt dem Copyright (© 2017) und sind nur mit einer schriftlicher Zustimmung des Autors, Dipl.Ing.(FH) Franz Henkel zur vollständigen oder auszugsweisen Weiterverwendung in Form einer gedruckten oder elektronischen Kopie oder Replikation bzw. einer vollständigen oder auszugsweisen Bereitstellung des Inhalts in schriftlicher oder elektronischer Form, zu verwenden.