Hallo Valen,
und Danke für deine Antwort.
Ich wollte mit Absicht Code und Schaltung nicht mit Posten da in der Schaltung noch ein 7805 drin ist. Der Code ist evtl. auch etwas undurchsichtig... aber OK.
UART ist etwas Schwierig (vorallem Nachts) da der Regler schon montiert ist, aber ich habe die wichtigsten Infos auf einem Display. (Daher meine Vermutung) 
Normale Angaben auf dem Display:
Modulspannung: ~13,5V
Batteriespannung: ~12,8V
Ladespannung die zum Akku durchgelassen wird in Prozent: 100%
Angaben nach der Nacht:
Modulspannung: ~7V
Batteriespannung: ~27V (Das ist etwa die maximalspannung die am ADC 5V ergeben)
Ladespannung die zum Akku durchgelassen wird in Prozent: 0% (Der MC hat versucht die Batteriespannung runterzuregeln)
Da die 27V nie und nimmer aufgetreten sein können, kann eigentlich nur die Referenzspannung abgefallen sein bevor MC abgeschalten hat.
Ich habe dieses auch mit abgedeckten Solarmodulen getestet und diese langsam aufgedeckt (Morgengrauen). Selbe Ergebnis.
Wie könnte ich dass sicherstellen das die Referenzspannung i.O. ist, bevor ich mit der Messung beginne?
Vielen Dank für Eure Hilfe.
	Code:
	'*******************************************************************************
'*******************************************************************************
'***************************** Solarregler V1.0 ********************************
'*******************************************************************************
'************************** 25.10.2013 by CYBORG *******************************
'*******************************************************************************
'*******************************************************************************
'****************************** Allgemein **************************************
$regfile = "m88pdef.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 16
$framesize = 32
$baud = 4800
'************************************ Time *************************************
Config Timer0 = Timer , Prescale = 1024
On Timer0 Set_display
Const Timervorgabe = 12
Enable Timer0
Dim Stime As Word
Dim Idiv As Word
Dim Timermenue As Word
Dim Timerbool As Word
Timerbool = 0
Timermenue = 5
'******************************* Displayanzeige ********************************
Dim Slcd As String * 16
Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portd.6 , Db6 = Portd.5 , _
   Db7 = Portd.4 , E = Portb.0 , Rs = Portb.2
Config Lcd = 16 * 2
Initlcd
Cursor Off Noblink
Cls
Locate 1 , 1
Lcd "MOD: 0.00V 20.0C"
Locate 2 , 1
Lcd "BAT: 0.00V =100%"
'***************************** LED Statusanzeige *******************************
Led1 Alias Portb.6
Led2 Alias Portb.7
Config Portb.6 = Output
Config Portb.7 = Output
Led1 = 0
Led2 = 0
'********************************** Taster *************************************
Taster1 Alias Pind.2
Taster2 Alias Pind.3
Config Taster1 = Input
Config Taster2 = Input
Portd.2 = 1       'PullUp-Widerstand einschalten
Portd.3 = 1       'PullUp-Widerstand einschalten
On Int0 Set_taster1
On Int1 Set_taster2
Config Int0 = Falling
Config Int1 = Falling
Enable Int0
Enable Int1
'******************************* Accu Steuerung ********************************
Dim Pwmtemp As Integer
Dim Pwmstate As String * 4
Dim Acculimit As Single
Dim Eacculimit As Eram Single
Dim Pwmspercent As Single
Dim Pwmwpercent As Word
Accu1 Alias Portb.1
Config Accu1 = Output
Config Timer1 = Pwm , Pwm = 8 , Compare_a_pwm = Clear_down , Prescale = 1
Accu1 = 0
Acculimit = Eacculimit
Pwmtemp = 255
Pwm1a = Pwmtemp
Disable Timer1
Pwmstate = "=   "
'******************************** Temperatur ***********************************
Const Adc_temp = 0.04
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Tempadc As Word
Dim Temp As Single
'****************************** Solarspannung **********************************
Const Adc_solar = 27.669 / 1024
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Solaradc As Word
Dim Solar As Single
'****************************** Solarspannung **********************************
Const Adc_accu = 27.669 / 1024       '0,027
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Accuadc As Word
Dim Accu As Single
Enable Interrupts
'****************************** Hauptschleife **********************************
Dim I As Integer
Do
'Alles Messen
Gosub Get_temp
Waitms 1
Gosub Get_solar
Waitms 1
Gosub Get_accu
Waitms 1
If Accu > Acculimit Then
    If Pwmtemp > 0 Then
      Enable Timer1
      Pwmtemp = Pwmtemp - 1
      Pwm1a = Pwmtemp
      Pwmstate = "-   "
    Else
      Disable Timer1
      Accu1 = 1
      Pwmstate = "=   "
    End If
