[PROJEKT] Wielokanałowy termometr i termostat z wyświetlaczem OLED [2]
Pierwszą część artykułu możesz przeczytać tu.
Działanie termometru
Do magistrali 1-wire można podłączać kilka sensorów. Teoretycznie ich liczba może być duża, ale ze względu na możliwości wyświetlania na zastosowanym wyświetlaczu nie powinno ich być więcej niż 4. Program dopuszcza maksymalnie 20 czujników.
Po wyzerowaniu mikrokontrolera są wykonywane inicjalizacje: wyświetlacza OLED, interfejsu I2C do komunikacji z pamięcią i magistrali 1-wire. Następnie jest wykonywana procedura FindDevices wyszukująca czujniki na magistrali i program przechodzi do wyświetlania jednego z trzech ekranów temperatury:
- ekran 1 (poniżej), na którym wyświetlana jest ilość wykrytych czujników, kanał pomiarowy do którego dołączono funkcję termostatu i w kolejnych wierszach mierzone temperatury z dołączonych czujników,
- ekran 2 (poniżej). Ten ekran jest przeznaczony do realizowania funkcji termometru domowego wyświetlającego 2 temperatury: wewnętrzna i zewnętrzną. Temperatura wewnętrzna jest odczytywana z pierwszego czujnika na liście, a temperatura zewnętrzna z drugiego czujnika na liście. Żeby ekran 2 działał poprawnie potrzebne jest dołączenie przynajmniej 2 czujników do magistrali,
- ekran 3 (poniżej) spełnia funkcje termometru pokojowego z linijką przedstawiająca graficznie tendencje zmian temperatury w pomieszczeniu.
Po włączeniu zasilania z pamięci EEPROM jest odczytywany numer ekranu aktywnego przed wyłączeniem i taki sam ekran zostanie wyświetlony ponownie. Przełączanie pomiędzy ekranami jest wykonywane poprzez przyciskanie ośki impulsatora.
Do wyświetlania informacji na ekranie 1 jest wykorzystana najmniejsza czcionka 8x6pikseli. Nie jest to zbyt czytelne, ale można na ekranie zmieścić najwięcej informacji.
Na listingu 16 pokazano procedurę realizującą funkcje ekranu 1. Na początku z pamięci EEPROM są odtwarzane nastawy termostatu: temperatura progu, histereza i kanał termostatu. Potem jest wyświetlana liczba wykrytych czujników i kanał pomiarowy, do którego jest podłączony termostat. Pomiar temperatury i jej wyświetlanie jest realizowane w nieskończonej pętli. Pomiar temperatury jest wykonywany co 2 sekundy. Po każdym z cykli pomiarowych sprawdzany jest warunek zadziałania termostatu.
List. 16. Funkcja ekran 1
void ekran1(void){
char buf[20];
short i;
unsigned char chn, tst, kod;
poc:tg=td=1;//bity sterownia termostatem
EEWr(11,1);//aktywny ekran
RestoreTermostat();//odtworzenie histerezy i progu termostatu
chn=EERead(21);//aktywny kanał termostatu
OledCls();
sprintf(buf,"ilosc czujnikow = %u",numROMs);//wyświetlenie ilości czujników
OledTxtRam(buf,1,0);
sprintf(buf,"termostat kanal = %u",chn);//wyświetlenie kanału termostatu
OledTxtRam(buf,1,1);
while (1) {//pętla główna
ConvT(); // Konwersja temperatury
tmsek=750;//oczekiwanie 750msek na zakończenie pomiaru
while(1){//pętla oczekiwania na akcję
if(tmsek<=0)//zakończenie oczekiwania 750msek
break;
if(ST==0)//naciśnięcie ośki impulsatora
{
while(ST==0);//naciśnięty przycisk - koniec funkcji
__delay_ms(50);
return;
}
kod=GetEncoder();
if(kod==KOD_IMP_UP||kod==KOD_IMP_DWN)//obrót oski – ustawianie termostatu
{ ekran4();//ustaw termostat
OledCls();
goto poc;}
}
for(i=1;i<=numROMs;i++) { // odczytanie pomiarów ze wszystkich czujników
temperature[i] = Get_Temp(i);
sprintf (Temperatura,"T%u = %-2.2f *C",i,temperature[i]);//wyświetlanie temperatur
OledTxt(" ",1,i+2);
OledTxtRam(Temperatura,1,i+2);
if(i==chn)//sprawdzenie warunku termostatu
{
tst=CheckTermostat(temperature[chn]);//sprawdzanie termostatu
if(tst==1)
OledTxt("(*)",16,chn+2);//wyświetlanie wskaźnika działania termostatu
if(tst==0)
OledTxt(" ",16,chn+2);
}
}
tmsek=2000;//pomiar co 2 sekundy
while(1){
if(tmsek<=0)
break;
if(ST==0){
while(ST==0);//naciśniecie oski - koniec funkcji
__delay_ms(50);
return;}
kod=GetEncoder();
if(kod==KOD_IMP_UP||kod==KOD_IMP_DWN)//obrót oski - ustawiane termostatu
{ekran3();
OledCls();
goto poc;}
}
}
}
Ekran2 do wyświetlania mierzonych temperatur używa czcionki o średnim rozmiarze 16x10pikseli. Widoczność tak wyświetlanych informacji jest zadawalająca nawet z odległości kilku metrów. W założeniu ekran 2 ma pełnić funkcję domowego tremometru do pomiaru temperatury wewnętrznej i zewnętrznej. Rozdzielczość pomiaru została ograniczona do jednego miejsca po przecinku.




Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć
Fotorezystor, czyli czujnik światła dwojakiego działania. Przykład innowacji w automatyce i elektronice możliwej dzięki technologii fotooporników 



