16 Mart 2014 Pazar

DS18B20 İLE TERMOMETRE


'DS18B20 ILE TERMOMETRE

'Oread DQ, MODE, [INPUT DATA]
'OWrite DQ, MODE, [output Data]
'DQ=KULLANILCAK I/O PİNİ 
'MODE=TRANSFER MODU
'INPUT DATA=GİRİŞ VERİSİ,GELEN VERİNİN KAYDEDİLECEĞİ DEĞİŞKEN
'output DATA=ÇIKIŞ VERİSİ


'MODE
'0=RESET YOK.BYTE MODU 
'1=VERİDEN ÖNCE RESET.BYTE MODU 
'2=VERİDEN SONRA RESET.BYTE MODU
'3=VERİDEN ÖNCE VE SONRA RESET.Byte MODU 
'4=RESET YOK.BIT MODU 
'5=VERİDEN ÖNCE RESET.BIT MODU
'6=VERİDEN SONRA RESET.BIT MODU  
'7=VERİDEN ÖNCE VE SONRA RESET.BIT MODU  

'Bu işlemden sonra DS1820'den hazır olma işareti beklenir. 
'DS1820'ye kendisinin sahip olduğu 5 adet 8 bitlik ROM komutlarında birisi gönderilir. 
'Bu komutlar: 1) Read ROM [33h], 2) Match ROM [55h], 3) Search ROM [CCh], 4) Skip ROM [F0h], 5) Alarm Search [ECh]. 
'ROM komutlarının gönderilmesinin ardından, hafıza ve kontrol fonksiyon komutları DS1820'ye gönderilerek işlem tamamlanır.

'DS18B20 Fonksiyon Komutları
'1. Convert T (0×44) 
'2. Write ScratchPad (0x4E) 
'3. Read ScratchPad (0xBE) 
'4. Copy ScratchPad (0×48) 
'5. Recall E2 (0xB8)
'6. Read Power Supply (0xB4) 

'Haberleşme işlemleri, DS1820'ye gönderilen bir RESET darbesi ile başlar. 
'Bu işlemden sonra DS1820'den hazır olma işareti beklenir.
'DS1820'ye kendisinin sahip olduğu 5 adet 8 bitlik ROM komutlarında birisi gönderilir. 
'Bu aşamada match ROM(0×55) komutu kullanılarak cihaz seri no okunur hatta birden fazla cihaz varsa tanımlama işi gerçekleştirilir. 
'ROM komutu gönderilmeyecek ise skip rom(0xCC) komutu gönderilerek bu ikinci aşama geçilir. 
'DS18B20 Fonksiyon kodlarından biri gönderilerek yapılacak işlem ne ise o yapılır. 
'Sıcaklık verisinin okunması çevrim başlatılarak convert t (0×44) komutu göndererek sıcaklık verisini okunur.

' $FE, 1    = ekranı sil
' $FE, 2    = kursoru en sola konumlandır 
' $FE, $0C  = kursoru söndürür
' $FE, $0E  = kursorun alt çizgisi açılır 
' $FE, $0F  = kursoru flash yapar 
' $FE, $10  = kursoru bir karakter sola taşır 
' $FE, $14  = kursoru bir karakter sağa taşır  
' $FE, $C0  = kursoru alt satırın başına taşır 
' $FE, $94  = kursoru varsa 3. satırın başına taşır
' $FE, $D4  = kursoru varsa 4. satırın başına taşır

Device=16F877A
XTAL = 20

TRISA=00000          'PORTA'nin tüm portları çıkış
ADCON1=7                'ADC PORTLARI DIJITAL
TRISB=000000         'PORTB'nin tüm portları çıkış
TRISC=000000         'PORTC'nin tüm portları çıkış
TRISD=000000    'PORTD'nin D0 biti giriş
TRISE=000100         'PORTE'nin tüm portları çıkış

Declare LCD_DTPIN PORTB.0       'DATA girişi PORTB_nin B0 ucundan başlayacak
Declare LCD_ENPIN PORTB.5          'LCD_nin ENable ucu
Declare LCD_RSPIN PORTB.4       'LCD_nin Register Select ucu
Declare LCD_INTERFACE 4           'LCD veri yolu 4 bit olacak
Declare LCD_LINES 2               'LCD 2 satırdan oluşuyor
Cls                               'Ekranı temizler ve 30 ms gecikme sağlar

