PIC18F4550 ile DHT11 ve Nokia 5110 LCD Kullanımı

Bu yazımızda, PIC18F4550 ile DHT11 sensöründen aldığımız verileri Nokia 5110 LCD ekrana yazdırıyoruz ve DHT11 nem ve sıcaklık sensörüyle nasıl arabirim oluşturulacağına bakıyoruz. Sıcaklık (santigrat derece olarak) ve nem (bağıl nem yüzdesi, %rH olarak) değerleri 84 x 48 piksel çözünürlüğe sahip Nokia 5110 LCD’de görüntülenecektir.
Bu projede derleyici olarak CCS PIC C kullanacağız.

Gerekli Malzemeler

  • PIC18F4550 mikro denetleyici
  • Nokia 5110 (3310) LCD ekran
  • DHT11 sensorü 
  • AMS1117 3.3V voltaj regülatörü ya da 3.3V kaynak
  • 10 uF kondansatör
  • 100 nF seramik kondansatör
  • Dirençler: 3.3kΩ x 5 , 2.2kΩ x 5 , 4.7kΩ x 1
  • 5V kaynak
  • Devre tahtası(breadboard)
  • Kablolar

Devre Şeması

PIC18F4550 ile DHT11 ve Nokia 5110 LCD Kullanımı pic18f4550 ile dht11,nokia 5110 lcd,pic ile dht11,pic ve nokia 5110 lcd,pic lcd kullanımı

Tüm GND terminaller birbirine bağlanmalıdır.

