Kolega modernizując u siebie w mieszkaniu system ogrzewania poprosił mnie o wykonanie jakiegoś sterownika do pieca C.O. wraz ze sterowaniem dmuchawy. Tak powstał niewielki regulator, który miał mieć na celu prostotę i czytelność.
Elementy użyte do budowy sterownika to:
Głównym zadaniem jest uruchamianie pompy obiegowej na podstawie zadanej temperatury na piecu. Dodatkową funkcją jest tryb rozpalania, który w początkowej fazie uruchamia dmuchawę. Jest to bardzo przydatna opcja, przyspieszająca proces rozpalania w piecu.
Sterowanie jest bardzo proste, odbywa się z wykorzystaniem tylko trzech przycisków. W podstawowym widoku regulujemy zadaną temperaturę na piecu, która decyduje o tym czy pompa ma zacząć pracować czy nie. Regulator jest prostą nastawą z histerezą.
Po wejściu w menu możemy dodatkowo zmienić:
Wszystko zostało zamknięte w obudowie natynkowej, a sterownik umieszczony obok pieca w pomieszczeniu gospodarczym.
Układ składa się z dwóch płytek rozdzielając część wysokiego napięcia i sterowania.
Zdecydowałem się na umieszczenie kompletnego zasilania w urządzeniu, transformator, bezpiecznik i kilka dodatkowych elementów. Powodem tego było to, że sterownik jest używany przez kogoś innego a dołączany zasilacz może się zgubić i wtedy nie mam kontroli na tym jaki zamiennik zostanie użyty.
Tutaj jest pokazany schemat i wzór płytki:
Płytka została wykonana w domowych warunkach metodą żelazkową. Dla poprawy czytelności wykorzystałem możliwość definiowania własnych znaków co pozwoliło uzyskać duże cyfry widoczne z daleka. Niżej pokazuje jak uzyskać takie efekt.
Najpierw musimy zdefiniować poszczególne elementy cyfr i ładujemy je do pamięci wyświetlacza.
Następnie tworzymy tablicę która poskleja nam te segmenty w cyfry.
Teraz już tylko wystarczy użyć odpowiedniej funkcji do wyświetlania. Funkcja ta korzysta z obsługi R/W i odczytuje stan busy flag co pozwala na odczytanie pozycji kursora. Jeśli ktoś będzie chciał podłączyć R/W do GND to musi przerobić tę funkcję tak aby przekazać do niej pozycję kursora.
Jest to prosty sposób na bardzo fajne wyświetlanie liczb, które są widoczne z daleka.
- LCD 2x16 HD44780
- ATMEGA8 - zastosowany procesor
- DS18B20 - czujnik mierzący temperaturę na piecu
- przekaźnik na 5V
Głównym zadaniem jest uruchamianie pompy obiegowej na podstawie zadanej temperatury na piecu. Dodatkową funkcją jest tryb rozpalania, który w początkowej fazie uruchamia dmuchawę. Jest to bardzo przydatna opcja, przyspieszająca proces rozpalania w piecu.
Sterowanie jest bardzo proste, odbywa się z wykorzystaniem tylko trzech przycisków. W podstawowym widoku regulujemy zadaną temperaturę na piecu, która decyduje o tym czy pompa ma zacząć pracować czy nie. Regulator jest prostą nastawą z histerezą.
Po wejściu w menu możemy dodatkowo zmienić:
- temperaturę wyłączenia dmuchawy. Jeżeli piec jest zimny i włączymy opcję rozpalania to po osiągnięciu już stosunkowo niewielkiej temperatury dmuchawa zostanie wyłączona
- histerezę pracy regulatora
- maksymalne czasy pracy pompy i dmuchawy
Układ składa się z dwóch płytek rozdzielając część wysokiego napięcia i sterowania.
Zdecydowałem się na umieszczenie kompletnego zasilania w urządzeniu, transformator, bezpiecznik i kilka dodatkowych elementów. Powodem tego było to, że sterownik jest używany przez kogoś innego a dołączany zasilacz może się zgubić i wtedy nie mam kontroli na tym jaki zamiennik zostanie użyty.
Tutaj jest pokazany schemat i wzór płytki:
Płytka została wykonana w domowych warunkach metodą żelazkową. Dla poprawy czytelności wykorzystałem możliwość definiowania własnych znaków co pozwoliło uzyskać duże cyfry widoczne z daleka. Niżej pokazuje jak uzyskać takie efekt.
Najpierw musimy zdefiniować poszczególne elementy cyfr i ładujemy je do pamięci wyświetlacza.
uint8_t BigDigitDefChar[][8] = {
{15,7,32,32,32,32,3,7},
{32,32,32,32,32,32,7,15},
{28,30,30,30,30,30,30,28},
{7,15,15,15,15,15,15,7},
{31,31,32,32,32,32,32,32},
{32,32,32,32,32,32,31,31},
{31,31,32,32,32,32,31,31},
{30,28,32,32,32,32,24,28}
};
for(uint8_t i=0;i<8;i++) lcd_defchar(i,BigDigitDefChar[i]);
Następnie tworzymy tablicę która poskleja nam te segmenty w cyfry.
char* BigDigit[][2]={
{"\x83\x84\x82","\x83\x85\x82"}, //0
{" \x82"," \x82"}, //1
{"\x80\x86\x82","\x83\x85\x85"}, //2
{"\x80\x86\x82","\x81\x85\x82"}, //3
{"\x83\x85\x82"," \x82"}, //4
{"\x83\x86\x87","\x81\x85\x82"}, //5
{"\x83\x86\x87","\x83\x85\x82"}, //6
{"\x83\x84\x82"," \x82"}, //7
{"\x83\x86\x82","\x83\x85\x82"}, //8
{"\x83\x86\x82","\x81\x85\x82"} //9
};
Teraz już tylko wystarczy użyć odpowiedniej funkcji do wyświetlania. Funkcja ta korzysta z obsługi R/W i odczytuje stan busy flag co pozwala na odczytanie pozycji kursora. Jeśli ktoś będzie chciał podłączyć R/W do GND to musi przerobić tę funkcję tak aby przekazać do niej pozycję kursora.
void lcd_big_int(int val)
{
uint8_t pp,x,y;
char bufor[17];
char *wsk=itoa(val, bufor, 10); //zamieniamy całą liczbę na pojedyncze znaki ACSII np. 1234 -> '1','2','3','4'
register uint8_t znak;
while ( (znak=*(wsk++)) ) //pętla jest powtarzana po wszystkich indeksach tablicy bufor, aż napotka '\0'
{
pp = check_BF() & 0b01111111; //odczytujemy aktualną pozycję kursora - busy flag wyświetlacza
y = pp & 0xF0; //wyodrębniamy nr wiersza
x = pp & 0x0F; //wyodrębniamy pozycję x
znak -= 0x30; //zamieniamy kod ascii na rzeczywistą wartość dziesiętną np '7' -> 7; będzie to nasz indeks do tablicy
lcd_str(BigDigit[znak][0]); //ładujemy na wyświetlacz górną część cyfry
lcd_write_cmd( (0x80 + y + 0x40 + x) ); //wracamy kursorem na domyślną pozycję x, ale o jeden wiersz niżej
lcd_str(BigDigit[znak][1]); //ładujemy na wyświetlacz dolną część cyfry
lcd_write_cmd( (0x80 + y + x + 0x03) ); //ustawiamy kursor zaraz za cyfrą w wierszu domyślnym, czyli takim w którym wywołano funkcję
}
}
uint8_t check_BF(void)
{
CLR_RS;
return _lcd_read_byte();
}
Jest to prosty sposób na bardzo fajne wyświetlanie liczb, które są widoczne z daleka.
Komentarze
Prześlij komentarz