
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




'****************************************************************
'* 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;
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
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.
merhabalar, böyle bir termometre arıyorum aracım için sizden nasıl temin edebiliriz ?
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?
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?
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
hocam programlamada bir sıkıntın olmalı programlamada kullandıgın fuse değerlerini yazarsan yardımcı olmaya çalışabiliriz
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.
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
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