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