18b20 ısı sensörü yardım

Başlatan veli, 02 Ocak 2017, 12:15:04

veli

merhaba arkadaşlar Mustafa Bilke arkadaşımıza ait olan bi program var dosyaları hangi siteden bulduğumu hatırlayamadım için burada sorma gereği duydum program çalıyor fakat -9 ile +59 derece arasını okuyabiliyorum ama bu sensör -55 ile +125 arasında çalışabiliyor bu aralığı nasıl görebilirim şimdiden teşekkürler

'***********Seri İletişim Dosyası***********

Include "MODEDEFS.BAS"

CMCON=7

'***********LCD Tanımlamaları***********

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT  3
DEFINE LCD_RWREG    PORTB
DEFINE LCD_RWBIT      2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

'***********Özel Karakter Tanımlamaları
LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0 'Derece İşareti
LCDOUT $FE,$48, 4, 14, 4, 4, 4, 4,14,0 'İ Harfi
LCDOUT $FE,$50, 14, 17, 16, 16,16,17,14,4 'Ç Harfi
LCDOUT $FE,$58, 14, 17, 16, 14,1, 17,14,4 'Ş Harfi

'***********Port Ayarları***********

TrisA=0
TrisB=0

PortA=0
PortB=0 

'***********Sensör Tanımlamaları***********

Comm_Pin1   VAR PortA.0
Comm_Pin2   var PortA.1
Busy        VAR BIT
HAM         VAR WORD
ISI         VAR WORD
SIGN        VAR BYTE
SIGN_BITI   VAR HAM.Bit11
NEGAT_ISI   CON 1
TEMP        VAR BYTE
Float       VAR WORD

'***********LCD yi Kullanıma Hazır Hale Getir***********

LOW PORTB.2 'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.

lcdout $FE,1
PAUSE 200   ' LCD nin kullanıma hazır hale gelebilmesi için gerekli süre
lcdout $FE,1

LCDOUT $FE,$80,"**HOS GELDINIZ**"             
LCDOUT $FE,$C0, "*MUSTAFA  BILKE*"
pause 2000
lcdout $FE,1 

'***********Program Başlangıcı***********

Basla:


    gosub sensoroku1
    gosub SENSOROKU2
   
Goto Basla

'***********1. Sensörü Oku***********

SENSOROKU1:
           
           OWOUT   Comm_Pin1, 1, [$CC, $44]' ISI değerini oku
Bekle1:
           OWIN    Comm_Pin1, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle1  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin1, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin1, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla1
           RETURN
   
Hesapla1:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC1   
    endif
    TEMP = 625 * (HAM+1)        '
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC1:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
   
   
    lcdout $FE,$80,1,2,"ER",1,": ",Sign,DEC ISI,".",DEC1 (Float),0,"C " '2. satırda ısı
    if ISI=65535 then
       
        lcdout $FE,$80,"                "
        lcdout $FE,$80,"1. SENSORU TAKIN"
   
    endif
   
    RETURN

'***********2. Sensörü Oku***********

SENSOROKU2:
           
           OWOUT   Comm_Pin2, 1, [$CC, $44]' ISI değerini oku
Bekle2:
           OWIN    Comm_Pin2, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle2  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin2, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin2, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla2
           RETURN
   
Hesapla2:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10
       GOTO GEC2   
    endif
    TEMP = 625 * (HAM+1)        '
    ISI = DIV32 10          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC2:
    FLOAT = (ISI //1000)/100
    ISI=(ISI/1000)-1
   
     
    lcdout $FE,$C0,"DI",3,"ARI: ",Sign,DEC ISI,".",DEC1 (Float),0,"C " '2. satırda ısı
   
    if ISI=65535 then
       
     
        lcdout $FE,$C0,"                "
        lcdout $FE,$C0,"2. SENSORU TAKIN"
     
    endif
   
    RETURN

End


MB_77

#1
bu mesaj tarafımdan silinmiştir.

Powered by EzPortal