DS1820 ve ısı ölçümü

Başlatan oyhan, 04 Aralık 2004, 00:26:41

oyhan

Selam
2 Tane Ds1820 kullanır isem bu kodu iki ayrı değişken ve port ilemi tasarlamalıyım. Yoksa daha pratik yani aynı bas üzerinde veriyi alabilirmiyim. Yani ikinci bir port kullanmadan nasıl yaparım bunu..
BİRLİKTEN KUVVET DOĞAR:

ete

Selam,

2 adet DS1820 aynı port üzerinden okumanın tek yolu analog swich ile anahtarlamaktır. Bunun için enaz 1 adet daha porta ihtiyacın var. Şayet daha fazla sensörü aynı porttan okuma gibi ihtiyacın olsa idi bu yaptığın doğru olurdu ama zatane bir pin daha kullanarak işini halledersin.
Bana göre ilave bir pin kullan olsun bitsin.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

oyhan

Teşekkür ederim
Ben belki daha hızlı ve memoryden tasarruf sağlarım diye düşünmüş idim. Port sıkıntısı aslında yok. Optimizasyon için olurmu diye merak ettim doğrusu. Dediğini gibi yapacağım. Bunun için ve lcd ye karak ter ilave etmer ile ilgili yaznınz için teşekkürler.
Bir de şunu sormak istiyorum. Lcd de decimal 128 e kadar boş bir alan var bunun 8 tanesini Lcd ye yeni karak ter tanımlamasında kullandık.Bazıları komut acaba diğer alanların ne tür görevleri var bu konuyla ilgili bir fikriniz varmı?
En iyi dileklerimle...
BİRLİKTEN KUVVET DOĞAR:

baba

1 wire iletişim kuralını (protocol) biraz incelerseniz arkadaşlar,veriyolu (bus) üzerinde birden fazla (tam emin değilim ama) belki sınırsız sayıda 1wire aygıt (device) kullanabilirsiniz.Bu iletişim kuralının (protocol) en güzel özelliklerinden biri de CRC şifreleme (coding) yöntemi ile her aygıtın (device) eşsiz,benzersiz  (unique) bir kimlik numarasına sahip olarak üretilmesidir.
Bunu sağlamak için aygıtların CRC şifreleri önceden okunur ve veriyolunda komutlar çalıştırılırken başlangıç yordamından (routine) sonra

READ ROM COMMAND ($33) çalıştırılır ve 64 bit uzunluğundaki;
1 bayt Family code (Aile şifresi)
6 bayt seri numarası
1 bayt CRC şifresi alınarak
yoldaki her aygıtın CRC şifresi elde edilir.
Bunlar için kısa bir izlem (program) yazıp LCD de gösterip not alabilirsiniz.

Bundan sonra
Ana izleminizde (programınızda)
MATCH ROM COMMAND ($55) ile daha önceden elde edilen CRC şifre (code) gönderilerek yalnızca o kimliğe sahip aygıtın veriyoluna bağlanması sağlanır ve sonra sıradaki ve diğerleri....
ÖĞRENDİKÇE    CAHİLLİĞİM       ARTIYOR.

ete

@Baba,

Mesajınızı okuyunca hata yaptığımı anlıyorum. Dediğiniz gibi olabilir. Daha önce DS serisinden bir alet kullanmadım. Ben normal sensör gibi düşünmüştüm. Datasheet elimde yok arayıp değerlendireceğim.


@oyhan,

Lcd lerle daha önceden uğraşmış ve karekter hafızasında yalnızca 8 karekterlik yer olduğunu öğrenmiş idim. Bahsini ettiğiniz 128 e kadar boş alan olayını bilmiyorum. İnceleyebilirsem ve bir şey çıkarsa buraya koyarım.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

oyhan

