-         

Ergebnis 1 bis 2 von 2

Thema: Temperatursensor DS1620 mit PIC16f268a

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24

    Temperatursensor DS1620 mit PIC16f268a

    Anzeige

    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

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24
    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?

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •