TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: iFranco en 09 de Noviembre de 2011, 22:39:53
-
Hola a todos:
Soy un usuario novato de los pics, y estaba realizando mis primeros pasos con ellos. Hice un programa muy basico para controlar un puente H. En la salida 0 del puerto hay ponia un 1, lo limpiaba, ponia un 1 en la salida 1 del mismo puerto y asi continua. Pensaba lograr que el motor vaya y vuelva.
Probe si funcionaba mi programa con led y estos se prendian y apagaban intermitentemente.
Cuando conecto el motor, que funciona con 12V (a la entrada del pic coloque un 7805) el pic se "tilda" y deja un alto en la salida de un solo puerto (casi siempre en PORTA 0). Y obviamente el motor solo gira en una direccion.
Alguien sabe, y me puede decir que estoy haciendo mal o que hay que tener en cuenta en estos casos? Probe con varias fuentes y siempre tengo el mismo problema, el PIC se queda ahi y no sigue con el curso del programa...
desde ya muchas gracias por las respuestas.
-
Publica tu programa y tu esquema para que podamos ayudarte.
-
Mi programa como le habia dicho, es muy sencillo:
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_OFF & _WDT_OFF & _INTRC_IO
PDel0 EQU 0X30
PDel1 EQU 0X31
ORG 0x00
GOTO COMIENZO
COMIENZO
CALL CONFIG1
UNO
BSF PORTA,0
CALL RETARDO
CALL RETARDO
CALL RETARDO
BCF PORTA,0
BSF PORTA,1
CALL RETARDO
CALL RETARDO
CALL RETARDO
BCF PORTA,1
BSF PORTA,0
CALL RETARDO
CALL RETARDO
CALL RETARDO
BCF PORTA,0
BSF PORTA,1
CALL RETARDO
CALL RETARDO
CALL RETARDO
BCF PORTA,1
GOTO UNO
CONFIG1
BANKSEL PORTB;VOY AL BANCO 0
CLRF PORTB
BANKSEL ANSEL;BANCO 1
MOVLW 0X00
MOVWF ANSEL;TODAS SON ENTRADAS DIGITALES
MOVLW B'11110000';PUERTOB
MOVWF TRISB
BANKSEL PORTA;VOY AL BANCO 0
CLRF PORTA
BANKSEL ANSEL;BANCO 1
MOVLW 0X00
MOVWF ANSEL;TODAS SON ENTRADAS DIGITALES
MOVLW B'00000000';PUERTOA
MOVWF TRISA
BANKSEL OSCCON
MOVLW B'01100000'
MOVWF OSCCON
BANKSEL PORTA
RETURN
RETARDO
movlw .147 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 goto PDelL4 ; 2 ciclos delay
PDelL4 clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7 goto PDelL8 ; 2 ciclos delay
PDelL8 goto PDelL9 ; 2 ciclos delay
PDelL9
return ; 2+2 Fin.
END
El cicuito que use fue este, que esta exactamente asi, y si ll hago manualmente (poner 5V en la entrada A o en la entrada B el motor se mueve como debe, no funcoina cuando lo conecto al pic)
(http://www.globu.net/pp/ES/circuito_puente.JPG)
Esto es toda la informacion adicional que puedo aportar, ojala sirva para darme una ayuda. Desde ya gracias.