Elseif Accu < Acculimit Then
   If Pwmtemp < 255 Then
      Enable Timer1
      Pwmtemp = Pwmtemp + 1
      Pwm1a = Pwmtemp
      Pwmstate = "+   "
   Else
      Disable Timer1
      Accu1 = 1
      Pwmstate = "=   "
   End If
End If
Loop
End
'******************************** Functions ************************************
Set_taster1:
Timerbool = Timermenue
'Menue
Cls
Slcd = "Akkulimit:"
Locate 1 , 1
Lcd Slcd
Slcd = Fusing(acculimit , "#.##")
Slcd = Slcd + "V"
Locate 1 , 12
Lcd Slcd
Do
   If Taster1 = 0 Then
      Acculimit = Acculimit + 0.01
      Slcd = Fusing(acculimit , "#.##")
      Slcd = Slcd + "V"
      Locate 1 , 12
      Lcd Slcd
      Waitms 250
      Timerbool = Timermenue
   Else
      Exit Do
   End If
Loop
Return
Set_taster2:
Timerbool = Timermenue
'Menue
Cls
Slcd = "Akkulimit:"
Locate 1 , 1
Lcd Slcd
Slcd = Fusing(acculimit , "#.##")
Slcd = Slcd + "V"
Locate 1 , 12
Lcd Slcd
Do
   If Taster2 = 0 Then
      Acculimit = Acculimit - 0.01
      Slcd = Fusing(acculimit , "#.##")
      Slcd = Slcd + "V"
      Locate 1 , 12
      Lcd Slcd
      Waitms 250
      Timerbool = Timermenue
   Else
      Exit Do
   End If
Loop
Return
Get_temp:
   Tempadc = Getadc(3)
   Temp = Tempadc * Adc_temp
Return
Get_solar:
   Solaradc = Getadc(0)
   Solar = Solaradc * Adc_solar
Return
Get_accu:
   Accuadc = Getadc(2)
   Accu = Accuadc * Adc_accu
Return
Set_display:
   Timer0 = Timervorgabe
   If Idiv = 4 Then
      If Timerbool = 0 Then
         Stime = Stime + 1
         Slcd = Fusing(solar , "#.##")
         Locate 1 , 6
         Lcd Slcd
         Slcd = Fusing(temp , "#.#")
         Locate 1 , 12
         Lcd Slcd
         Slcd = Fusing(accu , "#.##")
         Locate 2 , 6
         Lcd Slcd
         Locate 2 , 12
         Lcd Pwmstate
         Pwmspercent = 100 / 255
         Pwmspercent = Pwmspercent * Pwmtemp
         Pwmwpercent = Round(pwmspercent)
         Slcd = Str(pwmwpercent )
         I = Len(slcd)
         I = 16 - I
         Locate 2 , I
         Lcd Pwmwpercent
      Elseif Timerbool <> 0 Then
          Timerbool = Timerbool - 1
          If Timerbool = 0 Then
            Eacculimit = Acculimit
            Locate 1 , 1
            Lcd "MOD:     V     C"
            Locate 2 , 1
            Lcd "BAT:     V     %"
          End If
      End If
      Idiv = 0
   Else
      Idiv = Idiv + 1
   End If
Return
 
						
					
Lesezeichen