Hans55
25.12.2007, 17:29
Hallo zusammen!
Ich möchte mit einem ATMEGA8535 eine Batteriespannung von 12V messen.
Das funktioniert auch schon so einigermaßen.
Aber gerade im Bereich zwischen 10...14V ist das ganze sehr ungenau.
Ich muß praktisch jedesmal einen anderen Faktor wählen um auf die richtige Spannung zu kommen.
Wenn ich Ue und Uadc bei jedem Volt messe sieht man das Unlineare
gerade in dem Bereich der mich interessiert.
Ue Uadc
[V] -> [V]
15 ->3,998
14 ->3,869
13 ->3,717
12 ->3,518
11 ->3,296
10 ->3,034
9 ->2,751
8 ->2,454
7 ->2,150
6 ->1,845
5 ->1,540
Die Eingangsspannung geht auf ein 5kOhm Poti, vom Schleifer geh ich an den ADC Kanal 0. Am Eingang des ADC K0 habe ich eine ZD4,7V.
Kann das an der Z-Diode (4,7V) oder an der Referenzspannung AREF=4,0V liegen? Hat da jemand eine Idee?
2.Frage:
Wie macht man das im Forum wenn man den Code in ein zusätzliches Fenster schreiben möchte?
Gruß
Hans
Ds ist das Programm:
'************************************************* *********
'* Liest den ADU-Channel-0 aus und zeigt ihn an der LCD-Anzeige an.
'* Der ADU hat 10Bit Auflösung. d.h. 2 hoch 10 =1024 -1Bit = 1023
'* ==> 4V/ 1023 =0,003910 d.h. 1Digit = 0,00391 V
'* Anschluss am STK200:
'* AREF auf 4V einstellen.
'* Die interne AREF ist mit "Reference = Off" ausgeschaltet
'* (Siehe Help "Config ADC")
'*
'************************************************* *********
Umess:
Dim Adu_wert As Word
Dim U_an_adc0 As Single
Dim Umes As Single
Const Channel = 0 '
Config Adc = Single , Prescaler = Auto , Reference = Off
Start Adc
'--- Auslesen Kanal 0--------------------------------------------------------
Do
Adu_wert = Getadc(channel)
U_an_adc0 = Adu_wert * 0.00391 '///4 Volt AREF/ 1023=0,00391
'// U_an_adc0 ist der Wert, der am ADC0 anliegt
'// Da davor noch ein Spannungsteiler ist, an dem eine höhere
'// Spannung anliegt, muss ein Faktor rein
'// (hier im Beisp: 9,53V = 2,91V => 3,42378)
Umes = U_an_adc0 * 3.42378
'---Spannung am ADC0 ------------------------------------
Locate 1 , 1
Lcd "UADC=" ; Fusing(u_an_adc0 , "##.#")
Locate 1 , 10
Lcd "V" ' Volt wird hinter Wert angezeigt
Waitms 100
'---Spannung am Eingang -----------------------------------
Locate 2 , 1
Lcd "UEin=" ; Fusing(umes , "##.#")
Locate 2 , 10
Lcd "V" ' Volt wird hinter Wert angezeigt
Waitms 100
Loop
Return
Ich möchte mit einem ATMEGA8535 eine Batteriespannung von 12V messen.
Das funktioniert auch schon so einigermaßen.
Aber gerade im Bereich zwischen 10...14V ist das ganze sehr ungenau.
Ich muß praktisch jedesmal einen anderen Faktor wählen um auf die richtige Spannung zu kommen.
Wenn ich Ue und Uadc bei jedem Volt messe sieht man das Unlineare
gerade in dem Bereich der mich interessiert.
Ue Uadc
[V] -> [V]
15 ->3,998
14 ->3,869
13 ->3,717
12 ->3,518
11 ->3,296
10 ->3,034
9 ->2,751
8 ->2,454
7 ->2,150
6 ->1,845
5 ->1,540
Die Eingangsspannung geht auf ein 5kOhm Poti, vom Schleifer geh ich an den ADC Kanal 0. Am Eingang des ADC K0 habe ich eine ZD4,7V.
Kann das an der Z-Diode (4,7V) oder an der Referenzspannung AREF=4,0V liegen? Hat da jemand eine Idee?
2.Frage:
Wie macht man das im Forum wenn man den Code in ein zusätzliches Fenster schreiben möchte?
Gruß
Hans
Ds ist das Programm:
'************************************************* *********
'* Liest den ADU-Channel-0 aus und zeigt ihn an der LCD-Anzeige an.
'* Der ADU hat 10Bit Auflösung. d.h. 2 hoch 10 =1024 -1Bit = 1023
'* ==> 4V/ 1023 =0,003910 d.h. 1Digit = 0,00391 V
'* Anschluss am STK200:
'* AREF auf 4V einstellen.
'* Die interne AREF ist mit "Reference = Off" ausgeschaltet
'* (Siehe Help "Config ADC")
'*
'************************************************* *********
Umess:
Dim Adu_wert As Word
Dim U_an_adc0 As Single
Dim Umes As Single
Const Channel = 0 '
Config Adc = Single , Prescaler = Auto , Reference = Off
Start Adc
'--- Auslesen Kanal 0--------------------------------------------------------
Do
Adu_wert = Getadc(channel)
U_an_adc0 = Adu_wert * 0.00391 '///4 Volt AREF/ 1023=0,00391
'// U_an_adc0 ist der Wert, der am ADC0 anliegt
'// Da davor noch ein Spannungsteiler ist, an dem eine höhere
'// Spannung anliegt, muss ein Faktor rein
'// (hier im Beisp: 9,53V = 2,91V => 3,42378)
Umes = U_an_adc0 * 3.42378
'---Spannung am ADC0 ------------------------------------
Locate 1 , 1
Lcd "UADC=" ; Fusing(u_an_adc0 , "##.#")
Locate 1 , 10
Lcd "V" ' Volt wird hinter Wert angezeigt
Waitms 100
'---Spannung am Eingang -----------------------------------
Locate 2 , 1
Lcd "UEin=" ; Fusing(umes , "##.#")
Locate 2 , 10
Lcd "V" ' Volt wird hinter Wert angezeigt
Waitms 100
Loop
Return