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