Witam
Właśnie robie sobie wyświetlacz do samochodu, na razie mam dwie temperatury i napięcie...
Zamieszczam listing:
Mam to uruchomione na płytce testowej...
Tak wiem program jest do bani, ale działa i to dla mnie się liczy, ale do rzeczy...
Chciałbym zrobić coś takiego: podaje napięcie z instalacji samochodu +12V przez dzielnik na port c.1 Atmegi, i chcę zrobić tak, że gdy to napięcie jest to ma się wyświetlić w 4 lini, że wentylator jest włączony...Tylko tu mam problem jak sprawdzać stan na tym wejściu...Ustawiłem go jako input, zresetowałem, przydzieliłem nazwę "Went', niestety nie działa to bo od razu po włączeniu zasilania wyświetla mi się to na wyświetlaczu...
Jak zrobiłem tak:
to jest ok, tylko muszę mieć na porcie albo masę albo +12V bo inaczej wariuje...tzn. na przemian wyświetla się , że jest wł, i wył.
Jak się z tym uporać?
Mam jeszcze drugi problem: napisałem sterownik lampki do samochodu, który w momencie zwarcia wyłącznika w drzwiach czyli podaniu "0" płynnie zaświeca i świeci się do momentu gdy wyłącznik zostanie przerwany zostaje wygaszana z opóźnieniem ok 5s , w końcowej fazie płynnie przez pwm, problem w tym, że jak w momencie np. tego płynnego wygaszania zostanie ponownie podana masa (zwarty wyłącznik) to lampka ma się zaświecić od razu, a nie tak tak jest teraz czyli musi zgasnąć i dopiero po tym zaświeca się płynnie...jak to zrobić?
Jak dodać funkcję wyłączania lampki w momencie gdy podawana jest masa dłużej niż np. 30s ??
Listing:
Przepraszam, że programy bez komentarzy...
Pozdrawiam z góry dzięki za odpowiedzi...
Właśnie robie sobie wyświetlacz do samochodu, na razie mam dwie temperatury i napięcie...
Zamieszczam listing:
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portd.1 , Db5 = Portd.2 , Db6 = Portd.3 , Db7 = Portd.4 , E = Portd.0 , Rs = Portd.5
Config Lcd = 20 * 4
Config 1wire = Portd.7
Config Pinc.0 = Output
Config Pinb.0 = Output
Config Pinb.1 = Input
Set Portc.0
Set Portb.0
Reset Portc.1
D Alias Portc.0
R Alias Portb.0
Went Alias Portb.1
Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Wart_ac As Word
Dim V As Single
Dim P As String * 3
Dim X As Single
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Deflcdchar 1 , 28 , 4 , 6 , 12 , 4 , 4 , 14 , 32
Deflcdchar 2 , 4 , 21 , 10 , 27 , 27 , 10 , 21 , 4
Deflcdchar 3 , 32 , 32 , 14 , 17 , 30 , 16 , 15 , 2
Deflcdchar 4 , 32 , 4 , 21 , 14 , 27 , 14 , 21 , 4
Cls
Cursor Off
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
Cursor Off
Cls
Do
1wreset
1wwrite &H55
1wverify Dsid1(1)
1wwrite &HBE
I1 = 1wread(2)
1wreset
1wwrite &H55
1wverify Dsid2(1)
1wwrite &HBE
I2 = 1wread(2)
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
I1 = I1 / 16
'If I1 > 0 Then Cls
Ss = Str(i1)
Ss = Format(ss , "##")
Locate 1 , 1
Lcd "Temp. silnika:"
Locate 1 , 16
Lcd Ss ; Chr(0) ; "C";
I2 = I2 / 16
'If I2 > 0 Then Cls
Ss = Str(i2)
Ss = Format(ss , "##")
Locate 2 , 1
Lcd "Temp. zew.:"
Locate 2 , 16
Lcd Ss ; Chr(0) ; "C";
If I1 > 990 Then
Gosub Temp
End If
Start Adc
Cursor Off
Wart_ac = Getadc(1)
V = Wart_ac * 0.0049
X = V * 4
P = Fusing(x , "#.&")
Locate 3 , 1
Lcd "Napi" ; Chr(3) ; "cie:" ;
Locate 3 , 16
Lcd P ; "V"
If Wart_ac > 750 Then
Gosub Wysokie
End If
If Wart_ac < 560 Then
Gosub Niskie
End If
If Went = 0 Then
Locate 4 , 1
Lcd "Wentylator Wl."
End If
Loop
Wysokie:
Cls
Lcd "Zbyt wysokie"
Locate 2 , 1
Lcd ; Chr(1) ; "adowanie"
Reset D
Waitms 500
Set D
Cls
Return
Niskie:
Cls
Lcd "Akumulator"
Locate 2 , 1
Lcd "niedo" ; Chr(1) ; "adowany"
Reset D
Wait 3
Set D
Cls
Return
Temp:
Cls
Lcd "Silnik si" ; Chr(3);
Lowerline
Lcd "przegrzewa"
Reset D
Wait 3
Set D
Cls
Return
EndMam to uruchomione na płytce testowej...
Tak wiem program jest do bani, ale działa i to dla mnie się liczy, ale do rzeczy...
Chciałbym zrobić coś takiego: podaje napięcie z instalacji samochodu +12V przez dzielnik na port c.1 Atmegi, i chcę zrobić tak, że gdy to napięcie jest to ma się wyświetlić w 4 lini, że wentylator jest włączony...Tylko tu mam problem jak sprawdzać stan na tym wejściu...Ustawiłem go jako input, zresetowałem, przydzieliłem nazwę "Went', niestety nie działa to bo od razu po włączeniu zasilania wyświetla mi się to na wyświetlaczu...
Jak zrobiłem tak:
If Went = 0 Then
Locate 4 , 1
Lcd "Wentylator Wl."
Else
Lcd "Wentylator Wyl."
End ifto jest ok, tylko muszę mieć na porcie albo masę albo +12V bo inaczej wariuje...tzn. na przemian wyświetla się , że jest wł, i wył.
Jak się z tym uporać?
Mam jeszcze drugi problem: napisałem sterownik lampki do samochodu, który w momencie zwarcia wyłącznika w drzwiach czyli podaniu "0" płynnie zaświeca i świeci się do momentu gdy wyłącznik zostanie przerwany zostaje wygaszana z opóźnieniem ok 5s , w końcowej fazie płynnie przez pwm, problem w tym, że jak w momencie np. tego płynnego wygaszania zostanie ponownie podana masa (zwarty wyłącznik) to lampka ma się zaświecić od razu, a nie tak tak jest teraz czyli musi zgasnąć i dopiero po tym zaświeca się płynnie...jak to zrobić?
Jak dodać funkcję wyłączania lampki w momencie gdy podawana jest masa dłużej niż np. 30s ??
Listing:
$regfile = "m8def.dat"
$crystal = 8000000
Config Pinb.1 = Output
Config Pinb.5 = Input ' wylacznik
Set Portb.5
S Alias Pinb.5
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 8
Dim I As Byte
Pwm1a = 255
Do
If S = 0 Then
For I = 255 To 0 Step -1
Pwm1a = I
Waitms 15
Next I
Incr I
Bitwait S , Set
If S = 1 Then
Pwm1a = 0
Wait 2
For I = 0 To 255
Pwm1a = I
Waitms 25
If S = 0 Then
Pwm1a = 0
End If
Next I
Decr I
End If
End If
LoopPrzepraszam, że programy bez komentarzy...
Pozdrawiam z góry dzięki za odpowiedzi...