DHT11 sensörünün 4 pimi vardır (soldan sağa):
VCC: +5V hattına bağlı
Data pini: PIC18F4550 pin RB2’ye (#35) bağlı
bağlı değil pin
GND: devre toprağına bağlı (0V).

Devre şemasında gösterilen Nokia 5110’un 8 pini (soldan sağa): RST (reset), CE (chip etkinleştirme), DC (veya D/C: veri/komut), Din (veri girişi), Clk (saat), VCC (3.3V), BL (arka ışık) ve GND (toprak) olarak adlandırlır.

Nokia 5110 LCD yalnızca 3,3V ile çalışır. LCD modülü, AMS1117 3V3 voltaj regülatöründen gelen 3.3V ile beslenir, bu regülatör 5V’yi 3.3V’a düşürür.

PIC18F4550’yi LCD modüle bağlamak için her hat için voltaj bölücü kullandık yani 5 adet voltaj bölücü vardır. Her voltaj bölücü 2.2k ve 3.3k dirençlerden oluşur, bu 5V’yi yeterli olan 3V’a düşürür.

Bu nedenle, Nokia 5110 LCD pinleri PIC18F4550 MCU’ya aşağıdaki gibi bağlanır (her biri voltaj bölücü aracılığıyla):
RST (reset) pini RD0 pinine (#19) bağlanır
CE (chip etkinleştirme) pini RD1 pinine (#20) bağlanır
DC (veri/komut) pini RD2 pinine (#21) bağlanır
DIN (veri girişi) pini RC7 pinine (#26) bağlanır
CLK (saat) pini RB1 pinine (#34) bağlanır

VCC ve BL, AMS1117 3V3 regülatör çıkış pinine, GND ise devre toprağına (0V) bağlanır.

Bu projede PIC18F4550 dahili osilatörünü kullanır ve MCLR pin fonksiyonu devre dışı bırakılır.

Proje Kodu

Aşağıdaki C kodu CCS C derleyicisi içindir, 5.051 sürümü ile test edilmiştir.

Proje C kodunu derleyebilmek için Nokia 5110 LCD için bir sürücü gereklidir, indirme linki aşağıdadır. NOKIA5110.c adlı sürücü dosyasını indirdikten sonra proje klasörünüze ekleyin:

Nokia 5110 LCD Sürücüsü

#define LCD_RST    PIN_D0
#define LCD_CS     PIN_D1
#define LCD_DC     PIN_D2

#define DHT11_PIN  PIN_B2

#include <18F4550.h>
#fuses NOMCLR, INTRC_IO, NOWDT, NOPROTECT, NOLVP
#use delay(clock = 8MHz)
#use spi(SPI1, BAUD = 1000000, MODE = 3, BITS = 8, STREAM = LCD_STREAM)
#include <NOKIA5110.c>   

int8 T_Byte1, T_Byte2, RH_Byte1, RH_Byte2, CheckSum;
 
void Start_Signal(void)
{
  output_drive(DHT11_PIN);   
  output_low(DHT11_PIN);    
  delay_ms(25);              
  output_high(DHT11_PIN);    
  delay_us(30);              
  output_float(DHT11_PIN);   
}

 
int1 Check_Response(void)
{
  setup_timer_1(T1_INTERNAL | T1_DIV_BY_2);   
  set_timer1(0);                                       

  while(!input(DHT11_PIN) && get_timer1() < 100);       
  if(get_timer1() >= 100)                              
    return 0;                                          

  else
  {
    set_timer1(0);                                    
    while(input(DHT11_PIN) && get_timer1() < 100); 
    if(get_timer1() >= 100)                            
      return 0;                                        

    else
      return 1;      
  }
}

void Read_Data(int8 *dht_data)
{
  int8 j;
  *dht_data = 0;
  setup_timer_1(T1_INTERNAL | T1_DIV_BY_2);   

  for(j = 0; j < 8; j++)
  {
    set_timer1(0);                
    while(!input(DHT11_PIN))     
      if(get_timer1() >= 100)     
      {
        setup_timer_1(T1_DISABLED);   
        return ;
      }

    set_timer1(0);               
    while(input(DHT11_PIN))      
      if(get_timer1() > 100)     
      {
        setup_timer_1(T1_DISABLED);   
        return ;               
      }
     if(get_timer1() > 50)           
       bit_set(*dht_data, (7 - j));   
  }

  setup_timer_1(T1_DISABLED);  
}

 
void main()
{
  setup_oscillator(OSC_8MHZ);    
  delay_ms(1000);   

  LCD_Begin();       
  LCD_Clear();            
  LCD_SetContrast(50);    
  LCD_DrawHLine(0, 23, LCDWIDTH);   

  LCD_TextSize(1);   
  LCD_GotoXY(6, 0);   
  LCD_Print("TEMPERATURE:");
  LCD_GotoXY(15, 28);    
  LCD_Print("HUMIDITY:");
  LCD_Display();

  while(TRUE)
  {
    Start_Signal();  

    if(Check_Response())   
    {   
      Read_Data(&RH_Byte1);    
      Read_Data(&RH_Byte2);    
      Read_Data(&T_Byte1);     
      Read_Data(&T_Byte2);    
      Read_Data(&CheckSum);    

      if(CheckSum == ((RH_Byte1 + RH_Byte2 + T_Byte1 + T_Byte2) & 0xFF))
      {
        LCD_GotoXY(24, 12);
        printf(LCD_Print, "%02u.0 C", T_Byte1);
        LCD_DrawRect(50, 12, 3, 3);
        LCD_GotoXY(24, 40);
        printf(LCD_Print, "%02u.0 %%", RH_Byte1);
      }

      else
      {
        LCD_GotoXY(24, 12);
        LCD_Print("ChkSum");
        LCD_GotoXY(24, 40);
        LCD_Print("Error!");
      }

   }

    
    else
    {
      setup_timer_1(T1_DISABLED);  
      LCD_GotoXY(24, 12);
      LCD_Print("Sensor");
      LCD_GotoXY(24, 40);
      LCD_Print("Error!");
    }

    LCD_Display();  
    delay_ms(1000); 

  }

}

Son Görüntü

PIC18F4550 ile DHT11 ve Nokia 5110 LCD Kullanımı pic18f4550 ile dht11,nokia 5110 lcd,pic ile dht11,pic ve nokia 5110 lcd,pic lcd kullanımı

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.