ds18b20 ID no ve rom kodu

Başlatan transistor, 27 Mayıs 2018, 04:14:06

transistor

Herkese merhabalar, hayırlı sahurlar. DS18b20 kullanarak tek pin üzerinden 5 adet sensör okumak istiyorum. Buna başta iki sensör ile deneme yapmaya çalıştım. Ancak sensörün biri okunuyor ikinci sensörü okuyamadım. Acaba diyorum kodlarda yazan rom kodunu isis de ki ds18b20 ye de eklemem mi gerekiyor? Öyle ise, rom kodunu, ID numarasına çeviremedim nasıl olur?

Bu işlem nasıl yapılır? Birde aldığım sensörün rom kodunu nasıl öğreneceğim. Öğrendikten sonra kodlarıma eklerim. Maksadım öğrenmek bu olayı yoksa kolaylık açısından 5 adet pine 5 adet sensör bağlar geçerdim ???.

Kodlarım ve şemam:


PORTA=0:PORTB=0
TRISA=0     
TRISB=%00000001
'-----------------------------------------------------------------
@ DEVICE pic16F628A                      'işlemci 16F628                               
@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılmıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'-----------------------------------------------------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG    PORTB   'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT    2       'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı  ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
CMCON=7   
DQ           VAR PORTB.0
TEMP1        VAR WORD
TEMP2        VAR WORD
FLOAT1       VAR WORD
FLOAT2       VAR WORD 
ISI1L        VAR byte
ISI1H        VAR BYTE
ISI2L        VAR byte 
ISI2H        VAR BYTE
DURUM var bit   
DERECE       CON 223       

CLEAR
PAUSE 300
LCDOUT $FE,1

BASLA:

OWOUT DQ, 1, [$55,$10,$17,$C0,$24,$01,$08,$00,$A4,$44] ; $55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$44
DURUM=0
WHILE DURUM!=1
OWIN DQ,0,[DURUM]
WEND
OWOUT DQ, 1, [$55,$10,$17,$C0,$24,$01,$08,$00,$A4,$BE]
OWIN DQ, 0, [Temp1.LOWBYTE,Temp1.HIGHBYTE]             

FLOAT1 = (TEMP1*10)/16       
ISI1H=FLOAT1/10
ISI1L=FLOAT1//10

OWOUT DQ, 1, [$55,$28,$30,$C5,$B8,$00,$00,$00,$8E,$44]
DURUM=0
WHILE DURUM!=1
OWIN DQ,0,[DURUM]
WEND
OWOUT DQ, 1, [$55,$28,$30,$C5,$B8,$00,$00,$00,$8E,$BE]
OWIN DQ, 0, [Temp2.LOWBYTE,Temp2.HIGHBYTE]             

FLOAT2 = (TEMP2*10)/16       
ISI2H=FLOAT2/10
ISI2L=FLOAT2//10

LCDOUT $FE,$80,"ISI1=",DEC2 ISI1H,",",DEC1 ISI1L,DERECE,"C"
LCDOUT $FE,$C0,"ISI2=",DEC2 ISI2H,",",DEC1 ISI2L,DERECE,"C"

GOTO BASLA
END





karacan451

Her ds18b20 sensörü kimlik bilgisi üretici firma kendisi kayıt yapıyor. Aşağıdaki datasheet bakarak sensörün kimlik bilgisini nasıl öğreneceği anlatmaktadır. Hayırlı günler....


https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

ete

Her bir sensörü ROM kodu var ancak öncelikle onları teker teker bağlayarak rom kodlarını öğrenecek ve ardından hepsini aynı hatta bağlayarak rom koduna göre işlem yaptıracaksın.Ete

onurinci

bu iki devrede ID okuyabiliyor,bir incele istersen,Isis'te sensorların üstüne tıklayarak ID'lerini değiştirebilirsin..

transistor

Teşekkür ederim,

$55,$28,$6E,$D7,$B8,$00,$00,$00,$4C,$44

Mesela burada $55 ve $44 ve $BE yukarıda $28 ürünün aile kodu mu ve CRC?
CRC nedemek?
Checksum ne demek?



transistor

Mesela isis de dsnin özelliklerine baktığımda rom serial number b8c530 diyor. Okuma yaptığım sensörden rom kodu $28,$30,$C5,$B8,$00,$00,$00,$8E bu koda nasıl karşılık geliyor bu çevrimi anlamadım ben.

Örnek:

$55,$28,$40,$C5,$B8,$00,$00,$00,$16,$44
$55,$28,$40,$C5,$B8,$00,$00,$00,$16,$BE



doğru mu?

transistor

Herkese teşekkür ederim hepsini çözdüm :D

ete

ROM kodu 64 bit yani 8 adet byte bilgiden oluşuyor.İlk byte (en düşük değerlikli byte) $28 olarak belirlenmiş Fabrika Aile Kodu yani tek kablo sensör ailesini gösteriyor, sonra gelen 6 adet byte sensörün fabrika seri kodu , en yüksek değerlikli olan son byte ise CRC değeri oluyor.  CRC denilen şey bir nevi önünde yer alan bytların bir sağlamasıdır. Değişik hesaplanma şekilleri var. EN iyisi sen buna kafanı takma ne olduğunu bil yeter.Yada basitçe şöyle diyeyim toplamda 8 byte var ve bunun 7 byte lık kısmı ROM koda ait. Bunları sırası ile topla ama toplamayı 8 bit yap. İki byte toplanınca değeri 8 biti aşarsa aşan toplamdan 256 çıkartılır ve kalan sayı toplam olarak alınır.Örnek vereyim 254 + 20 + 10= 284 yapar. Maksimum 8 bitlik sayı 255 olduğundan bunun bir fazlası demek 8 bitlikten çıktın demektir. Bu çıkan miktar o sayıdan düşülürse 284-256=28 yeni sayı 28 olur. İşte bu mantık ile bütün sayıları toplarsan sonunda elinde 8 bitlik bir sayı oluşur işte bunu CRC gibi düşünebilirsin. Aynı hesap mantığını sende bilirsen sonuçta aldığın 8 adet sayının 7 tanesi üzerinden bu hesaplamayı yapar ve 8 inci sayı ila aynı sonucu bulursan aldığın bilgiler doğrudur dersin aksi halde alışta hata oluştu diyebilirsin.Senin verdiğin ROM kodu sıralamasında rakamların yeri ters olmuş yada okuma sırasına göre vermişsin. Sende en düşük byte en solda yer alıyor. Gerçek diziliş bu sayı sağ başta yer almalı. Ancak sayıların dizilişlerininde bir anlamı yok yeterki kimin ne olduğunu bil yeterli.Sonuçta 8 byte lık dizinin en baştakini atlayıp sonradan gelen 6 byte'ı rom kodu olarak değerlendirmen gerekir.
Ete

transistor

Çok teşekkür ederim anladım şimdi hepsini, sağolun tekrar herşey için.

Powered by EzPortal