DS1621 de veri okunması..

Başlatan sonerss, 03 Eylül 2003, 00:42:54

sonerss

Arkadaşlar, DS1621 in datasheet ini hatim etmeme rağmen bi türlü DS1621 den sıcaklık değerlerini alamıyorum :( . Yaptığım işlemler sırasıyla şunlar;

1- PDF dosyasında da belirttiği gibi ilk başta halt komutunu ( 22h) DS1621 e gönderiyorum..

2- Config konutunu giriyorum..

3- Ve en sonda sıcaklık değerlerini almak için read komutunu ( AAh ) gönderiyorum..

I2C leri ilk kez kullandığım için bu olayda kafayı yemek üzereyim :). aşağıda 8051 için yazdığım kodlar bulunmakta..

;-----------------------------------------------------
; 8051 de DS1621 Termometre denemesi
;-----------------------------------------------------
      ORG   0000H
      SJMP   MAIN
;-----------------------------------------------------
; KULLANILAN DEGISKENLER TANIMALANIR
;-----------------------------------------------------
      MSB_REG      EQU   20H
      LSB_REG      EQU   21H
      TEMP      EQU   22H
      VALUE_TEMP   EQU   23H
      VERI_DURUM   EQU   24H
      
      SDA      EQU   P2.0
      SCL      EQU   P2.1
;-----------------------------------------------------
; ANA PROGRAM
;-----------------------------------------------------
MAIN:      
      MOV   MSB_REG,#00h
      MOV   LSB_REG,#00h
      MOV   TEMP,#00h
      MOV   VALUE_TEMP,#00h
      MOV   VERI_DURUM,#00h
I2C:      
      LCALL   HALT_TEMPERATURE
      LCALL   INIT_CONFIG
      LCALL   INIT_TEMPERATURE      
      LCALL   READ_CONFIG
      LCALL   READ_DATA
;-----------------------------------------------------
LOOP:
      SJMP   LOOP
;-----------------------------------------------------
; DS1621 E AIT ALTPROGRAMLAR...
;-----------------------------------------------------
HALT_TEMPERATURE:
      LCALL   START_I2C
      LCALL   WRITE_ADDRESS_0
      LCALL   WRITE_HALT_COMMAND
      LCALL   STOP_I2C
      RET
;-----------------------------------------------------
INIT_CONFIG:
      LCALL   START_I2C
      LCALL   WRITE_ADDRESS_0
      LCALL   WRITE_CONFIG_COMMAND_0
      LCALL   WRITE_CONFIG_COMMAND_1
      LCALL   STOP_I2C
      RET
;-----------------------------------------------------
INIT_TEMPERATURE:
      LCALL   START_I2C
      LCALL   WRITE_ADDRESS_0
      LCALL   WRITE_INIT_COMMAND
      LCALL   STOP_I2C
      RET
;-----------------------------------------------------
READ_CONFIG:
      LCALL   START_I2C
      LCALL   WRITE_ADDRESS_0
      LCALL   WRITE_CONFIG_COMMAND_0
      SETB   SDA
      LCALL   START_I2C
      LCALL   READ_CONFIG_COMMAND
      LCALL   WRITE_CONFIG_8B
      CLR   SDA
      LCALL   STOP_I2C
      RET
;---------------------------------------------------
READ_DATA:
      LCALL   START_I2C
      LCALL   WRITE_ADDRESS_0
      LCALL   WRITE_READ_COMMAND
      SETB   SDA
      LCALL   START_I2C
      LCALL   READ_ADDRESS_0
      LCALL   GET_DATA      
      RET
;-----------------------------------------------------
WRITE_ADDRESS_0:   ;10010000+A
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_0         ;R/W = 0: WRITE AKTIF
      LCALL   I2C_0         ;ACKNOWLODGE BIT   
      RET
;-----------------------------------------------------
READ_ADDRESS_0:
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_1         ;R/W = 1: WRITE AKTIF
      LCALL   I2C_0         ;ACKNOWLODGE BIT   
      RET
;-----------------------------------------------------
WRITE_HALT_COMMAND:   ; 00100010+A
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0         ;ACKNOWLODGE BIT   
      RET
;-----------------------------------------------------
WRITE_INIT_COMMAND:   ; 11101110+A
      LCALL   I2C_1
      LCALL   I2C_1
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_1
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0         ;ACKNOWLODGE BIT   
      RET
;-----------------------------------------------------
WRITE_CONFIG_COMMAND_0:   ;10101100+A
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_0         ;ACKNOWLODGE BIT   
      RET
;-----------------------------------------------------
WRITE_CONFIG_COMMAND_1:   ;10011001+A
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0         ;ACKNOWLODGE BIT   
      RET
;-----------------------------------------------------
READ_CONFIG_COMMAND:   ;10010001+A
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_1         ;R/W = 1 READ AKTIF
      LCALL   I2C_0         ;ACKNOWLODGE BIT   
      RET
;-----------------------------------------------------
WRITE_READ_COMMAND:   ; 10101010+A
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0         ;ACKNOWLODGE BIT   
      RET
;-----------------------------------------------------
WRITE_CONFIG_8B:      ;10001011+A
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_0
      LCALL   I2C_1
      LCALL   I2C_1
      LCALL   NACK         ;NACKNOWLODGE BIT   
      RET
;-----------------------------------------------------
GET_DATA:
      SETB   SDA
      SETB   SCL
      LCALL   GECIK_NOP
      CLR   SCL
      SETB   SCL
      RET      
;-----------------------------------------------------
START_I2C:
      SETB   SCL
      LCALL   GECIK_NOP
      CLR   SDA
      LCALL   GECIK_NOP
      CLR   SCL
      LCALL   GECIK_NOP
      RET
;-----------------------------------------------------
STOP_I2C:
      SETB   SCL
      LCALL   GECIK_NOP
      SETB   SDA
      LCALL   GECIK_NOP
      CLR   SCL
      LCALL   GECIK_NOP
      RET
;-----------------------------------------------------
I2C_0:
      SETB   SCL      
      LCALL   GECIK_NOP
      CLR   SCL
      LCALL   GECIK_NOP
      RET
;-----------------------------------------------------
I2C_1:
      SETB   SDA
      LCALL   GECIK_NOP
      SETB   SCL      
      LCALL   GECIK_NOP
      CLR   SCL
      LCALL   GECIK_NOP
      CLR   SDA
      LCALL   GECIK_NOP
      RET
;-----------------------------------------------------
NACK:
      SETB   SDA
      LCALL   GECIK_NOP
      SETB   SCL
      LCALL   GECIK_NOP
      CLR   SCL
      LCALL   GECIK_NOP
      RET
;-----------------------------------------------------
GECIK_NOP:
      NOP
      NOP
      NOP
      RET
;-----------------------------------------------------
      END      ;    

Yardımlarınız için şimdiden teşekkür :)