Ynt: ds18s20 uygulama örnekleri

Başlatan hdalcı, 07 Mayıs 2013, 12:22:58

hdalcı

selam arkadaşlar uygun başlık bulamadım konu açtım
projeme ısı algılama ilave etmem istiyorum
ama yeterli bilgim yok bi türlü çalıştıramadım
kodları alıntı yaptım uydurmaya uğraştım
ds18s20 porta.0 yada 1 de olmalı diğer pinler dolu
programın kalanı if elseler le düz akıyor
yardımcı olurmusunuz.
mantığını öğrenebilirsem ds1820 ile değişik mikroçipler kullanarak uygulamaları buraya eklemek istiyorum
lazım olan incelesin

kodlar bunlar

Device = 18F4685
    Xtal 20 
    Config_Start
  OSC = HS	
  FCMEN = OFF	
  IESO = OFF                        
  PWRT = On	
  BOREN = OFF	
  BORV = 0
  WDT = OFF
  WDTPS = 128	
  PBADEN = OFF	
  LPT1OSC = OFF	
  MCLRE = OFF                 
  STVREN = OFF
  LVP = OFF
  BBSIZ = 1024
  XINST = OFF	
  Debug = OFF	
Config_End


;******************* LCD ************************************ 
         LCD_ENPin PORTD.3
         LCD_RSPin PORTD.2
         LCD_Interface	4
 	     LCD_Lines 4
	     LCD_DTPin PORTD.4
   	     LCD_Type ALPHA  
         All_Digital = TRUE
       ;  portb=
      ;   trisa=
 
Symbol DQ = PORTA.0 'DS18s20 burada
 
Dim Sign As Byte
Dim Cnt As Byte
Dim Count_Per_Deg As Byte
Dim Temp As Word
Dim Temp_Dec As Byte
 
DelayMS 150 ' ds1820 ısı bekle
 
Cls
 
'************** derece işareti oluştur*********************
Print $FE,$40,$06,$09,$09,$06,$00,$00,$00,$00 
 
MENU1:
 
'**************sıcaklık hesaplama komutu***********************
OWrite DQ, 1,[$55,$10,$31,$C5,$C8,$00,$00,$00,$F4,$44] 
Repeat
DelayMS 25 
ORead DQ,4,[Cnt]  'kadar oku
Until Cnt <> 0 ' DS1820 bitir
 
'*********************okuma komutu gönder******************************
OWrite DQ,1,[$55,$10,$31,$C5,$C8,$00,$00,$00,$F4,$BE] 

 
ORead DQ,2,[Temp.LowByte,Temp.HighByte,Cnt,Cnt,Cnt,Cnt,Cnt,Count_Per_Deg]
Temp_Dec = (6.25 * Cnt) 
If Temp.8=1 Then
 Temp=(Temp.LowByte ^ $FF) >> 1 
 If Cnt = 0 Then Temp = Temp + 1 
 Sign = "-" 
Else
 Temp=(Temp >> 1) 
 Sign = "+" 
 Temp_Dec = 100 - Temp_Dec 
EndIf
 
Print At 2,1, Sign, Dec Temp, ".", Dec Dig Temp_Dec, 1, 0,"C "
 
 
GoTo MENU1
End


resim yada dosya nasıl eklenir

mesaj birleştirme:: 07 Mayıs 2013, 12:30:44


dosya yükleyemedim

ECHO

CCS C ile yaparsan zaten hazır kütüphanesi var senin ekliceğin tekşey

#include <ds18b20.c>
float temp;

void ds_oku()
{
temp=ds1820_read();
temp/=8;
}

okuduğu değeri 8 bitde işler ve 0-255 arası değer alırsın

hdalcı

teşekkürler echo
ccs kullanıcılana faydası olacağına inanıyorum
bende proton için araştırma yapıyorum helpte var ama türkçeyi zor anlıyoruz
OWRITE
OREAD

hdalcı

