PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperatursensor DS1620 mit PIC16f268a



kante23
23.05.2008, 20:02
Hy,
ich schlag mich nun schon fast eine woche mit dem 1620 rum und erwill sich von mir einfach nicht ansteuern lassen. Hat jemand Erfahrung mit diesem Sensor und vlt sogar noch nen Code passend zum PIC damit ich überhaupt mal testen kann obs bei mir kappt? Hab schon sämtliche Sachen im Inet dazu durchgearbeitet (auf Deutsch, Englisch und Französisch) die ich dazu finden konnte und auch sachen aus einem Buch ausprobiert (welches auch eine Thermometer damit gebaut hat). Aber alles will bei mir nicht funktionieren. Bitte helft mir ich verzweifle :(
lg Kante

PS: hier mein Quellcode (zum teil aus dem buch mit copy&paste) aber er funzt nicht.




list p=16f628a
__Config _CP_OFF & _DATA_CP_OFF & _WDT_OFF & _LVP_OFF & _INTOSC_OSC_NOCLKOUT & _MCLRE_OFF & _BOREN_OFF & _PWRTE_ON
;************************************************* **************
; main.asm
; Projekt: Test
; Lüfterstuerung mit 1 Temperatursensor
;
;************************************************* **************
Errorlevel -302

org 0x000
goto _main

org 0x004
goto _isr

#include p16f628a.inc
#define RST PORTB, 3
#define CLK PORTB, 2
#define DQ PORTB, 1
#define LED PORTB, 0
#define LED2 PORTB, 6

cltris macro
banksel TRISB
bcf TRISB,1
endm

settris macro
banksel TRISB
bsf TRISB,1
endm


cblock 0x20
trans
count
conf
endc

;************************************************* **************
; ISR
;************************************************* **************

_isr


retfie


;************************************************* **************
; main-Routine
;************************************************* **************
_main
;no interupts
banksel INTCON
clrf INTCON

;alle Output
; banksel TRISB
; movlw 0x00
; movwf TRISB

;48 Khz
banksel PCON
bcf PCON, 3

banksel trans
movlw 0x00
movwf trans

banksel TRISB
movlw 0x00
movwf TRISB

banksel PORTB
movlw 0x00
movwf PORTB


call _CONFIG
call _RDCONF


call _show_trans


_end

nop
goto _end


_write_LSB
cltris
_write_LSB01
banksel PORTB
bcf CLK ;CLock Low
banksel trans
rrf trans ;Trans-Bit nach DQ
banksel PORTB
skpc
bcf DQ
skpnc
bsf DQ

nop
bsf CLK ;Clock High
banksel count
decfsz count
goto _write_LSB01
settris
retlw 0
return

_read_LSB
banksel PORTB
bcf CLK ;CLK Low
nop
btfss DQ
bcf STATUS, C ;DQ nach C
btfsc DQ
setc

banksel trans
rrf trans ;C nach TRANS

banksel PORTB
bsf CLK ;CLK Hight
DECFSZ count
goto _read_LSB
return
;
;-----------------------------------------------------------------------------
; RDCONF: liest Konfiguration/Status Byte nach TRANS
; Ausgang: TRANS = Config/Status = DONE xxx xx CPU 1SHOT
;-----------------------------------------------------------------------------
_RDCONF MOVLW 0ACH ;
MOVWF trans
MOVLW 8
MOVWF count

banksel PORTB
BSF RST ;Interface on
CALL _write_LSB
MOVLW 8

banksel count
MOVWF count
CALL _read_LSB

banksel PORTB
BCF RST ;Interface off

RETURN

;----------------------------------------------------------------------------
; CONFIG: schreibt 3 nach Config(Config/Status = DONE xxx xx CPU 1SHOT)
; Für den PIC16C5X ist zu beachten:
; CONFIG darf kein Unterprogramm sein, wegen der Stackuntiefe
;----------------------------------------------------------------------------
_CONFIG CALL _RDCONF
MOVF trans,W
ANDLW 3
XORLW 3
SKPNZ ; falls die 2 Bits bereits = 3 sind, nicht schreiben
GOTO _READI ; da es ein EEPROM ist, nicht unnötig schreiben.
MOVLW 3
MOVWF conf
MOVLW 0CH ; Befehl: Config. schreiben
MOVWF trans
MOVLW 8
MOVWF count
BSF RST ;Interface on
NOP
CALL _write_LSB
MOVF conf,W
MOVWF trans
MOVLW 8
MOVWF count
CALL _write_LSB
BCF RST ;Interface off
_READI RETURN

; zeigt Tris-register auf einer LED an (mit LED2 als Takt led)
_show_trans

bcf LED
bcf LED2

movlw 8
movwf count

_jump
bsf LED2
rlf trans

btfsc STATUS, C
bsf LED
btfss STATUS, C
bcf LED

call _delay
bcf LED2
call _delay

decfsz count
goto _jump

return


_delay ;Zeitverzögerung von einer millisekunde
;alle 2 Takzyklen um eins erhöhen
;
banksel OPTION_REG
movlw B'0000100'
movwf OPTION_REG ;Prescaler = 8

banksel TMR0
clrf TMR0

banksel INTCON
bcf INTCON, T0IF
_delay_loop
btfss INTCON, T0IF ;solange bis T0IF gesetzt
goto _delay_loop

return

end

kante23
24.05.2008, 15:54
Hey,
also hab noch ein bsichen weiter rumprobiert. Bekomme vom DS1620 wenn ich die Konfig NUR auslese den Wer "11001000" geliefert; eigentlich ja ganz schön, da das ja heist ich schonmal mit ihm komunizieren kann
aber leider is der Wert laut spezifikation vollkommen unaussagekräftig (also dürfte iegtnlich nicht gesendet werden; 11010000 wäre richtig). Auch bekomme ich immer diesen wert egal was ich als Config-Word übergebe zum senden
Kann mir denn keiner Helfen?