Selam
Arkadaşlar burda birden fazla ds 1820 kullanılacağı zaman ne tür işlemler yapmanız gerektiğini burda bulabilirsiniz. 1 nci bölümde  onewire deviceların 64 bitlik ID lerini okumak ve 2 nci bölümde de okunan bu ID ler ile aynı hat üzerindeki ds1820 lerden bilgi almayı görebilirisiniz. Uyguladım problemsiz çalışıyor. Ayrıca mesafe arttırımı isteyen arkadaşlar dallas APPNote 132 incelerse yaklaşık 100m gibi mesafeye standart telefon kablosu ile bile çıkabilir. Protonun forumundan alıntı bir tecrübe. Faydalı olması dileği ile...

1. Reads the device number, family code and CRC and displays on LCD.

DEVICE 16F84
XTAL 4
WATCHDOG = Off
SYMBOL DQ=Portb.1 'Place the DS1820 on bit 1 of PORTA
DIM ID1 AS BYTE
DIM ID2 AS BYTE
DIM ID3 AS BYTE
DIM ID4 AS BYTE
DIM ID5 AS BYTE
DIM ID6 AS BYTE
DIM ID7 AS BYTE
DIM ID8 AS BYTE

CLS

Again: OWRITE DQ, 1,[$33] 

OREAD DQ,0,[ID1,ID2,ID3,ID4,ID5,ID6,ID7,ID8] 
Print at 1,1,"Family code= ",HEX ID1
Print at 2,1,HEX2 ID2, HEX2 ID3,HEX2 ID4,HEX2 ID5,HEX2 ID6,HEX2 ID7
PRINT " CRC ", HEX2 ID8
GOTO Again


2. Reads and displays temperature of two DS1820's whose device numbers are hard coded into the program.

DEVICE 16F84
XTAL 4
WATCHDOG = Off
SYMBOL DQ=Portb.1 'Place the DS1820 on bit 1 of PORTA
DIM Temp AS WORD 'Holds the temperature value
DIM C AS WORD 'Holds couns remaining value
DIM CPerD AS BYTE 'Holds conts per degree C value
' ** Define LCD Constants **
Symbol Cmd 254 ' Control Byte
Symbol Cgram 64+32 ' Point to Cgram+32 within LCD

CLS

' Build the degrees symbol in the LCD's character ram as character four
' Output the bit patterns to the LCD's CGRAM 
Print Cmd,CGRAM,%00000110,%00001001,%00001001,%00000110, 0,0,0,0

Again: OWRITE DQ, 1,[$55,$10,$CD,$4C,$44,$00,$08,$00,$7E,$44] 'Send calculate temperature command
REPEAT
DELAYMS 25 'Wait until conversion is compleate
OREAD DQ,4,[C] 'Keep reading low puses until
UNTIL C<>0 'the DS1820 is finished
OWRITE DQ,1,[$55,$10,$CD,$4C,$44,$00,$08,$00,$7E,$BE] 'Send read scratcpad command
OREAD DQ,2,[Temp.LOWBYTE,Temp.HIGHBYTE,C,C,C,C,C,CPerD]
'Calculate the temperature in degree Centigrade
Temp=(((Temp>>1)*100)-25)+(((CPerD-C)*100)/CPerD)
Print at 1,1,"Hiti 1 " ' Display the temperature
PRINT AT 1,8,DEC Temp/100,".",DEC2 Temp,".",AT 1,13,4,"C"

OWRITE DQ, 1,[$55,$10,$EA,$49,$44,$00,$08,$00,$9F,$44] 'Send calculate temperature command
REPEAT
DELAYMS 25 'Wait until conversion is compleate
OREAD DQ,4,[C] 'Keep reading low puses until
UNTIL C<>0 'the DS1820 is finished
OWRITE DQ,1,[$55,$10,$EA,$49,$44,$00,$08,$00,$9F,$BE] 'Send read scratcpad command
OREAD DQ,2,[Temp.LOWBYTE,Temp.HIGHBYTE,C,C,C,C,C,CPerD]
'Calculate the temperature in degree Centigrade
Temp=(((Temp>>1)*100)-25)+(((CPerD-C)*100)/CPerD)
Print at 2,1,"Hiti 2 " ' Display the temperature
PRINT AT 2,8,DEC Temp/100,".",DEC2 Temp,".",AT 2,13,4,"C"

GOTO Again
BİRLİKTEN KUVVET DOĞAR: