DS18B20 PIC16F628 araç içi dışı termometre picbasic

| Mayıs 25, 2023 Tarihinde güncellendi
DS18B20 PIC16F628 araç içi dışı termometre picbasic

DS18B20 PIC16F628 termometre devresi Arabanızda kullanabileceğiniz iç ve dış sıcaklığı lcd üzerinde gösteren bir devre termometre devresinin proteus isis simülasyon ares pcb ve kaynak picbasic pbp ve hex yazılımları bulunmakta

PCBway Türkiye PCB Manufacturer PCB Assembly

arac-ic-dis-termometre-picbasic-pro

araba-isis-termometre

car-tehermometer-circuit-lcd

isis-olcumu-termometre

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 19.03.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   : RB1=Enable                                        *
'*            RB2=R/W                                           *
'*            RB3=RS                                            *
'*            RB4=D4                                            *
'*            RB5=D5                                            *
'*            RB6=D6                                            *
'*            RB7=D7                                            *
'*            RA0=Sensör1                                       *
'*            RA1=Sensör2                                       *                 *
'*                                                              *
'****************************************************************

'***********Seri İletişim Dosyası***********

Include "MODEDEFS.BAS"

CMCON=7

'***********LCD Tanımlamaları***********

DEFINE LCD_DREG		PORTB	
DEFINE LCD_DBIT			4		
DEFINE LCD_EREG		PORTB	
DEFINE LCD_EBIT  		1			
DEFINE LCD_RWREG    PORTB	
DEFINE LCD_RWBIT     	2		
DEFINE LCD_RSREG	PORTB	
DEFINE LCD_RSBIT		3				
DEFINE LCD_BITS			4		
DEFINE LCD_LINES		2		

'***********Özel Karakter Tanımlamaları
LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0 'Derece İşareti
LCDOUT $FE,$48, 4, 14, 4, 4, 4, 4,14,0 'İ Harfi
LCDOUT $FE,$50, 14, 17, 16, 16,16,17,14,4 'Ç Harfi
LCDOUT $FE,$58, 14, 17, 16, 14,1, 17,14,4 'Ş Harfi

'***********Port Ayarları***********

TrisA=0
TrisB=0

PortA=0
PortB=0  

'***********Sensör Tanımlamaları***********

Comm_Pin1   VAR	PortA.0
Comm_Pin2   var PortA.1 
Busy        VAR BIT
HAM         VAR	WORD
ISI         VAR WORD
SIGN        VAR BYTE
SIGN_BITI   VAR HAM.Bit11
NEGAT_ISI   CON 1
TEMP        VAR BYTE
Float       VAR WORD

'***********LCD yi Kullanıma Hazır Hale Getir***********

LOW PORTB.2 'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.

lcdout $FE,1 
PAUSE 200   ' LCD nin kullanıma hazır hale gelebilmesi için gerekli süre
lcdout $FE,1 

LCDOUT $FE,$80,"**HOS GELDINIZ**"             	
LCDOUT $FE,$C0, "*MUSTAFA  BILKE*"
pause 2000
lcdout $FE,1  

'***********Program Başlangıcı***********

Basla:


    gosub sensoroku1
    gosub SENSOROKU2
    
Goto Basla

'***********1. Sensörü Oku***********

SENSOROKU1: 
           
           OWOUT   Comm_Pin1, 1, [$CC, $44]' ISI değerini oku
Bekle1:
           OWIN    Comm_Pin1, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle1  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin1, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin1, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla1
           RETURN
    
Hesapla1:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-"  
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10 
       GOTO GEC1   
    endif
    TEMP = 625 * (HAM+1)        ' 
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC1:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
    
    
    lcdout $FE,$80,1,2,"ER",1,": ",Sign,DEC ISI,".",DEC1 (Float),0,"C " '2. satırda ısı
    if ISI=65535 then 
        
        lcdout $FE,$80,"                "
        lcdout $FE,$80,"1. SENSORU TAKIN"
    
    endif
    
    RETURN

'***********2. Sensörü Oku***********

SENSOROKU2: 
           
           OWOUT   Comm_Pin2, 1, [$CC, $44]' ISI değerini oku
Bekle2:
           OWIN    Comm_Pin2, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle2  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin2, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin2, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla2
           RETURN
    
Hesapla2:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-"  
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10 
       GOTO GEC2   
    endif
    TEMP = 625 * (HAM+1)        ' 
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC2:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
    
     
    lcdout $FE,$C0,"DI",3,"ARI: ",Sign,DEC ISI,".",DEC1 (Float),0,"C " '2. satırda ısı
    
    if ISI=65535 then 
        
      
        lcdout $FE,$C0,"                "
        lcdout $FE,$C0,"2. SENSORU TAKIN"
    
    endif
    
    RETURN





End

SORU: Birşey sormak istiyorum.Simülasyon çok güzel fakat sensörde yazılan değer LCD ekranda 1 derece eksik gösteriyor. Bunun nedeni nedir ?Yani 60 dereceye ayarlanmış ama LCD ekranda 59.0 derece gözüküyor.60 göstermesi için ne yapılabilir ? Nasıl kalibre edilir ?

