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;
Şifre-Pass: 320volt.com
Yayım tarihi: 2009/02/12 Etiketler: car thermometer, DS18B20, microchip pic projeleri, oto termometre, PIC16F628 örnekleri, picbasic pro
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