Device = 18F4685
    Xtal 20 
    Config_Start
  OSC = HS	
  FCMEN = OFF	
  IESO = OFF                        
  PWRT = On	
  BOREN = OFF	
  BORV = 0
  WDT = OFF
  WDTPS = 128	
  PBADEN = OFF	
  LPT1OSC = OFF	
  MCLRE = OFF                 
  STVREN = OFF
  LVP = OFF
  BBSIZ = 1024
  XINST = OFF	
  Debug = OFF	
  CP0 = On
  CP1 = On	
  CP2 = On	
  CP3 = On
  CP4 = On
  CP5 = On	
  CPB = On	
  CPD = On	
  WRT0 = OFF	
  WRT1 = OFF	
  WRT2 = OFF	
  WRT3 = OFF	
  WRT4 = OFF	
  WRT5 = OFF	
  WRTC = OFF	
  WRTB = OFF
  WRTD = OFF	
  EBTR0 = OFF
  EBTR1 = OFF
  EBTR2 = OFF	
  EBTR3 = OFF	
  EBTR4 = OFF	
  EBTR5 = OFF	
  EBTRB = OFF
Config_End
 Symbol DQ = PORTA.0
 Dim TEMP As Word
 Dim C As Byte
 Dim CP As Byte
 Cls
 ;******************* LCD ************************************ 
         LCD_ENPin PORTD.3
         LCD_RSPin PORTD.2
         LCD_Interface	4
 	     LCD_Lines 4
	     LCD_DTPin PORTD.4
   	     LCD_Type ALPHA  
         All_Digital = TRUE
         
        MENU1:
        OWrite DQ , 1, [$CC, $44] 
        Repeat
        DelayMS 25
        ORead DQ ,4 ,[C]
        Until C <> 0
        OWrite DQ, 1, [$CC, $BE]
        ORead DQ, 2, [TEMP.LowByte,TEMP.HighByte, C, C, C, C, C, CP]
        Print At 1,1,Dec3 TEMP,"  ",At 1,8,"C"
        GoTo MENU1
        End
         

bu şekilde çalışıyor ama lcd ye 2 katını yazıyor
neden olabilir bilen varmı
3 gündür gece gündüz karıştı birbirine

Mr.Java


ahmetbudak

 kodunuzda temp=temp/2 yi eklersiniz işlem tamam olur





MENU1:
        OWrite DQ , 1, [$CC, $44]
        Repeat
        DelayMS 25
        ORead DQ ,4 ,[C]
        Until C <> 0
        OWrite DQ, 1, [$CC, $BE]
        ORead DQ, 2, [TEMP.LowByte,TEMP.HighByte, C, C, C, C, C, CP]
        TEMP=TEMP/2
        Print At 1,1,Dec3 TEMP,"  ",At 1,8,"C"
        GoTo MENU1
        End

hdalcı

#6
teşekkürederim ahmet bey
temp=2/temp denemiştim mantığını anladım şimdi
evet doğru çalışıyor
:)
0 altına düşünce sonuç yanlış çıkıyor çaresi varmı acaba
bana bu şekli yetiyor ama
farklı mikroçiplerle hazırlayıp burada paylaşayım diyorum
beni 3 gün debelendirdi
başkalarıda faydalansın isterim
 


        18f4685 derece son hali
'****************************************************************
'*  Name    : DS18S20 & 18f4685  DERECE                         *
'*  Author  : hdalci                                            *
'*  Notice  : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 7.5.2013                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

Device = 18F4685
    Xtal 20 
    Config_Start
  OSC = HS	
  FCMEN = OFF	
  IESO = OFF                        
  PWRT = On	
  BOREN = OFF	
  BORV = 0
  WDT = OFF
  WDTPS = 128	
  PBADEN = OFF	
  LPT1OSC = OFF	
  MCLRE = OFF                 
  STVREN = OFF
  LVP = OFF
  BBSIZ = 1024
  XINST = OFF	
  Debug = OFF	
  CP0 = On
  CP1 = On	
  CP2 = On	
  CP3 = On
  CP4 = On
  CP5 = On	
  CPB = On	
  CPD = On	
  WRT0 = OFF	
  WRT1 = OFF	
  WRT2 = OFF	
  WRT3 = OFF	
  WRT4 = OFF	
  WRT5 = OFF	
  WRTC = OFF	
  WRTB = OFF
  WRTD = OFF	
  EBTR0 = OFF
  EBTR1 = OFF
  EBTR2 = OFF	
  EBTR3 = OFF	
  EBTR4 = OFF	
  EBTR5 = OFF	
  EBTRB = OFF
