DS18b20 kodu lazım

Başlatan kamil_220, 10 Ocak 2009, 17:02:02

kamil_220

Acil yardım, Aşağıdaki kodu çalıştıramadım.

trisa=0
trisb=1
KOMUT   var     byte            
          I       var     byte            
          SICAKLIK     var     word 
          DQ      var     PORTB.0    ;ileti?im pini, hangisiyse burada de?i?tirin 
          DQ_DIR  var     TRISB.0 

;burada  lcd tan?mlamalar?n? yap?n, lcd'yi init edin,500ms bekleyin 

START: 
        Gosub INIT1820 
        komut = $CC :  Gosub YAZ1820 
        komut = $44 :  Gosub yaz1820 
        Pause 2000 
        Gosub init1820 
        komut = $CC :  Gosub yaz1820 
        komut = $BE :  Gosub yaz1820 
        Gosub oku1820        
        
   Lcdout $FE,2,dec(SICAKLIK >>1) ,".",dec(SICAKLIK.0 * 5)," DERECE" 

        Goto START  ;ya da her nereye ise.. 
                                
INIT1820: 
        low DQ 
        Pauseus 500 
        DQ_DIR = 1 
        Pauseus 100 
        If DQ = 1 Then 
                Lcdout $FE,2, "   SENSOR YOK!"
                Pause 500 
                Goto START 
        Endif 
        Pauseus 400 
        Return 
YAZ1820: 
        For i = 1 to 8 
                If komut.0 = 0 Then 
                        Gosub yaz0 
                Else 
                        Gosub yaz1 
                Endif 
                komut = komut + 1 
        Next i 
        Return 
YAZ0: 
        high DQ 
        Pauseus 60 
        DQ_DIR = 0 
        Return 
YAZ1: 
        high DQ 
@       NOP 
        DQ_DIR = 0 
        Pauseus 60              
        Return 
OKU1820: 
        For i = 1 to 16
                SICAKLIK  = SICAKLIK >>1
                Gosub okubit  
        Next i 
        Return 
OKUBIT: 
        SICAKLIK.15 = 1
        low DQ 
@       NOP    
        DQ_DIR = 1  
        If DQ = 0 Then 
                SICAKLIK.15 = 0
        Endif 
        Pauseus 60  
        Return 
END

tyildizak

Alıntı yapılan: "kamil_220"
;burada  lcd tan?mlamalar?n? yap?n, lcd'yi init edin,500ms bekleyin


kodun bu kısmında tarif edilenleri yapmazsan lcd'de hiçbir değer görülmemesi gerekir aslında. Şunları eklemelisin:

     DEFINE LCD_BITS	4	
      DEFINE LCD_LINES	2

      DEFINE LCD_DREG	PORTB	
      DEFINE LCD_DBIT	4	
      DEFINE LCD_EREG	PORTA	
      DEFINE LCD_EBIT	1		
      DEFINE LCD_RSREG	PORTA
      DEFINE LCD_RSBIT	0		
 
      DEFINE LCD_COMMANDUS 2000
      DEFINE LCD_DATAUS 50

      PAUSE 500

      LCDOUT $FE,1

      



ayrıca pic sensör ile hangi bacak üzerinden veri alışverişi yapıyor, örnekte portb.0, senin devrende de aynı mı?

         DQ      var     PORTB.0    ;ileti?im pini, hangisiyse burada de?i?tirin 
          DQ_DIR  var     TRISB.0

kamil_220

devreyi buraya koyamıyorum nasıl koyulacak ki... portb.0 daki dogru da trisb.0 nasl olucak:s

ipek

Ds'ye 4.7 kohm PullUp yani artı 5 volta direnç takıldımı???

Maxim

forumda ds18b20 ile ilgili bir sürü yazı var ,hiç biri bir işe yaramadımı ?


https://www.picproje.org/index.php/topic,5674&highlight=ds18b20


https://www.picproje.org/index.php/topic,12989&highlight=ds18b20


http://www.rentron.com/PicBasic/one-wire3.htm


birde proteusa her zaman güvenmeyin ,devreyi kurup çalıştırın .

tyildizak

kuracağın devre:

işlemcinin frekansı 4 Mhz olmalı:



programın şu olmalı:
Define OSC	4

@ DEVICE PIC16F84A, XT_OSC
@ DEVICE PIC16F84A, WDT_OFF 
@ DEVICE PIC16F84A, PWRT_ON 

      trisa = 0
      trisb = 1


      KOMUT   var     byte           
      I       var     byte           
      SICAKLIK     var     word
      DQ      var     PORTB.0   
      DQ_DIR  var     TRISB.0

      DEFINE LCD_BITS   4   
      DEFINE LCD_LINES   2

      DEFINE LCD_DREG   PORTB   
      DEFINE LCD_DBIT   4   
      DEFINE LCD_EREG   PORTA   
      DEFINE LCD_EBIT   1      
      DEFINE LCD_RSREG   PORTA
      DEFINE LCD_RSBIT   0      
 
      DEFINE LCD_COMMANDUS 2000
      DEFINE LCD_DATAUS 50

      PAUSE 500

      LCDOUT $FE,1 

START:
        Gosub INIT1820
        komut = $CC :  Gosub YAZ1820
        komut = $44 :  Gosub yaz1820
        Pause 2000
        Gosub init1820
        komut = $CC :  Gosub yaz1820
        komut = $BE :  Gosub yaz1820
        Gosub oku1820       
       
        Lcdout $FE,2,dec(SICAKLIK >> 1),".",dec(SICAKLIK.0 * 5)," DERECE"

        Goto START 
                               
INIT1820:
        Low DQ
        Pauseus 500
        DQ_DIR = 1
        Pauseus 100
        If DQ = 1 Then
                Lcdout $FE,2, "   SENSOR YOK!"
                Pause 500
                Goto START
        Endif
        Pauseus 400
        Return
YAZ1820:
        For i = 1 to 8
                If komut.0 = 0 Then
                        Gosub yaz0
                Else
                        Gosub yaz1
                Endif
                komut = komut >> 1
        Next i
        Return
YAZ0:
        Low DQ
        Pauseus 60
        DQ_DIR = 1
        Return
YAZ1:
        Low DQ
@       NOP
        DQ_DIR = 1
        Pauseus 60             
        Return
OKU1820:
        For i = 1 to 16
                SICAKLIK = SICAKLIK >> 1
                Gosub okubit 
        Next i
        Return
OKUBIT:
        SICAKLIK.15 = 1
        Low DQ
@       NOP   
        DQ_DIR = 1 
        If DQ = 0 Then
                SICAKLIK.15 = 0
        Endif
        Pauseus 60 
        Return
END      



benim yapabileceklerim bu kadar, programı derlemek, devreyi kurmak ve çalıştırmak, senin işin..

İsiste çalışacağını düşünmüyorum, ben doğru şekilde çalıştıramamıştım, ama normal devre üzerinde gayet doğru şekilde çalışıyordu.

Kolay gelsin