DS18B20 sıcaklık sensörü ile rf termometre-YARDIM LÜTFEN!

Başlatan vlkncn, 21 Aralık 2013, 11:55:33

vlkncn

http://etepic.com/index.php/topic,62.0.html

linkteki projeyi 16F877 ile yapmaya çalıştım fakat lcd de sıcaklık sürekli olarak 0 derece gösteriyor.kodlar ve devre şeması aşağıda.
yardımcı olursanız sevinirim.

Verici:

@ DEVICE PIC16F877
@ DEVICE PIC16F877, WDT_OFF
@ DEVICE PIC16F877, PWRT_ON
@ DEVICE PIC16F877, PROTECT_OFF
@ DEVICE PIC16F877, XT_OSC
@ DEVICE PIC16F877, BOD_ON

ADCON1=7
DEFINE OSC 4
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 51  ' 1200 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
TRISA=1
TRISC=0
ISI1    VAR     BYTE       'BU PROGRAMDA VAR. 29-04-2005 DE
ISI2    VAR     BYTE 
BUSY    VAR     BIT
HAM     VAR     WORD
ISI     VAR     WORD        ' Hesaplanmış ISI değeri
SIGN_BITI   VAR HAM.11'Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI   CON 1           ' Negatif_Cold = 1
SIGN        VAR BYTE        '  ISI değeri için  +/-  işaret
ISARET      VAR BYTE
TEMP        VAR BYTE         
SYMBOL Comm_Pin=PORTA.0
BASLA:
GOSUB SENSOROKU       
gosub gonder                   
goto basla
SENSOROKU:
'           ham=$FFBF:Gosub hesapla:RETURN  'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
GOSUB   Hesapla
RETURN
gonder:
HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]'uyandirma sinyali preambl
HSEROUT ["E","T","E",ISI1,ISI2,SIGN]
return

