Aşağıdaki programda dereceyi çalıştıramadım

Başlatan Recep METE, 31 Temmuz 2013, 23:37:35

Recep METE

Arkadaşlar aşağıda yazılmış olan kodda saat-tarih çalıştığı halde dereceyi çalıştıramadım.Derece "0" da duruyor.Acaba nerede yanlış yaptım.Bir türlü bulamadım.Pic olarak 16f877 kullanıldı.derece ds18b20 kullanıldı.Sorunu çözmeme yardımcı olursanız minnettar olacağım.Ayrıca isis şemasını ekleyeceğim ancak buraya nasıl ekliyeceğimi bulamadım.Bu konudada yardımcı olursanız sevinirim.



Program:

#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

#use delay (clock=4000000)                         //4mhz delay süresi

#include "flex_lcd.c"                            //lcd c dosyası
#include "ds18b20.c"                              //termometre entegresi c dosyası
#include "ds1302.C"                               //saat entegresi c dosyasi

int8 sicak,saniye,dakika,saat,gun,ay,hafta,yil,ayar=0;

void lcd()
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%02d/%02d/%02d",gun,ay,yil);  
   lcd_gotoxy(1,2);
   printf(lcd_putc,"%02d:%02d:%02d",saat,dakika,saniye);
   lcd_gotoxy(11,1);
   switch(hafta)  
      {                     
         case 1: printf(lcd_putc,"Pzts"); break; 
         case 2: printf(lcd_putc,"SALI"); break; 
         case 3: printf(lcd_putc,"CARS"); break; 
         case 4: printf(lcd_putc,"PERS"); break;
         case 5: printf(lcd_putc,"CUMA"); break; 
         case 6: printf(lcd_putc,"Cmts"); break; 
         case 7: printf(lcd_putc,"Pzar"); break; 
      }
}
void sicaklik()
{
   sicak=ds1820_read();                                  //termometre entegresindeki değeri sicak değişkenine aktar
   lcd_gotoxy(11,2);printf(lcd_putc,"%02d",sicak);
   lcd_gotoxy(13,2);lcd_send_byte(0x4a,0xdf);lcd_gotoxy(14,2);printf(lcd_putc,"C");
}
void ayaryap(){
//(0x0d) lcd belirtilen konumun yanıp sönmesi

   if(input(pin_d0)==0){ayar++;delay_ms(20);printf(lcd_putc,"\f AYAR MODU");delay_ms(450);printf(lcd_putc,"\f");}

   while(ayar==1){
   lcd();lcd_gotoxy(1,1);lcd_send_byte(0x01,0x0d);lcd_gotoxy(2,1);lcd_send_byte(0x02,0x0d);   
   if(input(pin_d0)==0){gun++;delay_ms(20);if(gun==32){gun=1;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){gun--;delay_ms(20);if(gun==0){gun=31;}while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(ayar==2){
   lcd();lcd_gotoxy(4,1);lcd_send_byte(0x04,0x0d);lcd_gotoxy(5,1);lcd_send_byte(0x05,0x0d);
   if(input(pin_d0)==0){ay++;delay_ms(20);if(ay==13){ay=1;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){ay--;delay_ms(20);if(ay==0){ay=12;}while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
 
   while(ayar==3){
   lcd();lcd_gotoxy(7,1);lcd_send_byte(0x07,0x0d);lcd_gotoxy(8,1);lcd_send_byte(0x08,0x0d);
   if(input(pin_d0)==0){yil++;delay_ms(20);while(input(pin_d0)==0);}
   if(input(pin_d1)==0){yil--;delay_ms(20);if(yil==-1)yil=99;while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(ayar==4){
   lcd_gotoxy(11,1);lcd_send_byte(0x11,0x0d);lcd();delay_us(5);
   if(input(pin_d0)==0){hafta++;delay_ms(20);if(hafta==8){hafta=1;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){hafta--;delay_ms(20);if(hafta==0){hafta=7;}while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(ayar==5){
   lcd_gotoxy(1,2);lcd_send_byte(0x40,0x0d);lcd_gotoxy(2,2);lcd_send_byte(0x41,0x0d);lcd();
   if(input(pin_d0)==0){saat++;delay_ms(20);if(saat==24){saat=0;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){saat--;delay_ms(20);if(saat==-1){saat=23;}while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
   while(ayar==6){
   lcd_gotoxy(4,2);lcd_send_byte(0x43,0x0d);lcd_gotoxy(5,2);lcd_send_byte(0x44,0x0d);lcd();
   if(input(pin_d0)==0){dakika++;delay_ms(20);if(dakika==60){dakika=0;}while(input(pin_d0)==0);}
   if(input(pin_d1)==0){dakika--;delay_ms(20);if(dakika==-1){dakika=59;}while(input(pin_d1)==0);}
   if(input(pin_d2)==0){ayar++;delay_ms(200);while(input(pin_d2)==0);}}
   
   
   while(ayar==7){rtc_set_datetime(gun,ay,yil,hafta,saat,dakika);    //değişkenleri saat entegresine aktar.
   delay_ms(20);
   printf(lcd_putc,"\f    AYARLAR\n   YUKLENIYOR");
   delay_ms(1000);printf(lcd_putc,"\f");
   ayar=0;}
}   
void main()
{  

   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   lcd_init();       //lcd yi hazırla
   rtc_init();       //saat entegresini hazırla
   delay_ms(5);
   printf(lcd_putc,"\fRECEP METE\nALACAM-SAMSUN");
   delay_ms(200);
   printf(lcd_putc,"\f");
   delay_ms(5);    
   
while(1)
{
      if(ayar==0){rtc_get_time(saat,dakika,saniye);rtc_get_date(gun,ay,yil,hafta);}
      sicaklik();
      lcd();
      ayaryap();
}
}

   





[IMG]http://img12.imageshack.us/img12/940/bkek.png[/img]

Uploaded with ImageShack.us
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

ziyaretci

Merhaba,

    "ds18b20.c" dosyasını paylaşman gerekli.

coderun

ds18b20.c dosyasını paylaşırsan hata bulunabilir.

Murat Mert

S.A.
Kütüphanede bulunan ds nin ucuyla senin bağlandığın pin farklı olabilir.
mert07

Recep METE

Hocam ds18b20.c dosyasını paylaşıyorum.İnşallah sorunu çözersiniz.Saygılar.




ds18b20.c dosyası;
#define ONE_WIRE_PIN PIN_C0
void onewire_reset() 

{
output_low(ONE_WIRE_PIN);
delay_us( 500 ); //1-wire resetleme için sıfıra çekilir
output_float(ONE_WIRE_PIN); //1-wire bir yapılır
delay_us( 500 ); // sensörün hazırlanması için beklenir.
output_float(ONE_WIRE_PIN);
} 

void onewire_write(int data)
{
int count;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); // Sensöre yazma işlemine başlamak için  1-wire sıfıra çekilir.
output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // yazılacak bilgi 1-wire'da
delay_us( 60 ); // Yazma işlemi zamanı doldurulur.
output_float(ONE_WIRE_PIN); // 1-wire bir yapılır,
delay_us( 2 ); // 1us'den fazla beklenir.
}
} 

int onewire_read()
{
int count, data;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); //Sensördem okuma işlemi içinl 1-wire sıfıra çekilir.
output_float(ONE_WIRE_PIN); //1-wire bir yapılır,
delay_us( 8 ); // Sensörün kendine gelmesi beklenir,
shift_right(&data,1,input(ONE_WIRE_PIN)); // sonuc bilgisi alınır.
delay_us( 120 ); //Okuma işlemi zamanı doldurulur.
}
return( data );
} 

float ds1820_read()
{
int8 busy=0, temp1, temp2;
signed int16 temp3;
float result;
onewire_reset();
onewire_write(0xCC);
onewire_write(0x44);
while (busy == 0)
busy = onewire_read();
onewire_reset();
onewire_write(0xCC);
onewire_write(0xBE);
temp1 = onewire_read();
temp2 = onewire_read();
temp3 = make16(temp2, temp1);
result = (float) temp3 / 16.0;//18b20 icin
//result = (float) temp3 / 2.0;//18s20 icin
delay_ms(200);
return(result);
}
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Murat Mert

Çalışan kod:

#include <16F877A.h>
#device *=16 
#device adc=8 
#FUSES NOWDT, HS, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT      
#use delay(clock=20000000) 
#include<1wire.c> 
#include<e_lcd.c> 
#include<ds1820.c> 

void main() 
{ 
float temperature; 

setup_adc_ports(NO_ANALOGS); 
setup_adc(ADC_OFF); 
lcd_init();  delay_ms(200);
lcd_putc("\f"); 

while (1) 
{ 
  temperature = ds1820_read(); 
   lcd_gotoxy(5,1); 
    printf(lcd_putc,"DENEME");
     lcd_gotoxy(3,2); 
      printf(lcd_putc,"TEMP: %3.1f", temperature); 
      lcd_putc(223);
       lcd_putc("C"); 
 } 

}


ds driver
ds1820.c

float ds1820_read() 
{ 
 int8 busy=0, temp1, temp2; 
 signed int16 temp3; 
 float result; 

 onewire_reset(); 
 onewire_write(0xCC); 
 onewire_write(0x44); 

 while (busy == 0) 
  busy = onewire_read(); 

 onewire_reset(); 
 onewire_write(0xCC); 
 onewire_write(0xBE); 
 temp1 = onewire_read(); 
 temp2 = onewire_read(); 
 temp3 = make16(temp2, temp1); 
  
// result = (float) temp3 / 2.0;   //Calculation for DS18S20 with 0.5 deg C resolution 
 result = (float) temp3 / 16.0;  //Calculation for DS18B20 with 0.1 deg C resolution 
  
 delay_ms(200); 
 return(result); 
}


1wire.c
#define ONE_WIRE_PIN PIN_C0 
void onewire_reset()  // OK if just using a single permanently connected device 
{ 
 output_low(ONE_WIRE_PIN); 
 delay_us( 500 ); // pull 1-wire low for reset pulse 
 output_float(ONE_WIRE_PIN); // float 1-wire high 
 delay_us( 500 ); // wait-out remaining initialisation window. 
 output_float(ONE_WIRE_PIN); 
} 

void onewire_write(int data) 
{ 
 int count; 

 for (count=0; count<8; ++count) 
 { 
  output_low(ONE_WIRE_PIN); 
  delay_us( 2 ); // pull 1-wire low to initiate write time-slot. 
  output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // set output bit on 1-wire 
  delay_us( 60 ); // wait until end of write slot. 
  output_float(ONE_WIRE_PIN); // set 1-wire high again, 
  delay_us( 2 ); // for more than 1us minimum. 
 } 
} 
int onewire_read() 
{ 
 int count, data; 

 for (count=0; count<8; ++count) 
 { 
  output_low(ONE_WIRE_PIN); 
  delay_us( 2 ); // pull 1-wire low to initiate read time-slot. 
  output_float(ONE_WIRE_PIN); // now let 1-wire float high, 
  delay_us( 8 ); // let device state stabilise, 
  shift_right(&data,1,input(ONE_WIRE_PIN)); // and load result. 
  delay_us( 120 ); // wait until end of read slot. 
 } 

 return( data ); 
}
mert07