termometre sorunu

Başlatan deserteagle, 14 Mayıs 2007, 21:52:34

deserteagle

burada picin rb4 ve rb5 i  sensörden gelen sıcaklık bilgisinin dijitaline yani sıcaklık değişkeninin değerine göre 1 veya sıfır oluyor ama bu bir türlü çalışmıyor lcd de yazı bile yazmıyor.yardımlarınızı bekliyorum.
saygılarımla
şeması




kodu
#include<pic.h>
#include<delay.c>
#include<stdio.h>
#include<lcd.c>
void main()
{
   const float lsb=5.0/1024.0;
   unsigned char gerilim;
   int sicaklik;
   unsigned char sicak[]="SICAKLIK";
   TRISB=0;
   TRISA=1;
   DelayMs(250);
   lcd_init();
   lcd_clear();
   ADCON1=0x8E;
   ADCON0=0x41;
   for(;;)
   {
      ADCON0=0x45;
   while((ADCON0 & 4)!=0);
   gerilim=ADRESH;
   gerilim=256*gerilim+ADRESL;
   sicaklik=(int)(gerilim*lsb*100.0);
   sprintf(sicak+11,"%dC",sicaklik);
   lcd_goto(0x00);
   lcd_puts(sicak);
   if(sicaklik < 10 )
   {
      RB4=0;
      RB5=1;
      lcd_goto(0x40);
      lcd_puts("ISITICI ACIK");
      DelayMs(250);
      continue;
   }
   else if(sicaklik >= 10 && sicaklik < 20)
   {
      RB4=0;
      RB5=0;
      lcd_goto(0x40);
      lcd_puts("ORTAM NORMAL");
      DelayMs(250);
      continue;
   }
   
   else if(sicaklik >20 )
   {
      RB4=1;
      RB5=0;
      lcd_goto(0x40);
      lcd_puts("KLIMA ACIK");
      DelayMs(250);
      continue;
   }
   }
}

fatihsatir

Arkadaşım, bende buna benzer bir proje yapmıştım hemde bire bir aynısıydı fakat sprintf fonksiyonunu paralel lcdler için kullanamamıştım fakat seri lcdde sorun çıkarmamıştı. Eğerki bu fonksiyonla yapabilirsen lütfen banada haber et.
Dünya güzelliklerine dalıp ahiret hayatını unutma..!

arslan74

Merhaba,

kodun içinde söyle bir kod var.

unsigned char sicak[]="SICAKLIK";

sprintf(sicak+11,"%dC",sicaklik);


Burada hata var. Neden sicak dizisine 11 ekliyorsun. Dizinin uzunluğu zaten 8 bayt. 11 ekleyerek dizinin dışına taşıyorsun. Bunu düzeltirsen sanırım çalışır.

Selamlar.