Hallo!
Nun hab ichs glaube ich verstanden. Danke!
Die Vref hab ich auf 2,56V verkleinert. Könnte bitte nochmal jemand den Code ansehen, ob man das so macht. Ich hab was mit Mittelwertbildung reingemacht, merke aber nicht allzuviel Unterschied bei der Anzeige.
Nimmt das Programm eigentlich immer einen neuen gewandelten Wert vom ADU für Umes? Oder ist das immer der gleiche? Dann hats wenig Sinn Oder?
Code:
'///////////////////////////////////////////////////////////////////////////////
'STK200 und ATMEGA8535
'Strommmessung
'///////////////////////////////////////////////////////////////////////////////
' I
' ! !\ V=20 (LMP8270)
' +----+------+ \
' # ! ! \
' #Rs ! Umes ! +-------####----+------> ADC Kanal2
' # ! =50mV! / 5k ! Uadc=1000mV (Wenn 50A Strom fließt)
' +----Y------+ / === 1n
' ! !/ !
' -+- -+-
' Rs=1mOhm
'
' 1mV =======> x 20 ==================> = 20mV = 1A
' 10mV =======> x 20 ==================> = 200mV = 10A
' 50mV =======> x 20 ==================> = 1000mV = 50A
'---------------------------------------------------------
'! Umes <-------- Uadc/20 <--------------- Uadc
'---------------------------------------------------------
'
'
' Vref= Extern= 2,56V mit Poti am STK200 eingestellt
'
'///////////////////////////////////////////////////////////////////////////////
$regfile = "M8535.dat"
$crystal = 8000000 ' Interner Takt des AVR => FuseBit!
Config Lcd = 20 * 4
Config Lcdmode = Port
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6
Config Lcdpin = Pin , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Portd = Input
Config Portb = Output
Portb = 255
Cls
Wait 1
Dim Wert As Word
Dim Offset As Word
Dim Uadc2 As Single 'Single= 4 Byte
Dim Umes As Single
Dim I As Single
Dim N As Byte
Dim Umes1 As Single
Config Adc = Single , Prescaler = Auto , Reference = Off
Start Adc
'///////////////////////////////////////////////////////////////////////////////
Do
Wert = Getadc(2)
Uadc2 = Wert * 0.002502 'VREF= 2,56V
'/////// Mittelwert für die Anzeige bilden /////////////////////////////////
N = 0
Do
Umes1 = Umes1 + Umes
Incr N
Loop Until N = 50
Umes1 = Umes1 / 51
Umes = Uadc2 / 20 'Umes= Wert am Shunt in V
I = Umes * 1000 'Umrechnung für Stromanzeige
'// LCD Anzeige /////////////////////////////////////////////////////
Cursor Off Noblink
Locate 1 , 1 : Lcd "Uadc2= " ; Fusing(uadc2 , "##.###")
Waitms 300
Locate 2 , 1 : Lcd "Umes= " ; Fusing(umes , "##.####")
Waitms 300
Locate 3 , 1 : Lcd "I= " ; Fusing(i , "##.#")
Waitms 300
Locate 4 , 1 : Lcd "Umes1= " ; Fusing(umes1 , "#.#####")
Waitms 300
' So schaut die LCD Anzeige bei 50mV am Shunt aus:
'/////////////////////
'// Uadc2= 1.001
'// Umes= 0.0502
'// I= 50.0
'// Umes1= 0.05017
'/////////////////////
Loop
End
Gruß
Hans
Lesezeichen