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