Dim TEMP  As Word '16 bitlik işaretsiz sicakligi tutan degisken.Değeri 0-65535
Dim TEMP2 As Word '16 bitlik işaretsiz sicakligi tutan degisken.Değeri 0-65535
Dim C     As Byte '8 bitlik işaretsiz genel amacli degisken.Değeri 0-255 olabilir.
Dim VRG   As Word '16 bitlik işaretsiz genel amacli degisken.Değeri 0-65535
Dim LED As PORTD.0
Dim say As Word

Symbol DQ = PORTE.2 'iletisimin yapilacagi port

PORTA=0 :PORTB=0:PORTC=0:PORTD=0:PORTE=0'PORTLARI sıfırla (temizle)
BASLA:
    OWrite DQ, 1, [$CC, $44]                '1=VERİDEN ÖNCE RESET.BYTE MODU
                                            '$CC= 64 BITLIK ID OLMADAN SENSORU ISARET EDER. TEK CİHAZ DENETLENİR.
                                            '$44=SICAKLIĞI ÇEVİR
    Repeat
    DelayMS 25                              ' islem bitene kadar bekleniyor
    ORead DQ, 4, [C]                        ' islem suresince porte.2=0 oluyor
    Until C <> 0                            ' islem tamam
    OWrite DQ, 1, [$CC, $BE]                'sicaklik degerini RAM dan okumasi icin komut gönderiyor
    ORead DQ, 2,[TEMP.LowByte,TEMP.HighByte]'sicaklik degeri sensörden okunuyor

    'ORNEK = 5 derece = 0000 0101 HEX = 0x50  DECIMAL=80
 
    If  TEMP=0 Then     'sicaklik sifir  ise
    Print $FE, 2        
    Print $FE, $0C,"    SICAKLIK    "
    Print $FE, $C0,"     0.0 C      "
    DelayMS 10
    GoTo BASLA
    EndIf

    If  TEMP.15=1 Then   'sıcaklk sıfırın altında ise -10,5 DERECE ÖRNEK  1111 1111 0101 1000 = FF58 =65368
    TEMP2=(65537-TEMP)/16  '(65535-65368)/16= 10 TAM KISIM
    VRG=TEMP2*16   ' 10*16=160
    VRG=((65537-TEMP -VRG)*10)/16  '((65537-65368 -160)*10)/16 =5
    Print $FE, 2
    Print $FE,$0C,"    SICAKLIK  -  "  
    Print $FE,$C0,"-",Dec TEMP2,".",Dec VRG," C      "
    DelayMS 10
    EndIf
    GoTo BASLA
 
 
    If  TEMP.15=1 Then   'sıcaklk sıfırın altında ise -10,5 DERECE ÖRNEK  1111 1111 0101 1000 = FF58 =65368
    If say<65291 Then
    TEMP2=(65537-TEMP)/16  '(65535-65368)/16= 10 TAM KISIM
    VRG=TEMP2*16   ' 10*16=160
    VRG=((65537-TEMP -VRG)*10)/16  '((65537-65368 -160)*10)/16 =5
    Print $FE, 2
    Print $FE,$0C,"sıcaklık alarm"  
    Print $FE,$C0,"-",Dec TEMP2,".",Dec VRG," C      "
    DelayMS 10
    LED=1
    Else
    LED=0
    EndIf
    EndIf
    GoTo BASLA

 
 
 
    VRG=(TEMP/16)*16  'sıcaklık sıfırın üstünde 24,6 DERECE ÖRNEK  0000 0001 1000 1100 = 018A =394   (394/16)*16=384
    VRG=((TEMP - VRG)*10)/16 ' ((394-384)*10)/16=6
    Print $FE, 2
    Print $FE,$0C,"    SICAKLIK  +  "
    Print $FE,$C0,Dec TEMP/16,".",Dec VRG," C      "
    DelayMS 50
    GoTo BASLA
 
End

1 yorum: