Ynt: MikroC arm ile lm35 sensöründen I2C veri yolu ile veri okuyup ve yazan lcd

Başlatan Serhad, 17 Aralık 2015, 17:05:18

Serhad

[/
unsigned olculen=0;
 long  toplam=0;
 float milivolt=0, sicaklik=0, ortalama=0;
 char i=0, txt[15];

// Software I2C connections
sbit Soft_I2C_Scl_Output    at GPIOD_ODR.B3;
sbit Soft_I2C_Scl_Input     at GPIOD_IDR.B3;
sbit Soft_I2C_Sda_Output    at GPIOD_ODR.B4;
sbit Soft_I2C_Sda_Input     at GPIOD_IDR.B4;
// End Software I2C connections

// LCD module connections
sbit LCD_RS   at GPIOE_ODR.B8;
sbit LCD_EN   at GPIOE_ODR.B10;
sbit LCD_D4   at GPIOE_ODR.B4;
sbit LCD_D5   at GPIOE_ODR.B5;
sbit LCD_D6   at GPIOE_ODR.B6;
sbit LCD_D7   at GPIOE_ODR.B7;

// End LCD module connections


void Write_Temparature()
{
 Soft_I2C_Start();      // Issue start signal
  Soft_I2C_Write(0xA2);  // Address
  Soft_I2C_Write(0);     // Start from address 0
  Soft_I2C_Write(0);     // Write 0 to configuration memory location (enable counting)

sicaklik=Soft_I2c_Write(1)  ;

Soft_I2C_Stop();

}

void Read_Temparature()
{

  Soft_I2C_Start();               // Issue start signal
  Soft_I2C_Write(0xA2);           // Address
  Soft_I2C_Write(0x00);              // Start from address
  Soft_I2C_Write(0x00);
  Soft_I2C_Start();               // Issue repeated start signal
  Soft_I2C_Write(0xA3);           // Address  for reading R/W=1

sicaklik =Soft_I2C_Read(1);

Soft_I2C_Stop();                // Issue stop signal

}

void Transform_Temperature()
{
          GPIO_Digital_Output(&GPIOE_BASE, _GPIO_PINMASK_9);     //9. Pin şaseye çekiliyor
      GPIOE_ODR.B9=0;


      ADC1_Init();
      ADC_Set_Input_Channel(_ADC_CHANNEL_12);

      while(1)
         {
        for(i=0;i<100;i++)
        {
        olculen=ADC1_Get_Sample(12);
        toplam+=olculen;
        }

      ortalama=toplam/100.0;
      toplam=0;
      milivolt=ortalama*3000.0/4095;

      sicaklik=milivolt/10;
      
      FloatToStr(sicaklik,txt);

      if(sicaklik>=1)
      {
      Lcd_Chr(1,10,txt[0]);
      Lcd_Chr_CP(txt[1]);
      Lcd_Chr_CP(txt[2]);
      Lcd_Chr_CP(txt[3]);
      Lcd_Chr_CP(txt[4]);
      Lcd_Chr_CP('C');
      }

      if(sicaklik<1)
     {
      Lcd_Chr(1,10,'0');
      Lcd_Chr_CP('.');

     Lcd_Chr_CP(txt[0]);
     Lcd_Chr_CP(txt[2]);
      Lcd_Chr_CP(txt[3]);
       Lcd_Chr_CP('C');

        }
     }
}

void main()
   {

      Soft_I2C_Init();

      Lcd_Init();
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Cmd(_LCD_CURSOR_OFF);
      Lcd_Out(1,1,"Sicaklik=");

while(1)
{
     Transform_Temperature();
     Write_Temparature();
     Read_Temparature();

 }
}
]


mesaj birleştirme:: 18 Aralık 2015, 07:07:22

Merhaba arkadaşlar paylaştığım bu kod ta LCD ekranda sıcaklığı göremiyorum rica etsem yanlış düzeltmem için yardımcı olabilir misiniz..

mesaj birleştirme:: 17 Aralık 2015, 18:50:17

2x16 LCD modülü düşünerek yapmaya çalıştım.
Yardımlarınız için şimdiden teşekkür ederim.