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