Start
Experimente
Grundlagen
Produkte
- ES-M32
-- Erster Test
-- USB
-- Bascom
-- RAM
-- ADC
-- Ports
-- Relais -- Morsen -- Datenlogger -- SIOS -- ASCII -- mV-Logger -- I/O12/24 V -- Bootloader
Neues
Impressum
|
ES-M32
AD-Wandler
Der ATmega32 besitzt einen internen
10-Bit AD-Wandler mit acht Eingängen. Hier soll zunächst die
Spannung am Kanal ADC0 gemessen werden. Mit gesetztem JP5 kann eine
Messspannung über das Poti eingestellt werden. Stecken sie die
Jumper JP1 (AREF) und JP5 (ADC0). Starten Sie den Test 2 des
Beispielprogramms. Nun werden Eingangsspannungen als Rohdaten im
Bereich 0...1023 und als Spannung im Bereich 0...5 V angezeigt.
|
Sub Test2 Dim D As Word Dim U As Single Config Adc = Single , Prescaler = 64 , Reference = Off Start Adc Do D = Getadc(0) Locate 1 , 1 Lcd "ADC0 " Lcd D Lcd " " U = D / 1023 U = U * 5 Locate 2 , 1 Lcd Fusing(u , "#.###") Lcd " V " Waitms 500 Loop End Sub
Mit Config ADC wird der AD-Wandler
eingerichtet. Er arbeitet mit einem Prescaler (Vorteiler), der die
Quarzfrequenz von 11,0592 MHz durch 64 teilt. Die AD-Taktfrequenz
beträgt damit ca. 173 kHz. Das Datenblatt empfiehl
Taktfrequenzen bis 200 kHz, wenn es auf beste Genauigkeit ankommt. Die
Einstellung Referenz = OFF schaltet die interne Spannungsreferenz des
ATmega32 aus. Deshalb muss man die Betriebsspannung von 5 V an den
Aref-Eingang legen,. Der AD-Wandler vergleicht dann bei jedem Aufruf
der Funktion Getadc(0) die Spannung am Eingang PA0 (=ADC0)
mit der Referenz von 5 V und bildet das Verhältnis in 1023
Schritten.
Um die Spannung in Volt zu berechnen
muss eine Zahl mit Nachkommastellen verwendet werden. Die variable
U wird daher als Single dimensioniert, also als Fließkommazahl
mit einfacher Genauigkeit. Die Umrechnung ( Spannung = Messwert / 1023
* 5 V) erfordert in Bascom die Auflösung in einzelne Schritte.
Zunächst wird der Messwert durch 1023 Schritte geteilt (U = D /
1023). Danach wird mit 5 multipliziert ( U = U * 5). Die Funktion
Fusing legt das Ausgabeformat fest, hier also drei Nachkommastellen.
|
Sub Test2 Dim D As Word Dim U As Single Config Adc = Single , Prescaler = 64 , Reference = Off Start Adc Do D = Getadc(4) Locate 1 , 1 Lcd "ADC0 " Lcd D Lcd " " U = D / 1023 U = U * 5 Locate 2 , 1 Lcd Fusing(u , "#.###") Lcd " V " Waitms 500 Loop End Sub
Testen Sie einen anderen
Eingangskanal, z.B. den Kanal ADC4, der am Port PA4 liegt. Ein offener
Eingang zeigt eine beliebige Spannung zwischen 0 V und 5 V. Stellen Sie
eine Verbindung zu GND, VCC oder zu PA0 her, wo die einstellbare
Spannung anliegt.
Ein Blick in das Datenblatt zeigt, dass der Mega32 noch wesentlich mehr Möglichkeiten hat. Der Eingangsmultiplexer
(Umschalter) kann nicht nur acht Eingangskanäle auswählen,
sondern auch Differenzeingänge mit und ohne Verstärkung.
Außerdem kann man am Kanal 31 die GND-Spannung (0 V)
messen und am Kanal 30 die interne Bandgapreferenz
von 1,22 V messen. Ändern Sie das Programm für den Kanal
30. Das Display zeigt nun eine Spannung von etwas mehr als 1,22 V
an, z.B. 1,34 V. Der Grund liegt in den Abweichungen der
Betriebsspannung von 5 V, die hier als externe Referenz verwendet wird.
Ungenauigkeiten ergeben sich besonders wenn Sie die Versorgung
über USB verwenden. Auch wegen des Spannungsabfalls an der
Polyswitch-Sicherung ist eine Abweichung der Betriebsspannung von z.B.
-10% möglich. Die genaue Referenzspannung wird deshalb um 10 % zu
hoch angezeigt. Setzen Sie ein externes Netzteil ein, dann erreichen
Sie mit dem 5-V-Regler auf der Platine eine Genauigkeit von knapp 1 %. |
Verwenden Sie die interne Referenz von
2,56 V. Das Datenblatt empfiehlt die Umrechnung ACD = Vin * 1024
/ Uref.. Das bedeutet, dass die 2560 mV in 1024 Schritte aufgelöst
werden. Eine Stufe beträgt daher exakt 2,5 mV. Messen Sie die
interne Referenz von 1,22 V am Kanal 30. Die Spannung von 1,22 wird nun
mit einer Abweichung unter 1% angezeigt. Tatsächlich vergleicht
man hier die Referenz mit sich selbst, genauer gesagt wird der
Verstärkungsfaktor 2,56/1,22 gemessen.
|
Sub Test2 Dim D As Word Dim U As Single Config Adc = Single , Prescaler = 64 , Reference = Internal Start Adc Do D = Getadc(30) Locate 1 , 1 Lcd "ADC0 " Lcd D Lcd " " U = D / 1023 U = U * 2.56 Locate 2 , 1 Lcd Fusing(u , "#.###") Lcd " V " Waitms 500 Loop End Sub
Die Differenzeingänge des
AD-Wandlers messen die Spannungsdifferenz zwischen zwei Eingängen.
Außerdem kann eine Verstärkung von 10-fach oder 200-fach
eingeschaltet werden. Das Datenblatt weist darauf hin, dass in der
DIP-Version des Mega32 die Funktion der Differenzeingänge mit
Verstärkung 200 nicht garantiert wird. Trotzdem soll diese
Funktion einmal getestet werden. Die folgende Variante misst die
Differenz von ADC1 gegen ADC0 bei 200-facher Verstärkung mit
interner Referenz. Weil die Messung auch negative Werte zulässt
muss die Variable D als Integer dimensioniert werden. Negative Werte
erscheinen im Bereich 1023 bis 513. Der Messbereich reicht nun von
-6,4 mV bis +6,4 mV. Die Auflösung beträft also 12,5
µV! Die hohe Empfindlichkeit ermöglicht z.B. Strommessungen
über den Spannungsabfall an einem niederohmigen Messwiderstand.
|
Sub Test2 Dim D As Integer Dim U As Single Config Adc = Single , Prescaler = 64 , Reference = Internal Start Adc Do D = Getadc(11) Locate 1 , 1 Lcd "ADC0 " Lcd D Lcd " " If D > 512 Then D = D - 1024 End If U = D / 1023 U = U * 2.56 U = U * 2 Locate 2 , 1 Lcd Fusing(u , "#.###") Lcd " mV " Waitms 500 Loop End Sub
|