Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

Termometre devresi v2

Başlatan baran123, 29 Nisan 2014, 19:25:48

baran123

Evet @semfero isteği üzerine Termometre devresi v2 Ultra Edition sunuyorum :PP

74HC595,7 segment ortak katot,PIC16F877A kullandım

NOT : 1-2 matematiksel fonksiyn kullandım kütüphaneden dolayı küçük piclerde hafıza sorunu olur dıye 877a yaptım daha kucuk bır pıc ıle yapıcam guncellerım gene buradan bıde proteusda cok cok kucuk bır hata payı var ona bişey yapamayız orn: sıcaklık :74.45 ama dısplayde 74.46 falan sıkıntı olmaz  tavsiyeleriniz yada böyle yap daha iyi olur dediğiniz kısımlar için yorumunuzu eksik etmeyin, hadi afiyetle :) herkese iyi çalışmalar.


Özellikleri :
1)(- 50.99) ile (+ 125.0) arası ölçüm yapabiliyor
2)Değerler dışında ise "hata" yazıyor
3)nokta sorunu yok dereceye göre kendi kayıyor

Kendiniz incelersiniz proteus da aklıma gelmedi baska 1-2 kıvır zıvırı daha vardı
Edit : http://s3.dosya.tc/server22/3gDnnO/Termometre.rar.html
Sema


KOD
#include <16F877A.h>
#device adc=16         
#fuses XT,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOWRT,NOPROTECT,NODEBUG
#use delay(clock=4M)           
                                      
#include "ds18b20.c" 
#include <stdlib.h>
#include <math.h>             
                  
#define DS     pin_B0                 
#define SH_CP  pin_B1                              
#define ST_CP  pin_B2  
           
float temp,tam,ondalik;
const int digit[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x6F};
                                 
void send(unsigned char data)
{                                  
   unsigned  char i;       
              
   for(i = 0x80; i > 0; i >>= 1)
   {                                
      if(i & data) output_high(DS);
      else output_low(DS);     
      output_high(SH_CP);           
      output_low(SH_CP);   
   }                                
}              

void main(void)
{
   setup_psp(PSP_DISABLED);                  
   setup_spi(SPI_SS_DISABLED); 
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);   
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_adc_ports(NO_ANALOGS);  
   setup_adc(ADC_OFF); 
   setup_ccp1(CCP_OFF);     
   setup_ccp2(CCP_OFF);
   setup_vref(FALSE);            
   
   set_tris_b(0x08);       
   output_b(0x00); 
   
   temp = ds1820_read(); 
   if(temp == 85) temp = 0;
          
   for(;;)             
   {  
      temp = ds1820_read();
              
      ondalik = modf(temp,&tam);
      ondalik = ondalik * 100; 
       
      if((temp >= -50.99) && (temp <= 125.00))
      {
         if((temp >= 10.00) && (temp <= 99.99))
         { 
            output_low(pin_b4);output_high(pin_b5);output_low(pin_b6); 
            send(digit[(int)ondalik % 10]);     
            send(digit[(int)ondalik / 10]);
            send(digit[(int)tam % 10]);     
            send(digit[(int)tam / 10]);
            output_high(ST_CP);        
            output_low(ST_CP);  
         }                            
         
         else if((temp > 99.99) && (temp <= 125.00))
         {            
            output_low(pin_b4);output_low(pin_b5);output_high(pin_b6); 
            send(digit[(int)ondalik / 10]);
            send(digit[(int)tam % 10]);
            send(digit[(int)(tam / 10) % 10]);
            send(digit[(int)tam / 100]);
            output_high(ST_CP);        
            output_low(ST_CP);   
         }                               
                                        
         else if((temp >= 0.00) && (temp < 10.99))                    
         {                           
            output_high(pin_b4);output_low(pin_b5);output_low(pin_b6);
            send(0x63);
            send(digit[(int)ondalik % 10]);
            send(digit[(int)ondalik / 10]);
            send(digit[(int)tam % 10]);
                                    
            output_high(ST_CP);     
            output_low(ST_CP);              
                                    
            output_high(ST_CP);      
            output_low(ST_CP);   
         }
                                      
         else if((temp >= -50.99) && (temp < 0.00))        
         {                                                        
            output_low(pin_b4);output_low(pin_b5);output_high(pin_b6); 
            ondalik = abs(ondalik);
            tam = abs(tam);   
            send(digit[(int)ondalik / 10]);
            send(digit[(int)tam % 10]);
            send(digit[(int)tam / 10]); 
            send(0x40);            
            output_high(ST_CP);     
            output_low(ST_CP);
         }                           
                   
         else                 
         {                        
            send(0x77);
            send(0x78);
            send(0x77);
            send(0x76);   
            output_low(pin_b4);output_low(pin_b5);output_low(pin_b6);  
            output_high(ST_CP);     
            output_low(ST_CP);
         }                    
      }                    
                         
      else                 
      {                        
         send(0x77);
         send(0x78);
         send(0x77);
         send(0x76);   
         output_low(pin_b4);output_low(pin_b5);output_low(pin_b6);  
         output_high(ST_CP);     
         output_low(ST_CP);
      } 
   }
}                     