Hesapla:                 ' Ham değerden Santigrat derece hesabı
Sign  = "+"
IF SIGN_BITI = NEGAT_ISI THEN
Sign   = "-" 
'      temp=($ffff-ham+1)*625 'bu satır alttakinin yerine kullanıldı
Temp=625*(~HAM+2)
ISI  = DIV32 1000
GOTO GEC   
endif
TEMP = 625*(HAM)        '
ISI = DIV32 1000          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
ISI2 = (ISI //10)
ISI1=ISI/10
RETURN



Alıcı:

@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC

DEFINE OSC 4
ADCON1=7

PORTA=0:TRISA=0
PORTC=0:TRISC=%10000000
PORTB=0:TRISB=0
INTCON=%11000000
DEFINE LCD_DREG PORTB    'LCD data bacaklari hangi porta bagli ?
DEFINE LCD_DBIT 4      'LCD data bacaklari hangi bitten basliyor ?
DEFINE LCD_EREG PORTB    'LCD Enable Bacagi Hangi Porta bagli ?
DEFINE LCD_EBIT 3      'LCD Enable Bacagi Hangi bite bagli ?
DEFINE LCD_RSREG PORTB    'LCD RS Bacagi Hangi Porta bagli ?
DEFINE LCD_RSBIT 2       'LCD RS bacagi Hangi Bite bagli ?
DEFINE LCD_BITS 4       'LCD 4 bit mi yoksa 8 bit olarak bagli ?
DEFINE LCD_LINES 2       'LCD Kaç satira yazabiliyor ?
DEFINE LCD_COMMANDUS 2000 'Command delay time in us
DEFINE LCD_DATAUS 50 'Data delay time in us   
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 51  ' 1200 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

ISI1    VAR     BYTE       
ISI2    VAR     BYTE 
SIGN    VAR     BYTE
TEMP    var     BYTE
I       VAR     WORD
SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit
LCDOUT $FE, $40, $06, $09, $09, $06, $00, $00, $00, $00 '
RCIE=1
PEIE=1
GIE=1
ON INTERRUPT GOTO INT
lcdout $FE,1,"LUTFEN  BEKLEYIN"
FOR I=0 TO 10200
PAUSEUS 5
NEXT
LCDOUT $FE,1
BASLA:
lcdout $FE,$C0,"SICAKLIK:",SIGN,dec ISI1,",",dec ISI2,0,"C "
GOTO BASLA
DISABLE
INT:
GIE=0
hSerIn , [WAIT("ETE"),ISI1,ISI2,SIGN] 
TEMP=RCREG
GIE=1
Resume
enable



devre şeması:




DÜZELTME: Alıcı, verici kodları ve devre şeması ektedir.

Hattuşa

slm
ustam sana yardımcı olmak isterdim ama yazılım pbp ben proton kullanıyorum, isis şemada gördüğüm kadarıyla iki işlemci arasında bağlantı yok, yani birisine verici diğerine alıcı demişsiniz, bu hattı direk bağlayarak denerseniz bence ekranda değerleri görürsünüz diye düşünüyorum.

vlkncn

a.slm
yinede sağolun.devrede temsili olarak gösterim olması için öyle yaptım.iki hattı söylediğiniz gibi birbirine bağlayarak da denedim fakat sonuç aynı.

Hattuşa

o zaman şöyle yapın, (sakın akıl veriyor diye düşünmeyin benimkisi öneri) lcd yi 1. işlemciye alın ve ısı ölçüsünü ekrana yazdırın, yani ekrandaki ısı değerinin 0 olması sensör okuma hatası mı yoksa haberleşme ile mi alakalı bir durum onu tespit edin. eğer ısıyı 1. işlemcinin ekranında görüyorsanız haberleşme hatanız var demektir yok ısıyı ekranda göremiyorsanız sensör okuma hatanız var demektir. sözün özü problemi parçalayarak çözmeye çalışın

MS_59

sadece şemaya bakarak şunu söyleyebilirim sensör DQ ucu ayrı bir 4k7 direnç ile pullup yap mclr direncinden ayır
mehmet

vlkncn

az önce deneğimizkadarıyla sanırım sensorden sıcaklığı alamıyoruz.
dediğiniz gibi farklı bir besleme ve 4.7k dirençle denedik yine cıkıs alamıyoruz

ete

Çıkış alamıyoruz derken simulasyonda mı çıkış alamıyorsunuz? yoksa devreyi yaptınızda oradanmı çıkış alamıyorsunuz?

Ete

vlkncn

simülasyonda çıkış alamıyoruz hocam lcd de sıcaklık 0 derece olarak gözüküyor.devreyi yapmadık daha

ete

Programınızda hiç sigorta ayarı yok. Aşağıdakileri programın en başına ekleyin.
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_OFF
@ DEVICE pic16f877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
@ DEVICE pic16F877, BOD_ON


Kullandığınız işlemcinin A portu default olarak Analaog dur. Siz portu digital kullanmaya çalışıyorsunuz. O halde portu anaolgdan digitale dönüştürmeniz daha doğrusu analog özelliğini iptal etmeniz gerekir. Bunun için programın başlarında bir yere,
ADCON1=7 komutunu ilave edin.
Tekrar deneyin bakalım olacakmı?

Birde unutmayın bir şey sorduğunuz zaman cvap verecek kişilerin işini kolaylaştırmanız gerekir.
Bu sorunun cevabını verecek kişi yada sonucu merak eden kişi simulasyonda sistemi çalıştırmak ister. Sen her hangi bir dosya koymamaış isen ne yapacak?, programları oradan kopyalayacak derleyecek. İsis şemasını bakarak yeniden çizecek ve devreyi çalıştıracak. Halbuki bunlar elinizde mevcut. Koy bir dosyaya ekle mesajına olsun bitsin değilmi?

Ete





vlkncn

Sigorta ayarlarını eklediğimde derleyici hata veriyor ve kodu derlemiyor(illegal opcode)
adcon1=7 komutunuda ekledim ama hala sıcaklık değeri 0 olarak gözüküyor.

kusura bakmayın ekliyorum dosyaları eke

ete

Önce oturup işlemciyi özellikleri ile öğrenin bunun için data sheet en güzel kaynaktır.
Sonra aşağıdaki linte yazılanları çok dikkatlice okuyup uygulayın.

http://etepic.com/index.php/topic,26.0.html
http://etepic.com/index.php/topic,300.0.html

Ben yinede olası kusurlarınızı söyleyeyim.
Devre şemasında Sensör data hattına pullup direnci bağlanması gerek. Ama aynı zamanda MCLR pinine de bir ayrı pullup bağlanması gerek. Nasıl olsa pullup deyip ikisini bir yere bağlamışsınız. Bu konuda size uyarıda geldi ama dikkata almamışsınız NEDEN?  Çok merak ettim neden dikkate almıyorsunuz. ?

Derleyici bir programı derlerken hangi işlemci için derleneceğinide seçmenizi ister. Ekranın yukarısında işlemci kutucuğu vardır. Orada 16F877 yi görmeniz gerekir. Dolayısıyla derlerken derleyici işlemci özelliklerini bu seçeneğe göre uygular. Orada 16F628 yazar ve siz 877 derlemesi yapmaya kalkarsanız ADCON1 özelliği 628 de olmadığı için hata verir.

Diğer bir konuda 32 bit 64 bitlik makinalar meselesidir. Derleyici 32 bitlik makinalarda sorunsuz çalışıyor. Ancak 64 bit makinalarda derleme işini mutlaka MPASM assembler kulanarak derlemeniz gerekir. MPASM kullanınca yapılması gereken bir iki mesele var ki oda yukarıda verdiğim linklerde yazıyor.

Dün akşam size mesaj yazdığımda ben programı düzeltmiş ve derlemeyide yapıp sistemi isisde çalıştırmıştım zaten.
Üstelik çalışan programları sizin verdiğiniz arızalı programlarlada değiştirmiştim. Bunu söylemedim çünki ne yapacağınızı merak ediyordum. Şimdi o programlara bakabilirsiniz artık. Yazdığınız mesajlarda verdiğiniz programlardan bahsediyorum.

Her işin bir raconu vardır derler. İşi yapacaksan usulüne uygun yapacaksın. Derme çatma işlerden hayır gelmiyor gördüğünüz gibi. Bunun için üstünkörü işler yerine işin esasına inip öğrenerek bir şeyler yapmak lazım.
Bakın orada Basic Dersleri yayınlanmış Bir kaç gününüzü alır onları açıp okumanız ve bir kaçda uygulama yapmanız. Hemen her şey orada anlatılıyor. 

Ete



vlkncn

pullup konusundaki uyarıyı gördüm ve ciddiye de aldım hatta uyarı sonucu devrede değişikliği yaparak denedim ve sonucu mesajlarda belirttim zaten.ama devrenin kayıtlı olan size verdiğim semasında tek pullup kalmış.

derleyici zaten 16f8777 konumunda duruyor derleme yapmaya çalışırken ama dediğim gibi sigorta ayarlarını eklediğimde hata alıyorum.bu işe başlarken zaten sizin verdiğiniz linklerdeki bilgileri feyz alarak başlamıştım gerek programın kurulumu gerek kullanımı olsun zaten suan modifiye etmeye çalıştığım programda sizin programınız.

yaptığım işte profesyonel oldugumu veya buna benzer bişeyi savunmadım yada hiç bir bilgim olmadan devreyi buraya koyup yardım istemedim.devreyi kendi baktıgım öğrendiğim gordugum kadarıyla kurmaya çalıştım gerek forumuzdaki dokumanlardan gerek kitaplardan yararlanarak.sonucunda yanlış bişey bulamayınca ve devre çalışmayınca son çare olarak burada yardım istedim.tamam hatalarım varmış adcon1=7 komutunu bilmiyordum sizin sayenizde öğrenmiş oldum yada pullup direncini.ama bu devreyi buraya koyduysamda sıfır bilgi ile koymamıştım.

yine de uğrastığınız zaman ayırdığınız için çok teşekkür ederim.

zeus48

Arkadaşım mrb.  İlk olarak merak ettiğim  niye 16f877   çok porta mı ihtiyacın var..  Bende sıcaklık bilgisini rf olarak açık alanda 1,5 km gönderdim.  Rf kısmı bana ait  sıcaklık hesaplama ETE hocaya ait.  Ben vericide ve alıcıda 16f628 kullandım istersen projemi paylaşırım.  Sana yardımcı olacağına inanıyorum

Not: Mesafe ve sıcaklık ölçümü tüm testlerden geçti

vlkncn

merhabalar
evet çok porta ihtiyacım olduğu için 16f8777 yi tercih ettim.suan sadece sıcaklık bilgisini okutup yazdırmam lazım ama bitirme ödevi olarak birkaç fonksiyon daha eklemem gerekiyor 2.dönemde bunun için.

paylaşabilirsen çok makbule geçer gerçekten.

zeus48

Bundan sonrası senin hayal güçüne bağlı
Not= hesaplama bölümü ete hocaya aittir

Powered by EzPortal