Sida 1 av 1

Trasig PIC?

Postat: 16 mars 2007, 18:20:35
av squiz3r
Jag har prblem med min PIC16F628A, en pinne på den (som jag aldrig har använt) fungerar inte nu när jag skulle använda den... Det är PORTA,4 på ben nr. 3. Är det någon speciel instälning man ska göra till den?
Här är programet jag testat med:

Kod: Markera allt

; Assign your microcontroller
        LIST P=16F628A

; This include file makes programming more understandeble
        include <P16F628A.INC>
        
        
    __CONFIG _CP_OFF & _DATA_CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _LVP_OFF

; save on free ram in bank0

delay2_var1       	equ	20h
delay2_var2       	equ	21h  
delay2_var3       	equ	22h 
;***

delay_var1       	equ	23h
delay_var2       	equ	24h  
delay_var3       	equ	25h  
;***

pause_var1	equ           26h 
;***

time		equ           27h
sens_flags		equ	30h

;define flags m.m.

#DEFINE FLAG1		sens_flags, 0 ;**************************
#DEFINE FLAG2		sens_flags, 1 ;
#DEFINE FLAG3		sens_flags, 2 ;
#DEFINE FLAG4 	 	sens_flags, 3 ;Define a name on each flag.
#DEFINE FLAG5 		sens_flags, 4 ;
#DEFINE FLAG6		sens_flags, 5 ;
#DEFINE FLAG7		sens_flags, 6 ;
#DEFINE FLAG8		sens_flags, 7 ;**************************
	


;define pinouts

#define  _G		PORTA,0 
#define  _F			PORTA,1 
#define  _A		PORTA,2
#define  _B		PORTA,3
#define  _E			PORTA,4
#define  _D		PORTA,6 
#define  _C		PORTA,7

#define  __			PORTB,0
#define  ___		PORTB,2 
#define  ____		PORTB,3
#define  _____		PORTB,4 
#define  sens1		PORTB,5



;startadres of the controller
	 org 0x0000


; For using A0-A3 as digital I/O 
    	movlw	D'7'	; 
	movwf	CMCON	; Comparators off, all pins digital I/O 

; Reset Port values
        clrf	PORTA	
        clrf	PORTB
        
; define your pin direction (input/output)

    bsf	STATUS, RP0	; Switch to bank 1
    movlw	b'00000000'	;
    movwf	TRISA		; PORTA = all outputs (not MCLRE)

    movlw	b'00000000'	; 
    movwf	TRISB		; PORTB = all outputs

    bcf   OPTION_REG,7	                ;sätt på weak pull-ups	

    bcf	STATUS, RP0	;   Switch to bank 0
;************************************

	Goto	watch_resistans		

;************************************
;**** subroutins *******


;***********************
;**** Main program *****

watch_resistans

	
	bsf	_E
	call	delay1

	goto	watch_resistans

mov

	RLF		PORTA,1
	call	delay1
	goto	mov








; Delay routine 
; This code uses about 5 x 99975 instructions. At 4Mhz this is approx 500 milliseconds.


delay1   movlw	h'10'			;***************
	    movwf	delay2_var3		;
delay11  movlw	h'30'			;
	    movwf	delay2_var2		;Gör en låång pause
delay12  movlw	h'FF'			;
	    movwf	delay2_var1		;
delay13	decfsz	delay2_var1, f 	;
	    goto	delay13			;
	    decfsz	delay2_var2, f	;
        goto	delay12			;
     	decfsz	delay2_var3, f	;
        goto	delay11			;
    	return					;***************

pause	movlw	d'50'			;****************
	    movwf	pause_var1		;gör en kort pause
pause2	decfsz	pause_var1,1	;	
   		goto	pause2			;
		return					;*****************

delay   movlw	0x5				;*****************
	    movwf	delay_var3		;
delay21  movlw	0x5				;
	    movwf	delay_var2		;gör en mellan pause
delay22  movlw	0xFF			;
	    movwf	delay_var1		;
delay23	decfsz	delay_var1, f 	;
	    goto	delay23			;
	    decfsz	delay_var2, f	;
        goto	delay22			;
     	decfsz	delay_var3, f	;
        goto	delay21			;
    	return					;******************


        END


Någon som kan se något problem?

Tack på förhand!
//Daniel A

Postat: 16 mars 2007, 18:45:30
av BoF

Kod: Markera allt

           banksel VRCON       
           movlw 	0x06
           movwf 	VRCON

Postat: 16 mars 2007, 18:47:06
av RasmusB
Hur märker du att den inte funkar?

Edit: Fattar inte riktigt hur VRCON påverkar PORTA,4? Får det bara till att pinne 2 kan påverkas?

Postat: 16 mars 2007, 18:53:33
av Marta
Denna pinne är open-drain, den ka bara sänka, inte sourca någon ström

Tyvärr finns det ingen inställning som ändrar på detta, det är bara till att byta pinne ellerbyta PIC till en annan modell. F88 t.ex. har inte denna absolut oumbärliga "finess" som är så fantastiskt användbar..

Ett yttre pull-up motstånd kanske kan hjälpa om den skall driva t.ex. en cmos-ingång och det inte är några krav på snabb stigtid.

Postat: 16 mars 2007, 18:53:39
av squiz3r
RasmusB: Den är låg oavsett vad jag säger till den.

BoF: Jag ska testa det istället.

tack!
//Daniel A

Postat: 16 mars 2007, 18:56:36
av BoF
Inte istället utan lägg till det!

Postat: 16 mars 2007, 19:01:45
av RasmusB
Marta: Håller nog med om din teori.

(s. 37 i databladet för den nyfikne)

Postat: 16 mars 2007, 19:07:38
av Marta
Det är ingen teori, det är hårda fakta. Jag lärde mig den hårda vägen för ett tag sedan...

Postat: 16 mars 2007, 19:10:00
av squiz3r
Marta: Jasså, då har vi det förklarat där... Det är en LED-display jag ska driva, så då går det väll inte med ett pull upp? Led ska ha ungefär 500Ω motstånd o så mycket kan väll inte en PIC dra ner?

BoF:Jaha! Jag läste fel, jag tyckte att du skrev CMCON, så då lägger jag till det :) (får ta o leta reda på vad det gör också)

Tack!
//Daniel A

Postat: 16 mars 2007, 19:25:21
av Marta
En pinne kan sänka 20 eller 25mA, men inte på alla samtidigt. Nackdelen är ju att man bränner av effekt till ingen nytta.

Postat: 16 mars 2007, 19:27:25
av sodjan
> Led ska ha ungefär 500Ω motstånd o så mycket kan väll inte en PIC dra ner?

"Dra ner" 500 ohm ?

En PIC pinne har en maximal *ström* definierat. Normalt 25 mA.
Så läge du ligger under det (och under hela portens sammanlagda
maxström) så är det OK.