Isısde ds18b20 için noktadan sonrakı ayarlamar söyle yapılıyor

1) sensore sag tıkla edit ve asagıdakı kutucu tıklayın


2)daha sonra bu bolumler var max ve mın yazan yerlerı -55 ve 128 olarak duzeltın bu sensorun datasheet değerleri
step yazan yer her bastıgınızda artacak bırın yanı bız normalde + yaz basınca 1 artıyorsa 1.15 de yapabılırım 2.15 gibi bir değer yapın kı noktadan sonrasını da gorun.
format ise sıcaklıgın uzunlugu yanı bız soyle yapcaz (3.2) sebebı noktadan once 3 noktadan sonra 2 deger gostersın dıye

Recep METE

Helal olsun sana yine yaptın yapacağını patlattın günün bombasını.Gelecekte senden iyi bir mühendis olacak,eminim.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

Alıntı yapılan: semfero - 29 Nisan 2014, 20:21:12
Helal olsun sana yine yaptın yapacağını patlattın günün bombasını.Gelecekte senden iyi bir mühendis olacak,eminim.
teşekkür ederim inşallah :)

Recep METE

Hocam yaptın bir iyilik ,isis şemasınıda yüklede yaptığın iyilik tam olsun.Teşekkürler.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

"Dosy : xzczc" seklınde lınk paylasmıstım zaten ama proteus 8

aydınD


Recep METE

Alıntı yapılan: baranekrem9 - 29 Nisan 2014, 21:20:19
"Dosy : xzczc" seklınde lınk paylasmıstım zaten ama proteus 8

@baranekrem isis şeması verdiğin linkteki dosyaların içinde yok.Yeniden yüklermisin acaba.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

Alıntı yapılan: semfero - 29 Nisan 2014, 23:18:09
@baranekrem isis şeması verdiğin linkteki dosyaların içinde yok.Yeniden yüklermisin acaba.

@semfero lınk guncellendı ben proteus 8 kullanıyorum yukledıgım wınrar ıcınde "Termometre.pdsprj" adlı dosyayı proteus 8 ıle acabılırsın

Recep METE

Arkadaşım bende proteus 7.7 yüklü, açamadım şemayı.Şimdi 8.0 bulabilirsem kurmayı deneyeceğim.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

Devre cok karmsık degıl zaten ıstersen kendın cızebılırsın 4 tane paralel baglı 74hc 595 var onlar dısplaeylere baglı tek fark nokta segmentlerın bazıları pıce baglı bıde sensor

Recep METE

Alıntı yapılan: baranekrem9 - 30 Nisan 2014, 09:02:13
Devre cok karmsık degıl zaten ıstersen kendın cızebılırsın 4 tane paralel baglı 74hc 595 var onlar dısplaeylere baglı tek fark nokta segmentlerın bazıları pıce baglı bıde sensor

Dün akşam 12.30'a kadar uğraşıp isisi kendim çizdim ancak devreyi bir türlü çalıştıramadım.Bu nedenle proteus 8 'i kurmaya çalıştım.O da olmadı.Crack olayı olmadı.Bu akşam tekrar iki çalışma üzeride duracağım.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

Islemcıne sag tıklaıp edıt dn 1mhz yazan yerı 4 yaptın mı ds18b20 de boyle kullanmak gerekıyor