LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

[PROJEKT] Wielokanałowy termometr i termostat z wyświetlaczem OLED [2]

List. 17. Funkcja ekran 2

void ekran2(void){
  short i;
  unsigned char termostatus,chn, kod;
 poc:  td=tg=1;
  EEWr(11,2);//ekran 2
  chn=EERead(21);//aktywny kanał termostatu
  RestoreTermostat();//odtworzenie z eeprom progu i histerezy
  OledCls();
  OledTxt("Pomiar temperatur",1,0);
  if(numROMs>1)//więcej niż 1 czujnik
    OledTxt("Tz=",1,7);
    OledTxt("Tw=",1,3);
   
  while (1) {
    ConvT(); // konwersja temperatury dla wszsytkich czujników.
    tmsek=750;//750msek dla zakończenia konwersji
     while(1){
    if(tmsek<=0)
      break;
    if(ST==0)//naciśnięcie ośki inpulsatora
    {
    while(ST==0);
     __delay_ms(50);
      return;
    }
     kod=GetEncoder();
    if(kod==KOD_IMP_UP||kod==KOD_IMP_DWN)//obrot oski - ustawiane termostatu
    {ekran4();//ustaw termostat
    OledCls();
    goto poc;}
    }
    for(i=1;i<=numROMs;i++) { odczytanie wszystkich temperatur
      temperature[i] = Get_Temp(i);
    }
    termostatus=CheckTermostat(temperature[chn]);//sprawdzenie warunku termostatu
     if(termostatus==1)
     {
       if(chn==1)
       OledTxt("(*)",18,3);
       if(chn==2)
       OledTxt("(*)",18,7);
     }
       if(termostatus==0){
       if(chn==1)
       OledTxt("  ",18,3);
       if(chn==2)
       OledTxt("  ",18,7);
       }
 
 
    sprintf(Temperatura, "T1=%-2.2f *C", temperature[1]);
    if(Temperatura[4]=='.')
    {Temperatura[6]=Temperatura[5];
    Temperatura[5]=Temperatura[4];
    Temperatura[4]=Temperatura[3];
    Temperatura[3]='0';}
    DispTempMid(Temperatura+3,3,1);
     if(numROMs>1){
    sprintf(Temperatura, "T1=%-2.2f *C", temperature[2]);
    if(Temperatura[4]=='.')
    {Temperatura[6]=Temperatura[5];
    Temperatura[5]=Temperatura[4];
    Temperatura[4]=Temperatura[3];
    Temperatura[3]='0';}
    DispTempMid(Temperatura+3,3,3);
    }
 
    tmsek=2000;
    while(1){
    if(tmsek<=0)
      break;
    if(ST==0){
      while(ST==0);
     __delay_ms(50);
     return;}
      kod=GetEncoder();
    if(kod==KOD_IMP_UP||kod==KOD_IMP_DWN)//obrot oski - ustawiane termostatu
    {ekran4();//ustaw termostat
    OledCls();
    goto poc;}
    }
  }
}

Ekran 3 używa największej czcionki do wyświetlania temperatury z pierwszego czujnika na liście. Oprócz wartości cyfrowej w dolnej części wyświetlacza pojawia się cos w rodzaju analogowego wskaźnika tendencji zmian temperatury. Po każdym pomiarze odczytana wartość jest reprezentowana przez słupek o szerokości 2 pikseli i wysokości od 1 do 24 pikseli.

Założyłem, że temperatura pokojowa będzie się zmieniać od +18stC do +30stC z rozdzielczością co 0.5stC. Daje nam to 12stopni z rozdzielczością 0,5 stopnia czyli 24 zmiany co 0,5stC. Przyrost o 0,5stC powoduje zwiększenie wysokości słupka o 1 piksel. W podobny sposób można dobrać zmianę długości słupków dla innego zakresu temperatur.

Maksymalna wysokość słupków (24 piksele) jest podyktowana rozdzielczością i wielkością matrycy wyświetlacza. Zwiększenie maksymalnej wysokości o kolejne 8 pikseli, a co za tym idzie zwiększenie dokładność wskazań nie było możliwe do wyświetlenia.

Funkcja termostatu

Termometr ma wbudowaną funkcję termostatu z histerezą. Działanie termostatu określają: kanał pomiarowy do którego termostat jest podłączony, temperatura progowa Tt i wartość histerezy. Jeżeli podczas inicjalizacji temperatura jest niższa od temperatury progowej Tt, to przekaźnik jest załączony. Załóżmy, że temperatura rośnie i osiąga wartość Tt. Wtedy przekaźnik się wyłącza i jest wyłączony do momentu, kiedy temperatura nie spadnie do wartości Tt-Th – rysunek 2. Wprowadzenie histerezy jest niezbędne, bo w przeciwnym przypadku niewielkie zmiany temperatury w pobliżu Tt powodowałyby ciągłe załączanie i wyłączanie przekaźnika.

Rys. 2. Okno histerezy termostatu

Rys. 2. Okno histerezy termostatu

Termostat jest w pełni programowany. Można ustawić histerezę od 0,1oC do 2,5oC z krokiem co 0,1oC, oraz temperaturę progową w całym zakresie pomiarowym. Do programowania jest przeznaczony ekran4 (rysunek poniżej). Można go wywołać z każdego z ekranów pomiaru temperatury przez obrót ośki impulsatora w dowolna stronę.

Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC. Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.