Cześć.
Mam taki problem napisałem sobie program który steruje ładowarką.
Jeśli ustawie mu:
cksel=0100 , sut=00 to nie działa program - nic sie nie dzieje.
a jeśli ustawię:
cksel=0100 , sut=10 wtedy działa ale źle liczy czas
Program robiony na szybko wiec może ma gdzieś błąd ewentualnie co poprawić w nim??
Mam taki problem napisałem sobie program który steruje ładowarką.
Jeśli ustawie mu:
cksel=0100 , sut=00 to nie działa program - nic sie nie dzieje.
a jeśli ustawię:
cksel=0100 , sut=10 wtedy działa ale źle liczy czas
Program robiony na szybko wiec może ma gdzieś błąd ewentualnie co poprawić w nim??
$crystal = 8000000
$regfile = "m8def.dat"
Config Timer0 = Timer , Prescale = 64
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Sek As Byte
Dim Minuta As Byte
Dim Godzinaa As Byte
Dim Minutaa As Byte
Dim Godzina As Byte
Dim Krok As Byte
Dim X As Byte
Dim Y As Byte
Dim Warnap As Integer
Dim N As Single
Dim Warnap1 As Integer
Dim Licznik As Integer
Dim Odczyt2 As Word
Declare Sub Pomiar_nap
Config Portb.6 = Output 'przekaźnik 1
P1 Alias Portb.6
Reset Portb.6
Config Portb.0 = Output 'przekaznik 2
P2 Alias Portb.0
Reset Portb.0
Config Pind.7 = Input 'czas a
Ta Alias Pind.7
Set Pind.7
Config Pind.6 = Input 'czas b
Tb Alias Pind.6
Set Pind.6
Config Pind.5 = Input 'czas c
Tc Alias Pind.5
Set Pind.5
Config Portb.2 = Output ' pulsujace led
Pulse Alias Portb.2
Reset Portb.2
Config Portb.1 = Output 'pilnuje naladowania
Pilnuje Alias Portb.1
Reset Portb.1
'STANY NALADOWANIA
Config Portb.5 = Output 'czerwona led
Cz Alias Portb.5
Reset Portb.5
Config Portb.4 = Output ' zolta led
Zo Alias Portb.4
Reset Portb.4
Config Portb.3 = Output ' zielona led
Zi Alias Portb.3
Reset Portb.3
Wait 1
Set Cz
Waitms 500
Set Zo
Waitms 500
Set Zi
Waitms 500
Set Pulse
Waitms 500
Set Pilnuje
Wait 1
Reset Cz
Waitms 200
Reset Zo
Waitms 200
Reset Zi
Waitms 200
Reset Pulse
Waitms 200
Reset Pilnuje
Home:
On Timer0 Timer0_int
Enable Interrupts
Timer0 = 6
Licznik = 0
Godzina = 0
Minuta = 0
Godzinaa = 0
Minutaa = 0
Krok = 0
Odczyt2 = 0
N = 0
If Ta = 0 And Tb = 0 And Tc = 0 Then Y = 2 ' czas 2 min
If Ta = 1 And Tb = 1 And Tc = 1 Then X = 12 ' czas 12 h
If Ta = 1 And Tb = 1 And Tc = 0 Then X = 10 ' czas 10 h
If Ta = 0 And Tb = 1 And Tc = 1 Then X = 8 ' czas 8 h
If Ta = 1 And Tb = 0 And Tc = 1 Then X = 6 ' czas 6 h
If Ta = 1 And Tb = 0 And Tc = 0 Then X = 4 ' czas 4 h
If Ta = 0 And Tb = 1 And Tc = 0 Then X = 2 ' czas 2 h
If Ta = 0 And Tb = 0 And Tc = 1 Then X = 1 ' czas 1 h
Do
Odczyt2 = 0
For Krok = 1 To 50
Warnap = Getadc(3)
Odczyt2 = Odczyt2 + Warnap
Waitms 20
Next Krok
Warnap1 = Odczyt2 / 50
N = Warnap1 'pomiar stanu baterii
If N < 480 Then 'mniejsza od
Toggle Cz
Gosub Home
End If
If N > 682 Then 'wieksza od
Toggle Zo
Gosub Home
End If
If N > 480 Then 'wieksza od
Set P1
Reset Cz
Reset Zo
Reset Zi
Gosub Program
End If
Loop
Program: 'pomiar usrednienie
' 50 pomiarow
Do
Enable Timer0
Odczyt2 = 0
For Krok = 1 To 50
Warnap = Getadc(3)
Odczyt2 = Odczyt2 + Warnap
Waitms 20
Next Krok
Warnap1 = Odczyt2 / 50
N = Warnap1
If Minutaa = 10 Then
Minutaa = 0 'co 10 min skacz do wskazan
Call Pomiar_nap
End If
Loop
Sub Pomiar_nap:
If Godzina = X Then
Reset P1 'czas ladowania przekroczony
Reset P2
Gosub Zla_bateria2
End If
If N < 682 Then 'bateria mniej niz zmien kolor diody czerwona
Set Cz
Reset Zo
Reset Zi
End If
If N > 670 Then 'bateria wiecej niz zmien kolor diody zolta
Reset Cz
Reset Zi 'przejdz na ladowanie mniejszym pradem
Set Zo
Reset P1
Wait 5
Set P2
End If
If N > 752 Then 'bateria wiecej niz zmien kolor diody zielona
Reset Cz
Reset Zo
Set Zi
Godzinaa = 0
Minutaa = 0
Gosub 2faza
End If
End Sub
2faza: 'ladowanie trwa dalej jeszcze godzine
Do
If Godzinaa = 1 Then
Godzina = 0
Minuta = 0
Minutaa = 0
Godzinaa = 0
X = 10
Gosub Pilnuj:
End If
Loop
Pilnuj: 'ladowarka laduje 10 min i 50 min przerwy
' ale tylko 10 godzin
Do
Set Pilnuje
Toggle Pulse
Odczyt2 = 0
For Krok = 1 To 50
Warnap = Getadc(3)
Odczyt2 = Odczyt2 + Warnap
Waitms 20
Next Krok
Warnap1 = Odczyt2 / 50
N = Warnap1
Reset P2
Reset P1
If Godzina = X Then 'naładowana koniec czasu
Do
Toggle Zi
Reset P2
Reset P1
Loop
End If
If Minutaa = 50 Then '50 przerwy w ladowaniu
Minutaa = 0
Gosub Doladuj
End If
Loop
Doladuj: '10 min ladowania
Do
Set P2
If Minutaa = 10 Then
Minutaa = 0
Gosub Pilnuj
End If
Loop
Zla_bateria2:
Reset P1
Reset P2
Reset Cz
Reset Zo
Reset Zi
Reset Pulse
Do
Toggle Cz
Toggle Zo
Toggle Zi
Toggle Cz
Toggle Pilnuje
Toggle Pulse
Waitms 500
Loop
Timer0_int:
Counter0 = Counter0 + 6
Incr Licznik
If Licznik = 500 Then
Incr Sek
Licznik = 0
End If
If Sek > 59 Then
Incr Minutaa
Incr Minuta
Sek = 0
End If
If Minutaa > 59 Then
Incr Godzinaa
Incr Godzina
Minutaa = 0
End If
Return