TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Scufflee en 17 de Enero de 2014, 12:28:30
-
Hola estoy trabajando con un PIC 16F628A, ya lo tengo programado y probado en ISIS, pero al momento de llevarlo al protoboard no me funciona. El circuito funciona con dos Switch y 8 salidas. Al momento de encender el switch no hace nada. Estoy trabajando con una fuente de poder regulable y un LM7805 para la alimentación del pic.
PD: De vez en cuando, toco el switch y el circuito comienza a hacer la secuencia, pero se alterna entre las dos que debería hacer.
-
podrias poner tu código y esquema de conexión para revisarlos y darte una ayuda
-
podrias poner tu código y esquema de conexión para revisarlos y darte una ayuda
Aquí el codigo por Niple
;------------------------------------------------------------
; Código assembler generado por Niple V5.6.3
; Proyecto: 2
; Autor: Niple Software
; Fecha: 17-01-2014
; PIC: 16F627A
; Velocidad de reloj: 4 Mhz
; Descripcion:
;------------------------------------------------------------
LIST P=PIC16F627A
_HS_OSC equ 0x3FEE
_WDT_OFF equ 0x3FFB
_PWRTE_ON equ 0x3FF7
_MCLRE_ON equ 0x3FFF
_BODEN_OFF equ 0x3FBF
_LVP_OFF equ 0x3F7F
_CPD_OFF equ 0x3F7F
_CP_OFF equ 0x3FFF
__config _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF
;------------------------------------------------------------
; Declaración de Registros
;------------------------------------------------------------
w equ 0x0000
status equ 0x0003
porta equ 0x0005
portb equ 0x0006
pclath equ 0x000a
cmcon equ 0x001f
_np_tiempo equ 0x0024
_np_tiempo1 equ 0x0026
_np_tiempo2 equ 0x0027
_np_tiempo3 equ 0x0028
trisa equ 0x0085
trisb equ 0x0086
;------------------------------------------------------------
; Declaración de Bits
;------------------------------------------------------------
c equ 0 ;carry / borrow bit
ra0 equ 0 ;bit 0 del puerto a
ra1 equ 1 ;bit 1 del puerto a
rp0 equ 5 ;registrer bank select bit
rp1 equ 6 ;registrer bank select bit
z equ 2 ;bit cero
;------------------------------------------------------------
; Declaración de Registros EEPROM
;------------------------------------------------------------
;------------------------------------------------------------
; Inicio
;------------------------------------------------------------
org 0x00
goto paso2
;------------------------------------------------------------
; programa principal
;------------------------------------------------------------
paso2
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
clrf _np_tiempo
clrf _np_tiempo1
clrf _np_tiempo2
clrf _np_tiempo3
clrf porta
movlw b'00001111' ;configurar el puerto a como xxxseeee
bsf status,rp0 ;cambiar a banco 1
movwf trisa
movlw b'00000111' ;puerto a = e/s digital
bcf status,rp0 ;cambiar a banco 0
movwf cmcon
clrf portb
movlw b'00000000' ;configurar el puerto b como ssssssss
bsf status,rp0 ;cambiar a banco 1
movwf trisb
paso4
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
btfss porta,ra0
goto paso5
;escribir en el puerto b
movlw b'10000010'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
btfss porta,ra0
goto paso4
;escribir en el puerto b
movlw b'01000100'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
btfss porta,ra0
goto paso4
;escribir en el puerto b
movlw b'10000001'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
btfss porta,ra0
goto paso4
;escribir en el puerto b
movlw b'00100010'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
btfss porta,ra0
goto paso4
;escribir en el puerto b
movlw b'01000001'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
goto paso4 ;cierra el ciclo
paso5
btfss porta,ra1
goto paso6
;escribir en el puerto b
movlw b'11100000'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
btfss porta,ra1
goto paso4
;escribir en el puerto b
movlw b'00000111'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
goto paso4 ;cierra el ciclo
paso6
;escribir en el puerto b
movlw b'00000000'
movwf portb
goto paso4 ;cierra el ciclo
;------------------------------------------------------------
; Declaración de Subrutinas
;------------------------------------------------------------
tmp_100_mc
movwf _np_tiempo
goto tmp_100_mc_1
tmp_100_mc_bucle2
nop
nop
nop
nop
nop
nop
nop
tmp_100_mc_1
movlw .22
movwf _np_tiempo1
tmp_100_mc_bucle1
movlw .150
movwf _np_tiempo2
tmp_100_mc_bucle
decfsz _np_tiempo2,1
goto tmp_100_mc_bucle
decfsz _np_tiempo1,1
goto tmp_100_mc_bucle1
nop
decfsz _np_tiempo,1
goto tmp_100_mc_bucle2
return
;------------------------------------------------------------
; DATOS EN MEMORIA EEPROM
;------------------------------------------------------------
org 0x2100
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
End
-
tienes conectado el cristal externo y el master clear?
-
tienes conectado el cristal externo y el master clear?
Sí pero sigue igual. Inclusive cambie la configuración usando la siguiente:
__CONFIG _INTOSC_OSC_NOCLKOUT & _PWRTE_ON & _WDT_OFF & _CP_ON & _MCLRE_OFF & _BOREN_ON & _LVP_OFF & _DATA_CP_ON
Pero sigue con el mismo problema.
Le conecte resistencias de 10K a las entradas y al negativo y los pulsadores al positivo, pero sigue sin funcionar.
-
Puede ser un problema del circuito. Has colocado las resistencias correspondientes a los pulsadores? por qué no compartes tu circuito también?
Saludos
-
inclusive, podría ser un falso en tu protoboard, puede que tu switch no haga bien contacto
-
Aquí hay fotos del circuito en protoboard:
Imagen 1 (http://www.todopic.com.ar/foros/imgtiny/2dhtqpl.jpg)
Imagen 2 (http://www.todopic.com.ar/foros/imgtiny/2i94hg0.jpg)
Imagen 3 (http://www.todopic.com.ar/foros/imgtiny/214yxq8.jpg)
Imagen 4 (http://www.todopic.com.ar/foros/imgtiny/10psi7q.jpg)
Imagen 5 (http://www.todopic.com.ar/foros/imgtiny/2cpdlkw.jpg)
Imagen 6 (http://www.todopic.com.ar/foros/imgtiny/2moa3ro.jpg)
Imagen 7 (http://www.todopic.com.ar/foros/imgtiny/213n5o1.jpg)
-
Lo que veo en tus images es:
1º El pin de MCLR no tienes fijado a ningún potencial. Es el pin y deberías de colocarlo con una R a positivo
2º Tampoco veo por ningún sitio que hayas colocado el cristal y sus condensadores respectivos.
3º Lo mas cerca de la alimentación del pic deberías de colocar un condensador de 0,1uF
4º También deberías de colocar algún condensador de filtro a la salida del regulador 7805.
5º La configuración del oscilador la has colocado como "HS", para esto el cristal debería ser de 10MHz o mayor. En caso de querer utilizar 4MHz la configuración debería de ser "XT".
Lo que los compañeros querían pedirte, aparte de las imágenes, el esquema de tu circuito.
-
Hace poco coloqué un cable suelto en el pin 16 y hacia la secuencia cuando lo tocaba.
Aquí el VIDEO (https://www.youtube.com/watch?v=3B_l4DHkEg0&feature=youtu.be)
Y en el ISIS tengo la misma programación y sin cristales. Ahí me funciona sin problemas.
PD: Estoy usando esta programación:
;------------------------------------------------------------
; Código assembler generado por Niple V5.6.3
; Proyecto: 2
; Autor: Niple Software
; Fecha: 17-01-2014
; PIC: 16F627A
; Velocidad de reloj: 4 Mhz
; Descripcion:
;------------------------------------------------------------
LIST P=PIC16F627A
_INTOSC_OSC_NOCLKOUT equ 0x3FEE
_WDT_OFF equ 0x3FFB
_PWRTE_ON equ 0x3FF7
_MCLRE_OFF equ 0x3FFF
_BOREN_ON equ 0x3FBF
_LVP_OFF equ 0x3F7F
_DATA_CP_ON equ 0x3F7F
_CP_ON equ 0x3FFF
__CONFIG _INTOSC_OSC_NOCLKOUT & _PWRTE_ON & _WDT_OFF & _CP_ON & _MCLRE_OFF & _BOREN_ON & _LVP_OFF & _DATA_CP_ON
;------------------------------------------------------------
; Declaración de Registros
;------------------------------------------------------------
w equ 0x0000
status equ 0x0003
porta equ 0x0005
portb equ 0x0006
pclath equ 0x000a
cmcon equ 0x001f
_np_tiempo equ 0x0024
_np_tiempo1 equ 0x0026
_np_tiempo2 equ 0x0027
_np_tiempo3 equ 0x0028
trisa equ 0x0085
trisb equ 0x0086
;------------------------------------------------------------
; Declaración de Bits
;------------------------------------------------------------
c equ 0 ;carry / borrow bit
ra0 equ 0 ;bit 0 del puerto a
ra1 equ 1 ;bit 1 del puerto a
rp0 equ 5 ;registrer bank select bit
rp1 equ 6 ;registrer bank select bit
z equ 2 ;bit cero
;------------------------------------------------------------
; Declaración de Registros EEPROM
;------------------------------------------------------------
;------------------------------------------------------------
; Inicio
;------------------------------------------------------------
org 0x00
goto paso2
;------------------------------------------------------------
; programa principal
;------------------------------------------------------------
paso2
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
clrf _np_tiempo
clrf _np_tiempo1
clrf _np_tiempo2
clrf _np_tiempo3
clrf porta
movlw b'00001111' ;configurar el puerto a como xxxseeee
bsf status,rp0 ;cambiar a banco 1
movwf trisa
movlw b'00000111' ;puerto a = e/s digital
bcf status,rp0 ;cambiar a banco 0
movwf cmcon
clrf portb
movlw b'00000000' ;configurar el puerto b como ssssssss
bsf status,rp0 ;cambiar a banco 1
movwf trisb
paso4
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
btfss porta,ra0
goto paso5
;escribir en el puerto b
movlw b'10000010'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
btfss porta,ra0
goto paso4
;escribir en el puerto b
movlw b'01000100'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
btfss porta,ra0
goto paso4
;escribir en el puerto b
movlw b'10000001'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
btfss porta,ra0
goto paso4
;escribir en el puerto b
movlw b'00100010'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
btfss porta,ra0
goto paso4
;escribir en el puerto b
movlw b'01000001'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
goto paso4 ;cierra el ciclo
paso5
btfss porta,ra1
goto paso6
;escribir en el puerto b
movlw b'11100000'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
btfss porta,ra1
goto paso4
;escribir en el puerto b
movlw b'00000111'
movwf portb
movlw .3 ;temporizador 30 mse
call tmp_100_mc ;llamada a rutina tmp_100_mc
goto paso4 ;cierra el ciclo
paso6
;escribir en el puerto b
movlw b'00000000'
movwf portb
goto paso4 ;cierra el ciclo
;------------------------------------------------------------
; Declaración de Subrutinas
;------------------------------------------------------------
tmp_100_mc
movwf _np_tiempo
goto tmp_100_mc_1
tmp_100_mc_bucle2
nop
nop
nop
nop
nop
nop
nop
tmp_100_mc_1
movlw .22
movwf _np_tiempo1
tmp_100_mc_bucle1
movlw .150
movwf _np_tiempo2
tmp_100_mc_bucle
decfsz _np_tiempo2,1
goto tmp_100_mc_bucle
decfsz _np_tiempo1,1
goto tmp_100_mc_bucle1
nop
decfsz _np_tiempo,1
goto tmp_100_mc_bucle2
return
;------------------------------------------------------------
; DATOS EN MEMORIA EEPROM
;------------------------------------------------------------
org 0x2100
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
data 0xff
End
EL ESQUEMA (http://www.todopic.com.ar/foros/imgtiny/2vrx25v.png) EN ISIS
-
Amigo 2 cosas a tu ultimo mensaje:
- El pin 16 es uno de los terminales del oscilador. Al tocarlo introduces ruido y puede activare el oscilador :shock:
- Isis es un simulador y como tal simula. En la realidad si quieres que e funcione debes de colocar el cristal y los condensadores. Si no, no te va a funcionar, salvo que configures el pic con oscilador interno, si es que el pic lo tiene, en ese caso y solo en ese caso odrías ahorrarte el cristal.
-
Amigo 2 cosas a tu ultimo mensaje:
- El pin 16 es uno de los terminales del oscilador. Al tocarlo introduces ruido y puede activare el oscilador :shock:
- Isis es un simulador y como tal simula. En la realidad si quieres que e funcione debes de colocar el cristal y los condensadores. Si no, no te va a funcionar, salvo que configures el pic con oscilador interno, si es que el pic lo tiene, en ese caso y solo en ese caso odrías ahorrarte el cristal.
Según había leído el 16F628A tiene oscilador interno y creo que configuré para que lo usara :s
-
No había visto el 2º código, ahí si esta como interno en el 1º No.
de todas formas en el esquema no lo veo bien pero no puedo distinguir si tienes puesta a + el pic MCLR a través de una r. So no la has puesto puede que se te este disparando el reset.
-
Conecte el mclr a través de una r de 10k a positivo y un condensador de 4,7u en la salida del regulador de voltaje, pero sigue igual.