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
Etiketler:
basic,
DS18B20,
MİKRODENETLEYİCİ,
PIC,
pıc16f877A,
proton,
termometre yazılımı,
YAZILIM
Kaydol:
Kayıt Yorumları (Atom)
ısıs ve ares çizimleride var mı
YanıtlaSil