CEVAP: Şimdi Arkadaşım Dediğin Doğru Ama Ben Önüme Bir Tane Alkollü Termometre Koydum Ve Ayarlamayı Ona Göre Yapıp 1 Derece düşürdüm. Bu Gerçek Hayat İçin Geçerli. Bunu Şu Yolla Düzeltebilirsin. Programın Kaynak Kodunu İncelediğinde ISI=(ISI/1000)-1 şeklinde Bir İfadeyle Karşılaşacaksın Oradaki -1 i sil Yani ISI=(ISI/1000) Yaparsan Sorunun Çözülür.

Projeye ait proteus simülasyon ares pcb, ve picbasic pro kodlar;

ds18b20-pic16f628-arac-ici-disi-termometre-picbasic

Şifre-Pass: 320volt.com

Yayım tarihi: 2009/02/12 Etiketler: , , , , ,



10 Yorum “DS18B20 PIC16F628 araç içi dışı termometre picbasic

  1. AYKUTAYKUT

    selam paylaşmış olduğunuz devre için teşekkürler tam istedeğim bir devre malzemelerini almıştım ama DS18B20 prosedürünü bilmediğimden şaunlık ara vermiştim ama sayenizde öğrendim…

    siz bu devrede 2 sensör kullanmışsınız sormak istedeğim sensör sayısı artırılabilirmi? mesela yapmak istedğim 4sensör olsun herbir sensör ayrı odalarda olacak

    projeniz için tekrar teşekkürler

    CEVAPLA
  2. ErenEren

    Evet Aykut bey. 1-wire protokolüyle çalışan bu sensörden aynı hat üzerine yüzlerce sensör bağlayabiliyorsunuz. Hepsinin ayrı rom adresleri var. önemli olan bunları bilerek programlama yapmak.

    CEVAPLA
  3. mertmert

    merhabalar, böyle bir termometre arıyorum aracım için sizden nasıl temin edebiliriz ?

    CEVAPLA
  4. FatihFatih

    Hocam merhabalar ben bunu farklı bir amaç olarak kullanıcam araç için değil. Yalnız dosyaları indirdim kusura bakmayın biraz acemiyim sadece DS18B20 ve PIC16F628A bu parçaları anlayabildim baskı devre üzerinde bulunan R1,R2,R3,R4 dirençleri U4 nelerdir? Display ekranı elektronikciye ne söyleyip alabilirim modeli nedir? Birde devreyi kaç volt ile beslemem gerekli?

    CEVAPLA
  5. FatihFatih

    Hocam birde hex kodunda bir problem olabilir mi çalıştıramadım devreyi hex’i yazdım yalnız xtal kullanılmış hex kodunu öyle tanımladı yalnız devrede xtal göremedim bu yüzden olabilir mi?

    CEVAPLA
  6. ibrahimibrahim

    sayın arkadaşım devreni ve pogramını inceledim gayet mantıklı ares te hiç sorun olmadan çalışıyor ancak devreyi baskı devresiyle yaptım 5,5 volt ile sabit besliyorum sadece lcd üst satırında kare şeklinde karakterler görünüyor başkada birşey yok olayı çözemedim bir püf noktası varsa söylermisiniz

    CEVAPLA
  7. doktor_kadir20doktor_kadir20

    hocam programlamada bir sıkıntın olmalı programlamada kullandıgın fuse değerlerini yazarsan yardımcı olmaya çalışabiliriz

    CEVAPLA
  8. ibrahimibrahim

    fuse degerlerim şu şekilde jdm programmer kullanıyorum winpic800 ile programlıyorum osc=xt ,cp=1f00h-1ffffh ve WDTE,PWRTE,BODEN,WRT işaretli.

    gözüme takılan noktalardan biri picin 4.ayagı mclr ayagı baglı degil ve osilator kullanılmamış acaba 628 in dahili osilatorunumu kullanıyor
    ilğinize çok teşekkür ederim.

    CEVAPLA
  9. mustafamustafa

    merhaba arkadaşlar ben bu devreyi yapmak istiyorum fakat dış sıcaklık ve motor sıcaklığının olmasını istiyorum. devre çalıştığında 65 dereceye kadar ölcüyor. 18b20 ölcüm aralığı daha fazla 127 derece olması gerekiyor. ölcüm aralığını programda nasıl değiştirebiliriz? yardımlarınızı ebkliyorum

    CEVAPLA
  10. TFNTFN

    Devreyi yapıp çalıştıramayanlar (örnek : LCD’de üst satırda sadece karelerin görünmesi gibi)

    Include “MODEDEFS.BAS” satırının üzerine aşağıdaki kodları ekleyip derlerseniz devreniz çalışır. MicroCode Studio ile derlerken MPASM ile ilgili hata alırsanız View > Compile and Program Options’tan Assembler tabında “Use MPASM” kutucuğunda ki işareti kaldırıp tekrar derlemeye denerseniz hex dosyanız oluşacaktır.

    @ DEVICE pic16F628A
    @ DEVICE pic16F628A, WDT_ON
    @ DEVICE pic16F628A, PWRT_ON
    @ DEVICE pic16F628A, PROTECT_OFF
    @ DEVICE pic16F628A, MCLR_OFF
    @ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT

    CEVAPLA

Fatih için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir