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 :)