ds18b20 ile 7segment displayda çalışan kod lazım

Başlatan Recep METE, 02 Kasım 2013, 23:18:45

Recep METE

Arkadaşlar CCS C ile yazılmış ds18b20'nin 7 segment displayda çalışan kodu çok acele lazım.Aramama rağmen 7 segmen için yazılmış  ccs c kodunu bulamadım.Yardımcı olursanız memnun olurum.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d


Recep METE

#2
Alıntı yapılan: toyo - 02 Kasım 2013, 23:32:10
http://www.teknikders.com/17-ders14-ds18b20-sensoru-ile-s%C4%B1cakl%C4%B1k-olcme.html


Hocam verdiğiniz linkte LCD ile yapılmış bir örnek var.Ben 7 segment ile sıcaklık göstermek istiyorum.Aşağıda 7 segmentte yazılmış kod var ds1302 yapılmış saat çalışıyor.Ben buna bir de ds18b20 ile yazılmış sıcaklık kodu eklemek istiyorum.Bunu nasıl yapacağımı bilmiyorum.Aşağıdaki koda nasıl eklerim.


//----- ds1302 pinleri tanımlanıyor --------------------------------------------
#ifndef     rtc_sclk
#define     rtc_sclk   pin_c1
#define     rtc_io     pin_c2       
#define     rtc_rst    pin_c0
#endif                        
//------------------------------------------------------------------------------
                     
#include <16f877.h>                              
#fuses XT,NOWDT,NOPROTECT    
#use delay (clock=20000000)                                                         
#include <DS1302.c>                            

byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu;
                 
char display1_onlar,display1_birler,display2_onlar,display2_birler,display3_onlar,display3_birler;  
                  
const int display_digit[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};  // ortak anotlu için              
int i;


//------- ana program ----------------------------------------------------------
void main ()                                 
{  
   output_a(0x00);
   output_b(0x00);
   output_c(0x00);
   output_d(0x00);
   output_e(0x00);
   delay_ms(2);
   setup_adc(adc_clock_internal);   
   
   rtc_init();  // DS1302 başlangıç ayarları yapılıyor
   delay_ms(20);
   //rtc_set_datetime(1,02,10,7,21,20); // Tarih ve Saat ayarları yapılıyor
   
   
   while(1)               
   {                           
    
       output_low(pin_a2);
       output_high(pin_a1); 
       
       for(i=0;i<250;i++) //for saat
       {
             rtc_get_time(saat,dakika,saniye);       // DS1302'den saat,dakika,saniye bilgileri alınıyor
       display1_birler=saat%10;  // birler basamağı için % işareti ile mod lu bölme yapılarak 10 a bölümünden kalan hesaplanıyor.             
       display1_onlar=saat/10;   // saat degerini 10 a bölüp onlar basamağı hesaplanıyor.
       display2_birler= dakika%10;
       display2_onlar=dakika/10;
       display3_birler=saniye%10;    
       display3_onlar=saniye/10; 
                       
       delay_ms(5);   
       
       
       output_d(0b00000001);       
output_b(display_digit[display1_onlar]);    
delay_ms(2);            
output_d(0b00000010);              
output_b(display_digit[display1_birler]);     
delay_ms(2);                
output_d(0b00000100);
output_b(display_digit[display2_onlar]);     
delay_ms(2);            
output_d(0b00001000);
output_b(display_digit[display2_birler]);     
delay_ms(2); 
output_d(0b00010000);
output_b(display_digit[display3_onlar]);     
delay_ms(2);
output_d(0b00100000);
output_b(display_digit[display3_birler]);     
delay_ms(2);
       
       
       
       } // for saat  
      
      
       
      
       
} } 
                                     
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

toyo

 çizmeye ugraşmayım  şema varmı acaba elinizde ?
Gelirken ne getirilir ki giderken ne götürülür.

Recep METE

Alıntı yapılan: toyo - 02 Kasım 2013, 23:47:43
çizmeye ugraşmayım  şema varmı acaba elinizde ?

hocam isis şemasının resmini gönderiyorum.Bu siteye hala isis dosyası nasıl gönderilir biliyor değilim.Bu neden le resmini gönderebiliyorum.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

toyo

www.dosya.tc

ISIS dosyasını arşivle bu siteye yükle.Sonra sana download yani indirme linki vercek onu buraya yapıştır.
Gelirken ne getirilir ki giderken ne götürülür.

pwm.c

_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

Recep METE

#7
Alıntı yapılan: toyo - 03 Kasım 2013, 09:49:24
www.dosya.tc

ISIS dosyasını arşivle bu siteye yükle.Sonra sana download yani indirme linki vercek onu buraya yapıştır.



Hocam dosyayı yükledim.Yapmak istediğim şudur.LM35 ile çalışan 7 segment displayda, LM35 yerine ds18b20 yerleştirmek istiyorum.Bir türlü bunu başaramadım.Bu konuda yardımcı olanlara minnettar kalacağım.Şimdiden teşekkürler.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Recep METE

Arkadaşlar LM35 li sıcaklık göstergesini ds18b20 ye çeviren , belgelerin olduğu web sitesi bilen arkadaşlar varsa bu bilgilerini paylaşırlarsa çok memnun oluruz.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

pwm.c

DS18B20 için CCS C kütübhanesi:

#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;
delay_ms(200);
return(result);
}


sensörü okumak için float değişken tanımlayıp şu kodu ekleyeceksin:
temp = ds1820_read();
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

kralsam

Alıntı yapılan: pwm.c - 03 Kasım 2013, 11:45:14
http://www.mcu-turkey.com/sicak-su-tanki-sicaklik-uyari-ve-kontrol-sistemids18b20/

Tam ben yazacaktım hocam paylaşmış zaten. Anlatımı izlersen yapıp çalıştırdım. Zor kısmı ekranda sürekli görüntü verme kısmı çünkü sensör okunurken yanılmıyorsam 100ms gibi bir bekle var. Ama bunu iletişim aralarında ekran sürerek devam ettirirsen iş bölümü yapmış olursun. Hem haberleşme devam eder, hem sensör okunmuş olur.

Ha birde ISIS e güvenme orada çalışmıyor. Ama uygulandığında çalışıyor.