Witam
Jestem w trakcie tworzenia Sterownika do Pompy Ciepłej wody Użytkowej (C.W.U) ten sterownik ma spełniać dwa warunki:
1. Włączyć pompę, jeżeli temperatura zadana jest większa bądź równa temperaturze, jaka jest w bojlerze z ciepłą wodą
2. Włączyć pompę o określonej porze np. od godziny 6.00 do godziny 8.00
Mózgiem tego będzie ATMEGA8 układ czasowy to PCF8583, układ do mierzenia temperatury na zbiorniku to DS1820 Wyświetlacz LCD 2x16. Próbowałem już napisać coś w Bascom-ie, ale ciężko mi idzie (kod poniżej) i miał bym do was prośbę czy pomógłby mi ktoś zrobić Menu.
Sterownik ma działać tak jak go włączę to w pierwszej linijce wyświetlacza ma być aktualny czas a w drugiej temperatura bojlera, jeżeli przyciśniemy około 2 sekund przycisk Menu(S5) to pokaże nam się w pierwszej linijce Ustaw temperaturę a w drugiej temperatura, którą regulujemy przyciskiem S3, S4, gdy przyciśniemy jeszcze raz menu to przejdziemy do drugiej opcji menu, czyli ustaw aktualny czas poruszanie się S3 do góry S4 w dół S1 Lewo S2 prawo następnie jak przyciśniemy menu to przejdziemy do Ustaw Pierwszy czas programowania poruszamy się tak samo jak przy ustawieniu aktualnego czasu i tymi ustawieni mamy np. takie 7:00 - 8:00 a gdy Będzie ustawienie 00:00 - 00:00 to programowanie czasu wyłączone i następne przyciśnięcie Menu spowoduje do przejścia dalej, czyli Ustaw 2 czas i tak samo jak poprzedni i tak 10 razy a gdy byśmy jakiegoś przycisku nie przycisnęli przez około 10 sekund to wróci do głównego programu, czyli wyświetli czas i temperaturę. I jeszcze jedna taka opcja, czyli ręczne włączanie pompy jak przycisk S6 przyciśnie się przez 3 sekundy pompa się włączy na wyświetlaczu będzie napisane w pierwszej linijce Ręczne wł., pompy a w drugiej linijce Włączona a jak ponownie się przyciśnie to będzie pisało wyłączona i przejdzie do głównego programy, czyli czas i temperatura.
Przykład działania
Czas 7:20
Temp. Bojlera: 35 stopni C
Menu:
1.
Temp. zadana
30 stopni C
2.
Ustaw Czas
7:20
3.
Ustawienie 1
6:00 - 8:00
4.
Ustawienie 2
14:00 - 16:00
5.
Ustawienie 3
18:00 - 19:20
6.
Ustawienie 4
21:00 - 22:30
7.
Ustawienie 5
00:00 - 00:00
8.
Ustawienie 6
00:00 - 00:00
9.
Ustawienie 7
00:00 - 00:00
10.
Ustawienie 8
00:00 - 00:00
11.
Ustawienie 9
00:00 - 00:00
12.
Ustawienie 10
00:00 - 00:00
Mam nadzieje, że dobrze napisałem starałem się opisać to tak, abyście zrozumieli co mam na myśli.
Proszę was o pomoc zrobiłem schemat, ale płytki i elementów jeszcze nie mam, bo muszę je dopiero zamówić a po drugi to jak nie zrobię programu to reszta nie ma sensu, ale jak będzie program to i sterownik zrobię. Poniżej jest to, na czym stanąłem i prosiłbym was o wyjaśnienia tak abym zrozumiał, bo chciałbym się nauczyć tworzenia takich programów, bo nawet to jak siedzę i czytam różne artykuły to już mnie powoli wciągnęło.
Schemat
Jestem w trakcie tworzenia Sterownika do Pompy Ciepłej wody Użytkowej (C.W.U) ten sterownik ma spełniać dwa warunki:
1. Włączyć pompę, jeżeli temperatura zadana jest większa bądź równa temperaturze, jaka jest w bojlerze z ciepłą wodą
2. Włączyć pompę o określonej porze np. od godziny 6.00 do godziny 8.00
Mózgiem tego będzie ATMEGA8 układ czasowy to PCF8583, układ do mierzenia temperatury na zbiorniku to DS1820 Wyświetlacz LCD 2x16. Próbowałem już napisać coś w Bascom-ie, ale ciężko mi idzie (kod poniżej) i miał bym do was prośbę czy pomógłby mi ktoś zrobić Menu.
Sterownik ma działać tak jak go włączę to w pierwszej linijce wyświetlacza ma być aktualny czas a w drugiej temperatura bojlera, jeżeli przyciśniemy około 2 sekund przycisk Menu(S5) to pokaże nam się w pierwszej linijce Ustaw temperaturę a w drugiej temperatura, którą regulujemy przyciskiem S3, S4, gdy przyciśniemy jeszcze raz menu to przejdziemy do drugiej opcji menu, czyli ustaw aktualny czas poruszanie się S3 do góry S4 w dół S1 Lewo S2 prawo następnie jak przyciśniemy menu to przejdziemy do Ustaw Pierwszy czas programowania poruszamy się tak samo jak przy ustawieniu aktualnego czasu i tymi ustawieni mamy np. takie 7:00 - 8:00 a gdy Będzie ustawienie 00:00 - 00:00 to programowanie czasu wyłączone i następne przyciśnięcie Menu spowoduje do przejścia dalej, czyli Ustaw 2 czas i tak samo jak poprzedni i tak 10 razy a gdy byśmy jakiegoś przycisku nie przycisnęli przez około 10 sekund to wróci do głównego programu, czyli wyświetli czas i temperaturę. I jeszcze jedna taka opcja, czyli ręczne włączanie pompy jak przycisk S6 przyciśnie się przez 3 sekundy pompa się włączy na wyświetlaczu będzie napisane w pierwszej linijce Ręczne wł., pompy a w drugiej linijce Włączona a jak ponownie się przyciśnie to będzie pisało wyłączona i przejdzie do głównego programy, czyli czas i temperatura.
Przykład działania
Czas 7:20
Temp. Bojlera: 35 stopni C
Menu:
1.
Temp. zadana
30 stopni C
2.
Ustaw Czas
7:20
3.
Ustawienie 1
6:00 - 8:00
4.
Ustawienie 2
14:00 - 16:00
5.
Ustawienie 3
18:00 - 19:20
6.
Ustawienie 4
21:00 - 22:30
7.
Ustawienie 5
00:00 - 00:00
8.
Ustawienie 6
00:00 - 00:00
9.
Ustawienie 7
00:00 - 00:00
10.
Ustawienie 8
00:00 - 00:00
11.
Ustawienie 9
00:00 - 00:00
12.
Ustawienie 10
00:00 - 00:00
Mam nadzieje, że dobrze napisałem starałem się opisać to tak, abyście zrozumieli co mam na myśli.
Proszę was o pomoc zrobiłem schemat, ale płytki i elementów jeszcze nie mam, bo muszę je dopiero zamówić a po drugi to jak nie zrobię programu to reszta nie ma sensu, ale jak będzie program to i sterownik zrobię. Poniżej jest to, na czym stanąłem i prosiłbym was o wyjaśnienia tak abym zrozumiał, bo chciałbym się nauczyć tworzenia takich programów, bo nawet to jak siedzę i czytam różne artykuły to już mnie powoli wciągnęło.
'##########Konfiguracja uC##########
$sim
$regfile = "m8def.dat"
$crystal = 16000000
Config Portc.0 = Input 'przyciski 1
Config Portc.1 = Input 'przycisk 2
Config Portc.2 = Input 'przycisk 3
Config Portc.3 = Input 'przycisk 4
Config Portd.3 = Input 'przycisk 5
Config Portd.5 = Input 'przycisk 6
Config Portb = Output 'LCD
Config Portd.0 = Output 'LCD pobudzenie
Config Portd.4 = Output 'pompa
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5 'mirley UPT M16
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
Config 1wire = Pind.7 'DS18B20
Config Scl = Portc.5
Config Sda = Portc.4
Pompa Alias Portd.4 'pin przypisany do zminnej pompa
Lcd_light Alias Portd.0
Sw1 Alias Portc.0 'Lewo
Sw2 Alias Portc.1 'prawo
Sw3 Alias Portc.2 'góra
Sw4 Alias Portc.3 'dół
Sw5 Alias Portd.3 'menu
Sw6 Alias Portd.5 'pompa
Set Portc.0
Set Portc.1
Set Portc.2
Set Portc.3
Set Portd.3
Set Portd.5
Declare Sub Odcz_temp
Declare Sub W_pompa
Declare Sub Ustaw_czas
Declare Sub Ustaw_h
Declare Sub Ustaw_m
'*** DEKLARACJA PROCEDUR SUB ***
Declare Sub Settime(byval S1 As Byte , Byval M1 As Byte , Byval H1 As Byte , Byval D1 As Byte , Byval Month1 As Byte)
Declare Sub Gettime
Enable Interrupts
'#########Konfiguracja Koniec##########
'#########Zmienne##########
Dim Sw As Byte , Sw1 As Byte , Sw2 As Byte , Sw3 As Byte , Sw4 As Byte , Sw5 As Byte , Sw6 As Byte
Dim Autolight As Byte
Dim Menu As Byte
Dim S As Byte , M As Byte , H As Byte , D As Byte , Month As Byte
Dim Wm As Byte , Yd As Byte
Dim Temperatura(2) As Byte 'DS1820
Dim T_ust As Word , Warunek1 As Bit 'termostat
Dim Godziny As Byte , Minuty As Byte , Sekundy As Byte
Dim Godziny_bcd As Byte , Minuty_bcd As Byte , Sekundy_bcd As Byte
Dim Zapisz_czas As Bit
Dim Pompa As Byte
'##########Zmienne koniec#########
'##########Początek##########
Call Settime(10 , 1 , 1 , 29 , 11) 'set time
Lcd_light = 0
Autolight = 20
Cls
Lcd "Sterownik Pompy" 'wyświtetl " "
Lowerline 'przejdz do nowej lini
Lcd "Cyrkulacji" 'wyświetl " "
Wait 5 'czekaj 5sek
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 'stopien
Cls
Do
Call Gettime
Call Odcz_temp
Home
Lcd Hex(h) ; ":" ; Hex(m) ; ":" ; Hex(s)
Lowerline
If Temperatura(2) = 0 Then
Lcd "Temp: " ; Temperatura(1) ; Chr(0) ; "C"
Else
Lcd "Temp: -" ; Temperatura(1) ; Chr(0) ; "C"
End If
If Sw5 = 0 Then
Waitms 25
If Sw5 = 0 Then
Do
Gosub Menu
Loop
End If
End If
Debounce Sw5 , 0 , Menu , Sub 'wejście do menu
Debounce Sw6 , 0 , W_pompa , Sub 'ręczne włączenie pompu
Loop
End 'end program
'##########MENU##########
Menu:
Cls
Lcd "Ustaw Temp. "
Debounce Sw5 , 0 , Ustaw_czas , Sub
Incr T_ust
If Sw3 = 0 Then
Waitms 25
If Sw3 = 0 Then
T_ust = T_ust + 1
End If
End If
If Sw4 = 0 Then
Waitms 25
If Sw4 = 0 Then
T_ust = T_ust - 1
End If
End If
If T_ust = 0 Then
Warunek1 = 0
End If
If T_ust >= Temperatura(2) Then
Warunek1 = 1
End If
Locate 2 , 7
Lcd T_ust ; Chr(0) ; "C"
' Wait 7
Return
'##########MENU KONIEC##########
'##########CZAS##########
' *** PROCEDURY ****
'uwstaw czas
Ustaw_czas:
If Sw1 = 0 Then
Waitms 25
If Sw1 = 0 Then
Gosub Ustaw_h
End If
End If
If Sw2 = 0 Then
Waitms 25
If Sw2 = 0 Then
Gosub Ustaw_m
End If
End If
Return
Ustaw_h:
If Sw3 = 0 Then
Waitms 25
If Sw3 = 0 Then
H = H + 1
End If
End If
If Sw4 = 0 Then
Waitms 25
If Sw4 = 0 Then
H = H - 1
End If
End If
Return
Ustaw_m:
If Sw3 = 0 Then
Waitms 25
If Sw3 = 0 Then
M = M + 1
End If
End If
If Sw4 = 0 Then
Waitms 25
If Sw4 = 0 Then
M = M - 1
End If
End If
Return
Return
'odczyt
Sub Gettime
I2cstart 'generate start
I2cwbyte &HA0 'write addres of PCF8583
I2cwbyte 2 'select second register
I2cstart 'generate repeated start
I2cwbyte &HA1 'write address for reading info
I2crbyte S , Ack 'read seconds
I2crbyte M , Ack 'read minutes
I2crbyte H , Ack 'read hours
I2crbyte Yd , Ack 'read year and days
I2crbyte Wm , Nack 'read weekday and month
I2cstop 'generate stop
End Sub
Sub Settime(s1 As Byte , M1 As Byte , H1 As Byte , D1 As Byte , Month1 As Byte)
'values are stored as BCD values so convert the values first
'zapis
S1 = Makebcd(s1) 'seconds
M1 = Makebcd(m1) 'minutes
H1 = Makebcd(h1) 'hours
D1 = Makebcd(d1) 'days
Month1 = Makebcd(month1) 'months
I2cstart 'generate start
I2cwbyte &HA0 'write address
I2cwbyte 0 'select control register
I2cwbyte 8 'set year and day bit for masking
I2cstop 'generate stop
I2cstart 'generate start
I2cwbyte &HA0 'write mode
I2cwbyte 2 'select seconds Register
I2cwbyte S1 'write seconds
I2cwbyte M1 'write minutes
I2cwbyte H1 'Write Hours
I2cwbyte D1 'write days
I2cwbyte Month1 'write months
I2cstop
End Sub
'##########Koniec ustaw czas##########
'##########Pompa##########
W_pompa:
Cls
Lcd "Reczne Wł. Pompy"
Lowerline
If Sw6 = 0 Then
Waitms 25
If Sw6 = 0 Then
Pompa = 1
End If
End If
If Pompa = 1 Then
Lcd "Wałączona"
End If
If Pompa = 0 Then
Lcd "Wyłączona"
End If
Return
'##########Odczyt temperatury##########
Sub Odcz_temp
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HCB
Temperatura(1) = 1wread(2)
1wreset
If Err = 1 Then
Cls
Lcd "Brak Ukladu!!!"
Lowerline
Lcd "Podlacz czujnik"
Do
Loop
End If
If Temperatura(2) > 0 Then
Temperatura(1) = 256 = Temperatura(1)
End If
Temperatura(1) = Temperatura(1) / 2
End Sub
'##########Odczyt Temperatury Koniec##########
Schemat