Config_End
;************************************************

         Symbol DQ = PORTA.0
         Dim TEMP As Word
         Dim C As Byte
         Dim CP As Byte
         Dim son As Word
   
;******************* LCD ************************************ 
         LCD_ENPin PORTD.3
         LCD_RSPin PORTD.2
         LCD_Interface	4
 	     LCD_Lines 4
	     LCD_DTPin PORTD.4
   	     LCD_Type ALPHA  
   	     
   	     
        All_Digital = TRUE
        
        Cls
;***********************************************************         
        MENU1:
        OWrite DQ , 1, [$CC, $44] 
        Repeat
        DelayMS 50
        ORead DQ ,4 ,[C]
        Until C < > 0
        OWrite DQ, 1, [$CC, $BE]
        ORead DQ, 2, [TEMP.LowByte,TEMP.HighByte, C, C, C, C, C, CP]
        TEMP=TEMP/2
        Print At 1,1,Dec3 TEMP,"  ",At 1,8,"C"
        GoTo MENU1
        End


teşekkürederim Fkarizmatik
evet bilgiye ihtiyacım var

ahmetbudak

'****************************************************************
'*  Name    : DS18S20 & 18f4685  DERECE                         *
'*  Author  : hdalci                                            *
'*  Notice  : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 7.5.2013                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

Device = 18F4685
    Xtal 20
    Config_Start
  OSC = HS   
  FCMEN = OFF   
  IESO = OFF                       
  PWRT = On   
  BOREN = OFF   
  BORV = 0
  WDT = OFF
  WDTPS = 128   
  PBADEN = OFF   
  LPT1OSC = OFF   
  MCLRE = OFF                 
  STVREN = OFF
  LVP = OFF
  BBSIZ = 1024
  XINST = OFF   
  Debug = OFF   
  CP0 = On
  CP1 = On   
  CP2 = On   
  CP3 = On
  CP4 = On
  CP5 = On   
  CPB = On   
  CPD = On   
  WRT0 = OFF   
  WRT1 = OFF   
  WRT2 = OFF   
  WRT3 = OFF   
  WRT4 = OFF   
  WRT5 = OFF   
  WRTC = OFF   
  WRTB = OFF
  WRTD = OFF   
  EBTR0 = OFF
  EBTR1 = OFF
  EBTR2 = OFF   
  EBTR3 = OFF   
  EBTR4 = OFF   
  EBTR5 = OFF   
  EBTRB = OFF
Config_End
;************************************************

         Symbol DQ = PORTA.0
         
         Dim TEMP As Word
         Dim C As Byte
         Dim CP As Byte
         Dim son As Word
         Symbol ARTI = "+"
         Symbol EKSI = "-"
       Symbol SIIRF = " "
;******************* LCD ************************************
         LCD_ENPin PORTD.3
         LCD_RSPin PORTD.2
         LCD_Interface   4
        LCD_Lines 4
         LCD_DTPin PORTD.4
           LCD_Type ALPHA 
           
           
        All_Digital = TRUE
       
        Cls
;***********************************************************         
        MENU1:
        OWrite DQ, 1, [$CC, $44]   
       Repeat
       DelayMS 20     
        ORead DQ, 4, [C]     
       Until C <> 0   
        OWrite DQ, 1, [$CC, $BE] 
        ORead DQ, 2,[TEMP.LowByte,TEMP.HighByte, C, C, C, C, C, CPerD]
               

        '***ISARET KISMI "-" VE "+"***

        If TEMP=0 Then ISARET = SIFIR
        If TEMP>0 Then ISARET = ARTI
        If TEMP>500 Then  '***EGER DEGER EKSI ISE***
       TEMP=65536-TEMP
        ISARET = EKSI
        EndIf
        TEMP=(TEMP/2)
        Print At 1,1,ISARET,Dec3 TEMP,"  ",At 1,8,"C"
        GoTo MENU1
        End

hdalcı

#8
ahmet bey ellerine sağlık teşekkür ederim


               evet arkadaşlar ahmet bey sayesinde hiçbir forumda net  bulunmayan derece programı 
Device = 18F4685
    Xtal 20
    Config_Start
  OSC = HS   
  FCMEN = OFF   
  IESO = OFF                       
  PWRT = On   
  BOREN = OFF   
  BORV = 0
  WDT = OFF
  WDTPS = 128   
  PBADEN = OFF   
  LPT1OSC = OFF   
  MCLRE = OFF                 
  STVREN = OFF
  LVP = OFF
  BBSIZ = 1024
  XINST = OFF   
  Debug = OFF   
