Urządzenie to jak sama nazwa wskazuje jest sterownikiem do instalacji centralnego ogrzewania. Układ sprawdza się w bardzo prostych instalacjach posiadających jedną wspólną pompkę do grzejników i do wymiennika C.W.U. W wersji podstawowej nie jest oprogramowany wentylator nadmuchowy, gdyż nie było go w instalacji w której opisywany sterownik miał działać. Dodatkowe wyjście z triakiem pozwoli łatwo zmodyfikować program i dodać obsługę wentylatora. Sterownik posiada dwa tryby pracy, letni w którym głównie nastawia się na grzanie wody i pompa pracuje gdy temperatura na piecu jest większa niż w wymienniku, oraz tryb zimowy gdzie pompa pracuje zawsze gdy temperatura na piecu jest większa od minimalnej. Dodatkową funkcją sterownika jest pomiar temperatury na piecu, w bojlerze, w domu i na zbiorniku wyrównawczym. Konfiguracja w menu pozwala ustawić temperaturę minimalną i alarmową oraz zmieniać tryb pracy.
Schemat ideowy układu znajduje się na rysunku poniżej:
Sercem układu jest mikrokontroler U1 (ATMega8) wraz z rezonatorem kwarcowym X1(16MHz) i kondensatorami C1 (22pF) i C2 (22pF). Kondensatory C3 (220uF) i C4 (100nF) filtrują napięcie zasilania, które powinno zostać podane na złącze Zas (ARK2) z drugiej płytki sterownika. Potencjometr P1 (10k) umożliwia regulację kontrastu wyświetlacza W1 (LCD 2x16). Za pomocą tranzystora T1 (BC556) i rezystora R2 (3,3k) możliwe jest włączenie podświetlania wyświetlacza w sposób programowy. Rezystor R1 (47R) ogranicza prąd struktur LED podświetlających wyświetlacz. Buzzer z generatorem BUZ1 (5V) pełni funkcję sygnalizatora alarmu. Alarm uruchamiany jest za pośrednictwem tranzystora T2 (BC556) oraz rezystorów R3 (3,3k) i R4 (3,3k) gdy temperatura przekroczy ustawiony próg. Złącze 1W_TR (ARK3) służy do podłączenia magistrali 1-Wire z czujnikami DS18B20 (4 sztuki) oraz zapewnia połączenie sterownika z płytka wykonawczą. Układ U2 jest w praktyce podstawką pod czujnik DS18B20, która przydaje się w momencie rejestracji czujników. Zworka 1W_ENA (goldpin) umożliwia odłączenie całej magistrali od płytki na czas rejestracji czujników. Rezystor R8 (4,7k) jest konieczny do poprawnej pracy układów DS18B20. Zworki DSR1...DSR3 (goldpin) poprzez różne kombinacje pozwalają na wybranie który czujnik ma być w danej chwili zarejestrowany. Przyciski S1..S3 (uSwitch) stanowią klawiaturę urządzenia, natomiast diody D1..D3 (LED) wraz z rezystorami ograniczającymi prąd R5...R7 (470R) stanowią kontrolki pracy pompy, wentylatora oraz alarmu. Złącze Prog (goldpin) służy do zaprogramowania procesora, podobnie jak pin Res, który dodatkowo umożliwia reset procesora podczas rejestracji czujników.
Schemat ideowy układu wykonawczego znajduje się na rysunku poniżej:
W skład modułu wykonawczego wchodzi stabilizator napięcia U1 (7805) wraz z kondensatorami C1 (220uF) i C2 (47uF). Do złącza Zas (ARK) należy podłączyc napięcie o wartości w granicach 7-15V, w pierwowzorze miała to być ładowarka od telefonu. Złącze VCC (ARK) umożliwia zasilanie sterownika. W roli elementów wykonawczych pracują triaki TR1 (BT138-600E) oraz TR2 (BT138-600E), rezystory R2 (180R), R3 (180R), R5 (180R) i R6 (180R) ograniczają prąd bramek triaków. W rolli zabezpieczenia przeciwprzepięciowego zastosowano warystory WR1 (JVR-7N431) i WR2 (JVR-7N431), chociaż nie są one wymagane. Przed zwarciem zabezpiecza bezpiecznik F1 (2A). Złącze 230V umożliwia podłączenie zasilania sieciowego do płytki. Wyjściami napięciowymi dla pompy i wentylatora są złącza TRO1 (ARK) i TRO2 (ARK). Oddzielenie wysokonapięciowych obwodów sieciowych od niskonapięciowego sterownika zapewniają optotriaki OPT1 (MOC3041) i OPT2 (MOC3041). Prąd ich struktur LED ograniczają rezystory R1 (330R) i R2 (330R), a szeregowo włączone diody LED sygnalizują stan triaków. Do złącza TRI (ARK) podłączamy wyjścia sterownika.
Układ z powodzeniem można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj.
Układ wykonawczy można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj
Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj.
1x Złącze śrubowe ARK2(podwójne)
1x Złącze śrubowe ARK3(potrójne)
4x Listwa Goldpin 1x2 (1W_ENA)
1x Listwa Goldpin 1x3 (DS18B20)
1x Listwa Goldpin 1x4 (Prog)
3x uSwitch
3x 3,3k
1x 47R
3x 470R
1x 4,7k
1x Potencjometr Montażowy 10k
2x 22pF
1x 100nF
1x 220uF Elektrolit
1x Rezonator Kwarcowy 16MHz
3x Dioda LED
2x BC556
1x Mikrokontroler ATMEGA8 + Podstawka
1x Buzzer z Generatorem 5V
1x 16x2
1x Bezpiecznik 2A
6x Złącze śrubowe ARK2(podwójne)
4x 180R
2x 330R
2x Warystor JVR-7N431
1x 47uF Elektrolit
1x 220uF Elektrolit
2x Dioda LED
1x Stabilizator 7805
2x BT138-600E
2x MOC3041
Kod Źródłowy do sterownika został napisany w BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:
'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m8def.dat"
$crystal = 16000000
'Config Porta = &B00111111 : Porta = &B11111111
Config Portb = &B11111000 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00011111 : Portd = &B11111111
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 'mirley UPT M16
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
Config 1wire = Pind.2
Sw_port Alias Pinb 'nazwa portu
Pompa Alias Portd.3
Went Alias Portd.4
Buzz Alias Portd.1
Light Alias Portd.0
Ds1r Alias Pind.7
Ds2r Alias Pind.6
Ds3r Alias Pind.5
Led_a Alias Portb.5
Led_p Alias Portb.3
Led_w Alias Portb.4
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
Enable Interrupts
'********** Konfiguracja uC Koniec ************
'****************** Zmienne *******************
'***********************************************
Dim Stan_sw As Byte , Sw As Byte , Licznik_sw As Byte 'sw
Dim Wyswietlanie As Byte , Poz_wysw As Byte , Wyswietlono As Bit 'Lcd
Dim Mig As Bit , Poz_ust As Byte
Dim Autosave As Byte , Autopowrot As Byte , Autolight As Byte
Dim Ds1(8) As Byte , Ds2(8) As Byte , Ds3(8) As Byte , Ds4(8) As Byte , Ds(8) As Byte , Ds_adr As Byte , Ds_ok As Bit 'DS18B20
Dim Ktory_ds As Byte , Lsb As Byte , Msb As Byte , Minusy As Byte
Dim T(4) As Word
Dim T_min As Word , T_alarm As Word
Dim Dzielnik(2) As Byte 'dzielniki timera
Dim Flaga_4ms As Bit , Flaga_500ms As Bit , Flaga_1s As Bit 'flagi przerwa?
Dim Hbyte(2) As Byte , Hword(3) As Word , N As Byte , Hbit As Bit , M As Byte
Dim Buzz_en As Bit
Dim Tryb_letni As Bit '0- tryb zimowy, 1- tryb letni
'************* Zmienne Koniec ****************
'************ Warunki Poczatkowe ***************
'***********************************************
Light = 0
Lcd " Sterownik C.O."
Lowerline
Lcd " Wersja 0.96"
Wait 1
If Ds1r = 1 And Ds2r = 0 And Ds3r = 0 Then
Ds_adr = 30
Gosub Ds_reg
Cls
Lcd "Ds Piec"
End If
If Ds1r = 0 And Ds2r = 1 And Ds3r = 0 Then
Ds_adr = 40
Gosub Ds_reg
Cls
Lcd "Ds Bojler"
End If
If Ds1r = 1 And Ds2r = 1 And Ds3r = 0 Then
Ds_adr = 50
Gosub Ds_reg
Cls
Lcd "Ds Zbiornik"
End If
If Ds1r = 0 And Ds2r = 0 And Ds3r = 1 Then
Ds_adr = 60
Gosub Ds_reg
Cls
Lcd "Ds Kuchnia"
End If
For N = 1 To 8
Hbyte(1) = 30 + N
Readeeprom Ds1(n) , Hbyte(1)
Hbyte(1) = 40 + N
Readeeprom Ds2(n) , Hbyte(1)
Hbyte(1) = 50 + N
Readeeprom Ds3(n) , Hbyte(1)
Hbyte(1) = 60 + N
Readeeprom Ds4(n) , Hbyte(1)
Next N
Readeeprom T_min , 2
Readeeprom T_alarm , 4
Readeeprom Hbyte(1) , 6
Tryb_letni = Hbyte(1).0
If T_min < 100 Or T_min > 950 Then T_min = 400
If T_alarm < 100 Or T_alarm > 950 Then T_alarm = 850
Wait 1
Wyswietlono = 1
Wyswietlanie = 1
Autosave = 5
Autolight = 0
'******* Warunki Poczatkowe Koniec ***********
'************** Petla glowna ******************
'***********************************************
Do
'*********************************************** co 4ms
If Flaga_4ms = 1 Then
Flaga_4ms = 0
Gosub Przyciski
If Wyswietlono = 1 Then Gosub Wysw_lcd
End If
'***********************************************
'*********************************************** co 500ms
If Flaga_500ms = 1 Then
Flaga_500ms = 0
Mig = Not Mig
'Portd.6 = Buzz_en
If Pompa = 0 Then Led_p = Mig Else Led_p = 1
If Went = 0 Then Led_w = Mig Else Led_w = 1
Led_a = Buzz
Wyswietlanie = Poz_wysw
End If
'***********************************************
'*********************************************** co 1s
If Flaga_1s = 1 Then
Flaga_1s = 0
If Light = 0 Then
Incr Autolight
If Autolight >= 20 Then Light = 1
Else
Autolight = 0
End If
If Poz_wysw <> 1 Then
Incr Autopowrot
If Autopowrot = 6 Then
'Poz_wysw = 1
Wyswietlanie = 1
Poz_ust = 0
End If
Else
Autopowrot = 0
End If
If Autosave < 5 Then
Incr Autosave
If Autosave = 5 Then
'tu zapis do eeprom
Writeeeprom T_min , 2
Writeeeprom T_alarm , 4
Hbyte(1) = 0
Hbyte(1).0 = Tryb_letni
Writeeeprom Hbyte(1) , 6
Poz_ust = 0
End If
End If
Gosub Temperatura
Gosub Sterowanie
End If
'***********************************************
Loop
End
'************ Petla glowna Koniec **************
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
Timer0 = 5
Set Flaga_4ms
Incr Dzielnik(1)
If Dzielnik(1) = 125 Then
Dzielnik(1) = 0
Set Flaga_500ms
Incr Dzielnik(2)
If Dzielnik(2) = 2 Then
Dzielnik(2) = 0
Set Flaga_1s
End If
End If
Return
'******** Przerwanie timer 0 Koniec ************
'***********************************************
'***************** Przyciski **************
Przyciski:
Sw = Sw_port And &B00000111 'maska na piny nieu?ywane jako sw
If Sw <> &B00000111 And Stan_sw = Sw Then
Incr Licznik_sw
If Licznik_sw = 68 Then
Licznik_sw = 0
Select Case Stan_sw
Case &B00000011: 'incr
'***********************************************************
Select Case Poz_wysw
Case 3:
Select Case Poz_ust
Case 0:
Poz_ust = 1
Case 1:
If T_min < 950 Then T_min = T_min + 10
Case 2:
If T_alarm < 950 Then T_alarm = T_alarm + 10
End Select
Autosave = 0
Case 4:
If Poz_ust = 0 Then Poz_ust = 1 Else Tryb_letni = Not Tryb_letni
Autosave = 0
'Case 5:
End Select
If Buzz = 0 Then Buzz_en = 0
Autopowrot = 0
Light = 0
Autolight = 0
Case &B00000101: 'ustaw next
'***********************************************************
If Poz_ust = 0 Then
Wyswietlanie = Poz_wysw + 1
If Wyswietlanie = 5 Then Wyswietlanie = 1
Else
Select Case Poz_wysw
Case 3:
Incr Poz_ust
If Poz_ust = 3 Then Poz_ust = 0
Case 4:
Incr Poz_ust
If Poz_ust = 2 Then Poz_ust = 0
End Select
End If
If Buzz = 0 Then Buzz_en = 0
Autopowrot = 0
Light = 0
Autolight = 0
Case &B00000110: 'decr
'***********************************************************
Select Case Poz_wysw
Case 3:
Select Case Poz_ust
Case 0:
Poz_ust = 1
Case 1:
If T_min > 100 Then T_min = T_min - 10
Case 2:
If T_alarm > 100 Then T_alarm = T_alarm - 10
End Select
Autosave = 0
Case 4:
If Poz_ust = 0 Then Poz_ust = 1 Else Tryb_letni = Not Tryb_letni
Autosave = 0
'Case 5:
End Select
If Buzz = 0 Then Buzz_en = 0
Autopowrot = 0
Light = 0
Autolight = 0
End Select
End If
Else
Stan_sw = Sw
Licznik_sw = 60
End If
Return
'***********************************************
'***********************************************
'************** LCD ***********
Wysw_lcd:
If Wyswietlanie <> 0 Then
Wyswietlono = 0
Select Case Wyswietlanie
Case 1: 'temp piec bojler
'**************************************************************
If Poz_wysw <> 1 Then
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 'stopien
'Deflcdchar 1 , 4 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' o kreskowane
Cls
Lcd "Piec:"
Lowerline
Lcd "Bojler:"
End If
For N = 1 To 2
Hword(1) = T(n) / 10
Hword(2) = 12
If Hword(1) >= 10 Then Decr Hword(2)
If Hword(1) >= 100 Then Decr Hword(2)
If Minusy.n = 1 Then Decr Hword(2)
Locate N , Hword(2)
Hword(2) = T(n) Mod 10
If Minusy.n = 1 Then Lcd "-"
Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
Next N
Case 2: 'temb banka,dom
'**************************************************************
If Poz_wysw <> 2 Then
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 'stopien
Cls
Lcd "Zbiornik:"
Lowerline
Lcd "Kuchnia:"
End If
For N = 3 To 4
Hword(1) = T(n) / 10
Hword(2) = 12
If Hword(1) >= 10 Then Decr Hword(2)
If Hword(1) >= 100 Then Decr Hword(2)
If Minusy.n = 1 Then Decr Hword(2)
M = N - 2
Locate M , Hword(2)
Hword(2) = T(n) Mod 10
If Minusy.n = 1 Then Lcd "-"
Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
Next N
Case 3:
'**************************************************************
If Poz_wysw <> 3 Then
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 'stopien
'Deflcdchar 1 , 4 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' o kreskowane
Cls
Lcd "T.Min:"
Lowerline
Lcd "T.Alarm"
End If
If Poz_ust = 1 And Mig = 1 Then
Locate 1 , 10
Lcd " "
Else
't minimalna
Hword(1) = T_min / 10
Hword(2) = 12
If Hword(1) >= 10 Then Decr Hword(2)
If Hword(1) >= 100 Then Decr Hword(2)
Locate 1 , Hword(2)
Hword(2) = T_min Mod 10
Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C "
End If
If Poz_ust = 2 And Mig = 1 Then
Locate 2 , 10
Lcd " "
Else
't alarmowa
Hword(1) = T_alarm / 10
Hword(2) = 12
If Hword(1) >= 10 Then Decr Hword(2)
If Hword(1) >= 100 Then Decr Hword(2)
Locate 2 , Hword(2)
Hword(2) = T_alarm Mod 10
Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
End If
Case 4:
'**************************************************************
If Poz_wysw <> 4 Then
Cls
Lcd "Tryb: "
End If
Locate 1 , 7
If Poz_ust = 1 And Mig = 1 Then
Lcd " "
Else
If Tryb_letni = 1 Then Lcd "Letni" Else Lcd "Zimowy"
End If
Case 5:
'**************************************************************
If Poz_wysw <> 5 Then
Cls
Lcd "Przedmuch:"
Lowerline
Lcd "Przerwa:"
End If
End Select
Poz_wysw = Wyswietlanie
Wyswietlanie = 0
Wyswietlono = 1
End If
Return
'************** LCD Koniec ***********
'********** rejestracja DS *********
Ds_reg:
Disable Interrupts
1wreset
1wwrite &H33
Ds(1) = 1wread(8):
Enable Interrupts
If Ds(1) <> 255 Or Ds(2) <> 255 Or Ds(3) <> 255 Or Ds(4) <> 255 Or Ds(5) <> 255 Or Ds(6) <> 255 Or Ds(7) <> 255 Or Ds(8) <> 255 Then
Ds_ok = 1
For N = 1 To 8
Hbyte(1) = Ds_adr + N
Writeeeprom Ds(n) , Hbyte(1)
Next N
Else
Ds_ok = 0
End If
Return
'****** rejestracja DS Koniec ******
'************* Temperatura ***********
Temperatura:
Disable Interrupts
1wreset
Select Case Ktory_ds
Case 0:
1wwrite &HCC
1wwrite &H44
Case 1:
1wwrite &H55
1wwrite Ds1(1) , 8
1wwrite &HBE
Lsb = 1wread():
Msb = 1wread():
Case 2:
1wwrite &H55
1wwrite Ds2(1) , 8
1wwrite &HBE
Lsb = 1wread():
Msb = 1wread():
Case 3:
1wwrite &H55
1wwrite Ds3(1) , 8
1wwrite &HBE
Lsb = 1wread():
Msb = 1wread():
Case 4:
1wwrite &H55
1wwrite Ds4(1) , 8
1wwrite &HBE
Lsb = 1wread():
Msb = 1wread():
End Select
Enable Interrupts
If Ktory_ds > 0 Then
T(ktory_ds) = Msb * 256
T(ktory_ds) = T(ktory_ds) + Lsb
Minusy.ktory_ds = Msb.7
If Minusy.ktory_ds = 1 Then
T(ktory_ds) = Not T(ktory_ds)
T(ktory_ds) = T(ktory_ds) + 1
End If
T(ktory_ds) = T(ktory_ds) * 10
T(ktory_ds) = T(ktory_ds) / 16
Else
If Poz_wysw = 1 And Wyswietlono = 1 Then Wyswietlanie = 1
End If
Incr Ktory_ds
If Ktory_ds = 5 Then Ktory_ds = 0
Return
'********** Temperatura Koniec *********
'************ Sterowanie ***************
'***********************************************
Sterowanie:
If Tryb_letni = 1 Then
If T(1) >= T_min Then
Hword(1) = T(2) + 70
Hword(2) = T(2) + 30
If T(1) >= Hword(1) Then Pompa = 0
If T(1) <= Hword(2) Then Pompa = 1
Else
Pompa = 1
End If
Else
If T(1) >= T_min Then
Pompa = 0
Else
Pompa = 1
End If
End If
If T(1) >= T_alarm Or T(2) >= T_alarm Then
If Buzz_en = 1 Then Buzz = Not Buzz Else Buzz = 1
Else
Buzz = 1
Hword(1) = T_alarm - 50
If T(1) <= Hword(1) And T(2) <= Hword(1) Then Buzz_en = 1
End If
'tutaj sterowanie wentylatorem
Return
'******** Sterowanie Koniec ************
Ustawienia fusebitów dla mikrokontrolera ATMEGA8 przedstawione są poniżej:
Wstępne uruchomienie sterownika sprowadza się do zaprogramowania czujników z którymi będzie współpracował. Przy wyłączonym zasilaniu rozwieramy zworkę 1W_ENA wkładamy pierwszy czujnik (od pieca) do złącza na płytce (układ U2), rozwieramy zworkę DSR1 i zwieramy DSR2 i DSR3. Włączamy zasilanie a na wyświetlaczu pojawia się napis "Ds Piec" co świadczy o poprawnym odczycie czujnika. W tej chwili temperatura powinna być już odczytywana. Wyłączamy ponownie zasilanie i kontynuujemy rejestrację pozostałych czujników w taki sam sposób, z tym że ustawienia zworek DSR1...DSR3 są inne. Podczas rejestracji do układu może być jednorazowo podłączony tylko jeden czujnik.
Ustawienia zworek:
Piec: DSR1 = 1, DSR2 = 0, DSR3 = 0
Bojler: DSR1 = 0, DSR2 = 1, DSR3 = 0
Zbiornik wyrównawczy: DSR1 = 1, DSR2 = 1, DSR3 = 0
Dom: DSR1 = 0, DSR2 = 0, DSR3 = 1
*"0" oznacza zworkę zwartą, a "1" rozwartą
Po zakończeniu procedury rejestracyjnej czujników podłączamy je wszystkie naraz do układu i umieszczamy w przeznaczonych miejscach. W przypadku zmiany jednego z czujników trzeba go zarejestrować w taki sam sposób pamiętając że wszystkie pozostałe muszą być odłączone (Zworka 1W_ENA).
Re: Klawiatura
Jeśli chodzi o zmianę pinów pod AVT1665 to musisz napisać na jakich portach chcesz żeby było co podłączone to zobaczymy.
----------------
Klawiatura to po prostu wystający uSwitch na równo z obudową i naklejka
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
avt1665
jak to bedzie podlaczone to generalnie jest obojetne, bo kazdy port i pin wyprowadzony jest na listwie...obostrzeniami objety jest tylko wyswietlacz, ledy i switche...ogarnac wyswietlacz to nie problem...natomiast maskowanie portu ze switchami to jest dla mnie czarna magia i najgorsze ze nie sa one na jednym porcie tylko na 2 zalozmy ze + jako PD2, down PD3 i ok jako PB2...1 wire rozwiazalem przelaczalne na PB3 PB4 i PB5(3 czujniki)...znika problem z detekcja czujnikow i ten fragment kodu z detekcja do wyciecia
Połączenie
Czytałem juz kilka razy i nie bardzo rozumiem, "Do złącza TRI (ARK) podłączamy wyjścia sterownika.". Ale jakie to są wyjścia. Bo o ile dobrze sie orientuję to na płytce sterownika jest wejście "ZAS"(ARK2) gdzie podłączamy zasilanie z płytki wykonawczej z wyjścia VCC oraz "1W_TR" (ARK3), gdzie podłączamy DS-y. To które to są te wyjścia? Drugie moje pytanie to takie czy te wszystkie 4 DS-y podłączam do tego samego wejścia "1W_TR"? Z góry dziękuję za odpowiedź. Pozdrawiam
podłączenie
luki, złącze 1w_tr sterownika to wyjścia sygnałowe t1 i t2 do sterowania układem wykonawczym (triakami) podłącza się je do złącza tri układu wykonawczego, oraz wyjście w1 magistrali 1_wire, do niej podłącza się wszystkie czujniki temperatury (po uprzednim zarejestrowaniu w podstawce u2 aby było prościej). Podstawka u2 jest "podpięta" pod zasilanie, masę i wyjście w1.
Ds-y to ciekawe czujniki pracujące na tej właśnie magistrali.
Bardzo ogólnie mają w sobie unikatowy 64-bitowy klucz i wedle niego po magistrali 1-wire rejestruje się każdy z czujników. Po podłączeniu wszystkich razem sterownik (master) przepytuje magistralę w poszukiwaniu urządzeń (slave) pracujących po tej magistrali (w tym przypadku są to ds-y) i poprzez odpowiedni algorytm odczytuje ich stany temperatury. To tak bardzo ogólnie bo tego Mirley nie napisał a ciekawa rzecz.
Dzięki za wyjaśnienie
Dzięki za wyjaśnienie sprawy.;) A i jeszcze jedno pytanko, tą 3 nóżkę DS-a gdzie powinno być podłączone napięcie +5V powinienem zewrzeć do masy czy podprowadzić 3 kabelek z zasilaniem?
Re: Ds
Jedną z cech układu DS18B20 jest możliwość jego pracy bez zewnętrznego źródła zasilania, na tzw. zasilaniu pasożytniczym. Czyli może być zasilany napięciem 3-5V albo napięciem z linii danych. Tak ogólnie to DS zawiera w sobie kondensator, który ładuje się napięciem z linii danych i jego energia zgromadzona może zasilić układ. Ja mam podłączone zasilanie, ale mogę spróbować bez to odpowiem czy faktycznie w tym układzie będzie pracował, ale dopiero późnym popołudniem. Chyba, że wcześniej Mirley się wypowie :-)
edit: jednak zrobiłem to jeszcze teraz będzie pracował, nóżki masy i zasilania do masy.
Błąd wyświetlania temperatury.
Sterownik działa bardzo dobrze, włącza pompę C.O. kiedy trzeba, działa alarm po przekroczeniu temp. Jest jednak jeden mankament, po włączeniu sterownika wyświetla np. Piec 25 st. po jakimś czasie (różnym) wyświetla np. -325 lub 625 (też różnie) ale zawsze dwie ostatnie są poprawną temperaturą. Gdy przełączę menu i gdy wróci do pierwszego ekranu przez jakiś czas jest poprawnie a potem znów źle wyświetla. Czujniki DS18B20, kable do czujników to skrętka.
Re: Wyświetlacz
W programie raczej nie powinien znaleźć się wynik 625 a tym bardziej -325, w pierwszym wypadku włączył by się alarm napewno, gdyby taki był wnik pomiaru. Zatem DS jest ok i jego kable też. Myślę że to sprawa wyświetlania... Dorzuc do programu linijki:
tutaj:
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Dzięki. Dorzucę ten kod i dam
Dzięki. Dorzucę ten kod i dam znać czy jest ok.
Mała sugestia
Witam.
Mam mała podpowiedz do Twojego programu Mirku.
W procedurze rejestracji ds-a kiedy sprawdzasz poprawność adresu a co za tym idzie czy jest czujnik na magistrali zamiast Twojego sposobu można dać po prostu 1wcount.
Jeśli funkcja zwróci 1 to wiemy że na pewno czujnik jest na magistrali.
Witam, Czy układ się
Witam,
Czy układ się sprawdzi do sterowania tylko i wyłącznie pompą? Mam dosyć stary piec, nie mam wentylatora itp. Nie wiem jak ma wyglądać kalibracja czujników, gdy mam do dyspozycji tylko pompę... Ogólnie założenie jest proste: 40-50 stopni, pompa się włącza, poniżej wyłącza. Sprawdzi się to w praktyce? i jak w ogóle mam ją podłączyć? bezpośrednio pod układ wykonawczy A gdzie mam podłączyć czujnik temperatury (przykleić do rury)?
Marcin_13018
imex2@op.pl - napisz to podam ci do tego gotowca
Grzesiek - miasto Ostróda
GG 12372371 dom
tel 502812675 SMS
Re: Sterownik
U mnie się sprawdza sterowanie samą pompą.... czujnik przyklejony jest taśmą klejącą do rury tuz nad wylotem z pieca.
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Praca/STOP
Witam na początku odrazu mówie ze z AVR i Bascomem dopiero zaczynam "zabawe"
więc jestem jeszcze cimny z tego.
Zrobiłem taki sterownik dla mojej babci chciałbym jednak żeby na dolnym ekranu tam gdzie pisze temperatura bojlera pisało czy sterownik jest w trybie "pracy" czyli może spodziewać się, że dmuchawa się uruchomi czy też np. "stop" czyli wtedy bezpiecznie można przyłożyć do pieca.
sterownik steruje dmuchawą i pompą
Re: CO
Najprościej dodać diodę, która świeci jak piec nie jest w trybie wygaszenia.... Trzeba by tutaj użyc diody alarmowej. Zamiast led_a=BUzz trzeba by dać led_a= not Wygaszenie i powinno zadziałać
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Sterownik CO
Wita. Czy mógłbyś dokładnie wyjaśnić o co chodzi w tym fragmencie kodu?
Sterowanie:
If Tryb_letni = 1 Then
If T(1) >= T_min Then
Hword(1) = T(2) + 70
Hword(2) = T(2) + 30
If T(1) >= Hword(1) Then Pompa = 0
If T(1) <= Hword(2) Then Pompa = 1
Pozdrawiam
Re: Sterownik
Sterowanie jest bardzo proste. W trybie letnim grzejniki sa zakręcone a pompka pracuje tylko wtedy gdy temp> temp minimalnej i gdy na piecu jest przynajmniej 7 stopni więcej niż w bojlerze.
W trybie zimowym pompka chodzi zawsze gdy piec ma temperaturę poniżej minimalnej....
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
ds
Witam Panie Mirku
Mam problem z instalowaniem czujników ds18b20. Mianowicie ustawiam zworki programowania na wyświetlaczu wyskakuje stosowna informacja ja czujnik nic nie pokazuje. W czym może być problem? Proszę o odpowiedź. Pozdrawiam
Przerobiłem! :D
Witam. Bardzo fajny projekt. Trochę mi zeszło zanim zrozumiałem działanie menu i ustawień w programie bo ostatni raz programowałem jeszcze 89C2051 :D
Jako że piec który mam nie posiada wentylatora, opalany tylko weglem albo drzewem (w górach), to zrezygnowałem w programie z jego obsługi. Z temperatur zostawiłem sobie tylko piec i bojler, wywaliłem też alarm, ALE DOŁOŻYŁEM CIEKAWĄ funkcjonalność.
Mój sterownik w menu ma dołożoną "Histerezę" i pilnuje czy w piecu nie trzeba dołożyć opału.
Jeśli temperatura zacznie opadać to włącza się sygnał, takie trzy piknięcia po 0,5s co 5 min.
Z bezwładności mojego pieca wyszło że jak temp opadnie o 4 stopnie to są już tylko czerwone węgle.
Po trzech alarmach przestaje pikać i migać wyswietlaczem (zgasło i nikogo to nie obchodzi bo śpię)
Jak widać temperatura obliczona podwyższana jest przy rozpalaniu i rośnie do temp jaką napalimy. W kodzie dalej jest jeszcze ze naciśniecie klawisza NEXT powoduje przyjecie temperatury obecnej minus histereza jako obliczoną (obniża podbitą wczesniej by dać po podłożeniu do pieca 4 stopnie na reakcję )
W programie sygnał zastosowałem Wait idac na łatwiznę, ale nie przeszkadza mi że na czas piszczenia program tam utknie.
W podświetlaniu równolegle z tranzystorem dałem rezystor 4,7k co na stałe lekko podswietla niebieski wyświetlacz dając możliwość obserwacji temperatur a przy alarmie i manipulacjach świeci pełnym błękitem :D
Zapomniałbym.. Dodałem też strzałki "góra" "dół" przy temperaturach zmieniające się jednak tylko co minutę by pokazywały "tendencję" ..czy wzrastajaca czy opadajaca temperatura.
BARTek
Moja strona
wsad
Witam
Program po kompilacji hex jest już z wentylatorem do pieca???
pozdrawiam
Re: Kod sterownik CO
Trzeba skompilować sobie bascomem kod źródłowy z wentylatorem
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Mini Sterownik CO
Witam. Chciałem pokazać co zrobiłem na bazie tego sterownika. Jak widać nie musi być duży i może też ładnie wyglądać. W obudowie KM-39 zostało jeszcze duzo miejsca. Zrezygnowałem z pokazywania temperatur ujemnych i zostało miejsca na "strzałki" pokazujące na pierwszy rzut oka czy temperatura spada czy się podnosi. Temperatury porównuje co 5 min. Z procedury obsługi "wygaszania" zaimplementowałem sobie tez sygnał dzwiękowy który trzykrotnie jest uruchamiany jeśli temperatura spada. Miga wyświetlaczem jak w przypadku alarmu gdybyśmy przegapili sygnał. Wszystko się uspakaja jeśli wygaszanie = 1. Steruje zaworem bojlera. Nastaw dokonuje się pokrętłem MultiJog :D (impulsatorem za 2,5zł + gałka za 1zł) Czytając że babcia Mirleja zmienia mu nastawy chcąc sprawdzić inne temperatury lub włączyć światło zmieniłem sposób wejścia do menu. Trzeba dłużej nacisnąć by tam wejść. Krótkie naciśnięcie włącza tylko podświetlanie i kasuje alarmy i zmienne. Dodałem też czujnik światła - fotorezystor międy bramkę tranzystora a mase. Sterownik mam naprzeciwko okna. Im jaśniej świeci słońce tym jaśniej wyświetlacz. W nocy jest przyciemniony ale nie wyłaczony. Ciągle można podglądac nastawy.
Sterownik wisi przy wejściu do kotłowni. Drugie zdjęcie pokazuje proporcje między wyłącznikiem światła a sterownikiem - jego wielkość.
BARTek
Moja strona
Duże cyfry dodane! :D
Dodałem wczoraj nową funkcjonalność. Po krótkim naciśnięciu przycisku "multi-joga" pojawia się duża temperatura bojlera. Wyłącza ją Autopowrót.
O dużych fontach więcej w tym watku -> LINK
BARTek
Moja strona
Inne zastosowanie?
Witam!
Czy można zastosować ten projekt do innych celów? Chciałbym sterować chłodziarką w której fabryczny sterownik nie spełnia moich oczekiwań.
Inne zastosowanie?
Witam!
Czy można zastosować ten projekt do innych celów? Chciałbym zastosować go do chłodziarki w której fabryczny sterownik nie spełnia moich oczekiwań. Chodzi o utrzymywanie stałej temperatury około 12'C.
Re. Sterownik CO
Dało by się sterować chłodziarkę.... zamiast pompki CO. Trzeba tylko zanegować sterowanie i zmodyfikować jeszcze zakres ustawianych temperatur
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
A jak wyświetlić temperaturę
A jak wyświetlić temperaturę po rs232 do wyświetlacza VFD?
Ta komenda:
Nie działa jak trzeba. Dla Hword1 wyświetla się 0 na przemian z pulsującym poprawnym odczytem. np
25stopni i zero 25stopni i zero. Hword2 podobnie, z tym że na hword2 ostatnia cyfra jest wyświetlana dobrze.
W dodatku wynik jest wyświetlany tylko dla pieca, a dla bojlera już nie. To zrozumiałe bo komenda:
Ustawia pierwszy wiersz 12-stą kolumnę.
Jak zatem wyświetlić na VFD obie temperatury, skoro te komendy Hword są wspólne dla obu wierszy wyświetlacza LCD?
vfd
A jak wyświetlić temperaturę po rs232 do wyświetlacza VFD?
Ta komenda:
Nie działa jak trzeba. Dla Hword1 wyświetla się 0 na przemian z pulsującym poprawnym odczytem. np
25stopni i zero 25stopni i zero. Hword2 podobnie, z tym że na hword2 ostatnia cyfra jest wyświetlana dobrze.
W dodatku wynik jest wyświetlany tylko dla pieca, a dla bojlera już nie. To zrozumiałe bo komenda:
Ustawia pierwszy wiersz 12-stą kolumnę.
Jak zatem wyświetlić na VFD obie temperatury, skoro te komendy Hword są wspólne dla obu wierszy wyświetlacza LCD?
Odp. vfd
Dodaj sobie w deklaracjach zmiennych np. cztery dodatkowe swoje zmienne. Kiedy Hword(1) i Hword(2) przyjmuja wartośc np. dla temperatury bojlera zaraz za tym napisz "Twoja zmienna1 = Hword(1) i Twoja zmienna2 = Hword(2).
Potem w wolnej dla procesora chwili wyślij wszystkie cztery na raz, na wyświetlacz :)
Hword to tutaj skrót Help word - Pomocnicza zmienna typu word do celów uniwersalnych, wiec wykorzystywana w kilku miejscach. Twoje zmienne będa przybierac wartości tylko tam gdzie je porównasz do tych których wartośc chcesz przejać.
Ps. Twoje mogą być typu Byte.
BARTek
Moja strona
vfd
Dokleciłem do oryginalnego kodu, w miejscu odczytu ds-ów, swój kawałek kodu dla DS-a pieca:
Działa, i identycznie wyświetla temperaturę na VFD jak i LCD (oba podłączone).
Jednak to rozwiązanie nie jest najlepsze, ponieważ ostatecznie zostaje tylko VFD, i będę jakoś musiał pozmieniać program pod VFD, bo mega8 ma mało pamięci. Jak zostawię podwójny odczyt 4 ds-ów, to już całkiem słabo z miejscem.
Pojawia się jeszcze problem buzzera, który ktoś już poruszał. U mnie zadziałał tylko raz.
Odp. Vfd
Się nie wygłupiaj i przed samym
Return
z powrotu z temperatury wpiszi to samo dla T(2)
Po co robić dwa razy to samo. Te dane tam są tylko chyba ich nie widzisz...
BARTek
Moja strona
vfd
Moje zmienne typu BYTE nic nie dały. Jest tak samo. Wyświetla poprawnie, na przemian z zerami. To tak jakby zera były na siłę wyświetlane, a na nie nakłada się migający odczyt. Nie mogę tego rozgryść. Napisałem tak:
Odp. Vfd
Przepraszam. Źle chyba odczytałem pierwszy post. Ten wyswietlacz czyta kody ASCII. Jeśli Twoje rozwiązanie ze zmienną String zadziałało, a nie chcesz podwójnie czytać to dla pieca zamieniaj na String zmienną T(1).
Bardzo dużo miejsca w tym programie zajmują wartości domyslne dla zmiennych zapisywanych w Eeprom. Nauka adresów DS`ów też.
Można dużo miejsca zaoszczędzić jeśli odczytasz sobie raz poprawnie DS`y, zapiszą się w eepromie razem ze zmiennymi. Potem odczytujesz eeproma programatorem, bo kazdy programator teraz to obsługuje. Możesz sobie właczyć w Fusebitach EESAVE (Tylko ostrożnie, najpierw odzytaj Fusebity, zmień EESAVE i dopiero zapisz).
Od tej pory nie musisz już uczyć DS`ów po każdej zmianie w programie. Jak nie chcesz zmieniać Fusebitów to po prostu wgrywasz też pamięć EEpromu.
Korzyści z tego sa takie że można wywalić procedury nauki DS`ów i zapis zmiennych przy pustej pamięci. Wtedy masz miejsce na inne wodotryski :)
BARTek
Moja strona
vfd
Z zapisem i odczytem EEpromu będę się bawił później. Już wiem dla czego mój wyświetlacz "świrował". Otóż ostatnia kolumna w drugim wierszu musi zostać pusta, bo inaczej wszystko się wysypuje na wyświetlaczu. Nie wiem czemu tak jest.
Wyświetlacz to M202MD15B.
Z poprawnym wyświetlaniem sobie poradziłem(pomogłeś). Teraz jest problem z wyświetlaniem znaku ujemnego. Mimo tego że ds czyta mi 27 stopni, to na wyświetlaczu mam wynik :
-27"C. Temperatura jest prawidłowa, bo na LCD i innym termometrze jest 27 stopni na plusie.
Odp. VFD
Bascom wiele rzeczy sam konwertuje gdzy używa się poleceń LCD lub PRINT. Wielu nie trzeba konwertować ale czasem wychodza zawiłości które trzeba doczytac. Na próbę zamień na stringa nie T(1) a np jakas Single 27,3 i wyślij to na swój wyświetlacz. Jesli to da rezultat pozytywny to spróbuj użyć polecenia
Abs()
dla zamienianej wartości. Zwraca wartośc absolutną wyrażenia czyli bez minusa ;)http://wiki.mcselec.com/bavr/ABS
..a tak w ogóle to Tommorrowland na YT na żywo leci :D
BARTek
Moja strona
Chyba zrezygnuję z tego
Chyba zrezygnuję z tego sterownika. Ten minus uparcie się wyświetla, do tego nie działa ten alarm.
vfd
Ustawiłem coś takiego :
Jeżeli hword1 lub hword2 mniejsze od zera, wtedy wyświetl - w odpowiednim miejscu. Teraz niby nie ma minusa przy dodatnim wyniku, ale nie ma też przy zerach gdy brak czujnika. Nie wiem jak się zachowa przy ujemnej temperaturze.
Odp. Prosty sterownik C.O.
Się szybko poddajesz :) Chyba dopiero kiedy zrozumie się instrukcję swojego wyświetlacza to można wiedzieć czego on oczekuje, wysłac mu to i spodziewac się zadowalajacych rezultatów ;)
Im dłużej się bawię w programowanie tym więcej rzeczy kiedyś nieosiągalnych staje się możliwe :)
W oryginale Atmega8 tu pęka w szwach (98%). Okazuje się że wszystko można napisać inaczej i pewnie autor też to potrafi. Po prostu po czasie jest się mądrzejszym o doświadczenie.
W wolnej chwili wpadłem kiedys na pomysł by przepisać swój program pod płytke Mirleja żeby każdy kto będzie chciał mógł przetestować wersję "DeLux" :D
Tak jak tylko dobra piosenka doczeka się remiksu tak dobry projekt też może mieć remix :D
Mój program ma enkoder, inne menu i duże czcionki zachowując pełną funkcjonalność poprzednika. Ds`y programuje się z Menu. Mieści się w Atmega8 i jeszcze jest miejsce :)
Postaram sie wszystko sprawdzić jeszcze raz bo przepisywałem go jakiś czas temu i wtedy zamieszczę :)
Dodane po chwili: Wykorzystaj
If minusy = 0 then -> twój kod
.Jak minusy będą 1 to Twój kod nie zadziała i minus się wyświetli.
BARTek
Moja strona
vfd
Napisałem tak :
Nie ma minusów w ogóle, a powinien być przy 0.00 . Teraz to kompletnie zbaraniałem :/
Odp. Vfd
Myslałem że reszty się domyślisz Kolego..Minusy.n
Tak to jest tam zapisane gdzie sam cytowałes kawalek...myśl albo zrób sobie kawę tak jak ja teraz po obiedzie :D
więc jeśli ma być minus to Twojego kodu nie chcesz :)..odwróć warunek
Minusy to cały Bajt ale w nim jest osiem Bitów. To co zapisane po kropce oznacza numer Bitu. Zależy który DS to ten numer Bitu jest mu przypisywany 0 albo 1 już przy czytaniu temperatury.
Minusy.ktory_ds = Msb.7
7 Bit z Msb z danego Dallasa jest przypisywany przy okazji w miejscu odpowiadajacym numerowi Dallasa :)
BARTek
Moja strona
vfd
Próbowałem, i jeśli wstawię minusy.n to niestety oba minusy są. Mam dość, zostaje zwykły lcd. Na nim dobrze wyświetla. Mam jeszcze oleda zgodnego z HD44780, ale jest mały, więc go nie użyję.
Masz za wytrwałość VFD - powinno działać
BARTek
Moja strona
vfd
Dziękuję Ci BARTek. Ja zrobiłem to w ten sposób:
Zaraz sprawdzę Twój.
vfd
To nie działa, i chyba nie zadziała, bo modyfikuję program. Na koncu jest druga pętla sprawdzająca temp. Przy konwersji w ten sposób, mogę normalnie wyświetlać na VFD. Na razie na tym stanąłem, bo mega ma już prawie 100%.
Odp. Prosty sterownik C.O.
W oryginalnym programie Autora wystarczyło dopisać sobie ta zmienna i w Sub Temperatura poczynić zaznaczone zmiany :)
Przyjrzyj się i resztę spróbuj dopisac sam. Wywal te Twoje modyfikacje i podziałaj na oryginale :) Dopisz te znaki i bedzie git (ok) :D
BARTek
Moja strona
Prawie zrobione
Dziękuję za wielką pomoc.Był błąd w tym co mi podałeś, ale poradziłem sobie. Prawie zrobione. Mam jeszcze problem z rejestracją czujnika. Nie chce mi wykrywać drugiego, po podłączeniu obu na raz.
Odp. Prosty sterownik C.O.
Ideą szyny 1Wire jest umieszczenie wielu czujników na jednym przewodzie by nie ciągnąć osobnych przewodów do każdego gdy sterownik oddalony jest od kotłowni. Jeśli ktoś ma tylko dwa czujniki, sterownik w kotłowni i tak jak Ty tylko wyświetlacz dalej to powinien rozważyć inne podejście. Dwa czujniki na osobnych pinach procesora tak jak w minitermometrze stąd. Prostsza obsługa programowa, bez adresów..odpada programowanie, czujniki wymienne bez programowania w razie awarii...same zalety :P
BARTek
Moja strona
problem
Witam
Podpoiłem się przekaźnikiem pod buzer aby rozłączało mi wentylator gdy temp. max. zostanie osiągnięta i jest taki problem że przy włączaniu się przekaźnika atmega wiesza się na wyświetlaczy jest samo podświetlanie. pomocy!!!
Odp. problem
To mało profesjonalne podejscie :P Może się nie wiesza, ale wyswietlacz głupieje od zakłóceń generowanych przez cewkę przekaźnika. Oddalenie go pewnie by pomogło. Niemniej masz tam tylko 5v.. Nie lepiej jest znaleźć w kodzie w podprogramie "Sterowanie:" taki zapis:
i zmienić pierwsza linijke, dopisując : "And Buzz_en = 0"
Te "Else Went = 1" znaczy że jeśli powyzsze warunki nie sa spełnione to wentylator ma sie wyłaczyć.
BARTek
Moja strona
zmiana w kodzie
Witam . Jakiś rok temu zbudowałem ten sterownik i działa świetnie . Od kilku dni w domu mam zamontowane solary i potrzebował bym małej modyfikacji w kodzie.Mianowicie potrzebuję aby sterownik sterował pompą(i tylko pompą)na dwa sposoby :
a) załącza pompę po przekroczeniu temperatury na piecu np.40 stopni i wyłącza ją gdy temperatura spadnie oraz po przekroczeniu np.70 stopni aby się załączał alarm(tak jak działał dotychczas)
b) załącza tą samą pompę po przekroczeniu temperatury na bojlerze np. 80 stopni i wyłącza ją gdy temperatura spadnie oraz po przekroczeniu np.90 stopni aby się załączał alarm .
Wartości mogą być ustawione na stałe bez możliwości ich zmian .