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.
Code: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







Zitieren

Lesezeichen