Config_End
;************************************************

         Symbol DQ = PORTA.0
          Dim isaret As Byte
         Dim TEMP As Word
         Dim C As Byte
         Dim CP As Byte
         Dim son As Word
         Symbol ARTI = "+"
         Symbol EKSI = "-"
         Symbol SIFIR = " "
       ;  symbol ISARET =" "
;******************* LCD ************************************
         LCD_ENPin PORTD.3
         LCD_RSPin PORTD.2
         LCD_Interface   4
         LCD_Lines 4
         LCD_DTPin PORTD.4
           LCD_Type ALPHA 
           
           
        All_Digital = TRUE
       
        Cls
;***********************************************************         
        MENU1:
        OWrite DQ, 1, [$CC, $44]   
       Repeat
       DelayMS 20     
        ORead DQ, 4, [C]     
       Until C <> 0   
        OWrite DQ, 1, [$CC, $BE] 
        ORead DQ, 2,[TEMP.LowByte,TEMP.HighByte, C, C, C, C, C, CP]
               

        '***ISARET KISMI "-" VE "+"***
        If TEMP=0 Then isaret = SIFIR
        If TEMP>0 Then isaret = ARTI
        If TEMP>500 Then  '***EGER DEGER EKSI ISE***
       TEMP=65536-TEMP
        isaret = EKSI
        EndIf
        TEMP=(TEMP/2)
        Print At 1,1,isaret,Dec2 TEMP,0, At 1,5,"C"
        GoTo MENU1
        End

ahmetbudak

bu kodlar ve benzerleri bu forumda çokça var ve bu işe emek veren birçok arkadaş var bende tabiiki bu konuda forumumuzdan çok şeyler öğrendim öğrenmeye de devem edeceğim  ::)  size de tavsiyem forumu verimli kullanmanız ben sadece bu işten çabucak soğumamanız için kestirmeden kod verdim başarılar dilerim.. ;)

hdalcı

slm arkadaslar derece okuma işlemi 780ms civarında zaman kaybına neden oluyor
bu işlemi 100ms ye düşürebilirmiyiz
nasıl bir yol izlemeliyim yardım edrmisiniz

Maxim

datasheette gördüğüm kadarıyla
DS18S20 9bit okuma yapıyor ve 750ms den daha hızlı okuma mümkün değil gibi.

ama DS18B20 kullanırsanız onda seçenekler mevcut
9bit çözünürlük:93ms
10bit:187ms
11bit:375ms
12bit:750ms

MC_Skywalker

DS18B20  ailesinde eksi sıcaklıklar için negatif biti bulunmakta.

şuardaki konuda kullandığım okuma rutini mellabsın kendi sitesinden oalmıştım https://www.picproje.org/index.php/topic,25136.msg168821.html#msg168821  fikir vermasi açısından incelene bilir.

hdalcı

Alıntı yapılan: Maxim - 08 Mayıs 2013, 09:58:52
datasheette gördüğüm kadarıyla
DS18S20 9bit okuma yapıyor ve 750ms den daha hızlı okuma mümkün değil gibi.

ama DS18B20 kullanırsanız onda seçenekler mevcut
9bit çözünürlük:93ms
10bit:187ms
11bit:375ms
12bit:750ms
teşekkürler maxim
evet 93ms çok iyi
çözünürlük ayarlarını nasıl yapabilirim
birde şu bölümler neye göre hesaplanıyor , OWrite DQ, 1, [$CC, $BE]

Maxim

Alıntı yapılan: hdalcı - 08 Mayıs 2013, 10:32:11
teşekkürler maxim
evet 93ms çok iyi
çözünürlük ayarlarını nasıl yapabilirim
birde şu bölümler neye göre hesaplanıyor , OWrite DQ, 1, [$CC, $BE]

ben bilmiyorum
fakat forumlarda 18b20 ile ilgili yüzlerce örnek mevcut, 18b20 yazıp arama yapın
picproje.com
protonbasic.co.uk
picbasic.co.uk

birde protonun kendi sample klasörüne bakın orada örnekler olabilir