TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: xcalibour en 14 de Marzo de 2016, 08:30:27
-
Hola nuevamente amigos de todopic, esta vez estoy aqui porque tengo una duda, estoy tratando de programar mi PIC12F629 con flowcode, todo muy lindo el programita funciona perfecto en el simulador (les comento que es solamente un led que parpadea), el compilador no me tira ningun error, programo el pic con el icprog sin problemas, leo el dispositivo y aparece el programa, en fin todo muy lindo, pero cuando voy al protoboard no pasa naranja, lo que pasa es que no se como deberia ser la conexion, por eso les muestro como lo conecte yo, y asi me dicen que estoy haciendo mal, les paso una foto de mi diagrama de conexiones:
(http://i.imgur.com/PE1WsB0.jpg)
Se agradece cualquier dato, saludos y gracias!
-
Hola, el esquema se ve bien. Configuraste el pin GP0 como salida? Como configuraste el reloj? No veo cristal por ejemplo. Y el pin de reset? Esta habilitado?
Saludos!
-
Hola, no se como se hace eso en el flowcode, aca pedo el archivo ASM que genera el Flowcode para que lo veas y me digas, muchas gracias por contestar!!
;/////////////////////////////////////////////////////////////////////////////////
;// Code Generator: BoostC Compiler - http://www.sourceboost.com
;// Version : 7.03
;// License Type : Pro License
;// Limitations : PIC12,PIC16 max code size:Unlimited, max RAM banks:Unlimited
;/////////////////////////////////////////////////////////////////////////////////
include "P12F629.inc"
; Heap block 0, size:27 (0x00000044 - 0x0000005E)
__HEAP_BLOCK0_BANK EQU 0x00000000
__HEAP_BLOCK0_START_OFFSET EQU 0x00000044
__HEAP_BLOCK0_END_OFFSET EQU 0x0000005E
; Heap block 1, size:0 (0x00000000 - 0x00000000)
__HEAP_BLOCK1_BANK EQU 0x00000000
__HEAP_BLOCK1_START_OFFSET EQU 0x00000000
__HEAP_BLOCK1_END_OFFSET EQU 0x00000000
; Heap block 2, size:0 (0x00000000 - 0x00000000)
__HEAP_BLOCK2_BANK EQU 0x00000000
__HEAP_BLOCK2_START_OFFSET EQU 0x00000000
__HEAP_BLOCK2_END_OFFSET EQU 0x00000000
; Heap block 3, size:0 (0x00000000 - 0x00000000)
__HEAP_BLOCK3_BANK EQU 0x00000000
__HEAP_BLOCK3_START_OFFSET EQU 0x00000000
__HEAP_BLOCK3_END_OFFSET EQU 0x00000000
gbl_status EQU 0x00000003 ; bytes:1
gbl_14_LSR EQU 0x00000020 ; bytes:4
gbl_float_detect_tininess EQU 0x00000039 ; bytes:1
gbl_float_rounding_mode EQU 0x0000003A ; bytes:1
gbl_float_exception_flags EQU 0x0000003B ; bytes:1
gbl_15_gbl_aSig EQU 0x00000024 ; bytes:4
gbl_15_gbl_bSig EQU 0x00000028 ; bytes:4
gbl_15_gbl_zSig EQU 0x0000002C ; bytes:4
gbl_15_gbl_aExp EQU 0x0000003C ; bytes:1
gbl_15_gbl_bExp EQU 0x0000003D ; bytes:1
gbl_15_gbl_zExp EQU 0x00000037 ; bytes:2
gbl_15_gbl_aSign EQU 0x0000003E ; bytes:1
gbl_15_gbl_bSign EQU 0x0000003F ; bytes:1
gbl_15_gbl_zSign EQU 0x00000040 ; bytes:1
gbl_15_gbl_zSigZero EQU 0x00000041 ; bytes:1
gbl_15_gbl_ret EQU 0x00000030 ; bytes:4
gbl_indf EQU 0x00000000 ; bytes:1
gbl_tmr0 EQU 0x00000001 ; bytes:1
gbl_pcl EQU 0x00000002 ; bytes:1
gbl_fsr EQU 0x00000004 ; bytes:1
gbl_gpio EQU 0x00000005 ; bytes:1
gbl_pclath EQU 0x0000000A ; bytes:1
gbl_intcon EQU 0x0000000B ; bytes:1
gbl_pir1 EQU 0x0000000C ; bytes:1
gbl_tmr1l EQU 0x0000000E ; bytes:1
gbl_tmr1h EQU 0x0000000F ; bytes:1
gbl_t1con EQU 0x00000010 ; bytes:1
gbl_cmcon EQU 0x00000019 ; bytes:1
gbl_option_reg EQU 0x00000081 ; bytes:1
gbl_trisio EQU 0x00000085 ; bytes:1
gbl_pie1 EQU 0x0000008C ; bytes:1
gbl_pcon EQU 0x0000008E ; bytes:1
gbl_osccal EQU 0x00000090 ; bytes:1
gbl_wpu EQU 0x00000095 ; bytes:1
gbl_iocb EQU 0x00000096 ; bytes:1
gbl_ioc EQU 0x00000096 ; bytes:1
gbl_vrcon EQU 0x00000099 ; bytes:1
gbl_eedata EQU 0x0000009A ; bytes:1
gbl_eeadr EQU 0x0000009B ; bytes:1
gbl_eecon1 EQU 0x0000009C ; bytes:1
gbl_eecon2 EQU 0x0000009D ; bytes:1
CompTempVar2182 EQU 0x00000042 ; bytes:1
delay_ms_00000_arg_del EQU 0x00000043 ; bytes:1
delay_s_00000_arg_del EQU 0x00000042 ; bytes:1
Int1Context EQU 0x0000005F ; bytes:1
Int1BContext EQU 0x00000034 ; bytes:3
ORG 0x00000000
GOTO _startup
ORG 0x00000004
MOVWF Int1Context
SWAPF STATUS, W
BCF STATUS, RP0
MOVWF Int1BContext
SWAPF PCLATH, W
MOVWF Int1BContext+D'1'
SWAPF FSR, W
MOVWF Int1BContext+D'2'
BCF PCLATH,3
BCF PCLATH,4
GOTO interrupt
ORG 0x00000010
delay_ms_00000
; { delay_ms ; function begin
MOVF delay_ms_00000_arg_del, F
BTFSS STATUS,Z
GOTO label1
RETURN
label1
MOVLW 0xF5
label2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
ADDLW 0xFF
BTFSS STATUS,Z
GOTO label2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ delay_ms_00000_arg_del, F
GOTO label1
RETURN
; } delay_ms function end
ORG 0x00000038
delay_s_00000
; { delay_s ; function begin
label3
MOVLW 0xFA
MOVWF delay_ms_00000_arg_del
CALL delay_ms_00000
MOVLW 0xFA
MOVWF delay_ms_00000_arg_del
CALL delay_ms_00000
MOVLW 0xFA
MOVWF delay_ms_00000_arg_del
CALL delay_ms_00000
MOVLW 0xFA
MOVWF delay_ms_00000_arg_del
CALL delay_ms_00000
DECFSZ delay_s_00000_arg_del, F
GOTO label3
RETURN
; } delay_s function end
ORG 0x00000047
main
; { main ; function begin
MOVLW 0x07
BCF STATUS, RP0
MOVWF gbl_cmcon
MOVLW 0xC0
BSF STATUS, RP0
MOVWF gbl_option_reg
label4
MOVLW 0xFE
BSF STATUS, RP0
ANDWF gbl_trisio, W
MOVWF gbl_trisio
MOVLW 0xFE
BCF STATUS, RP0
ANDWF gbl_gpio, W
MOVWF CompTempVar2182
MOVLW 0x01
IORWF CompTempVar2182, W
MOVWF gbl_gpio
MOVLW 0x02
MOVWF delay_s_00000_arg_del
CALL delay_s_00000
MOVLW 0xFE
BSF STATUS, RP0
ANDWF gbl_trisio, W
MOVWF gbl_trisio
MOVLW 0xFE
BCF STATUS, RP0
ANDWF gbl_gpio, W
MOVWF gbl_gpio
MOVLW 0x02
MOVWF delay_s_00000_arg_del
CALL delay_s_00000
GOTO label4
; } main function end
ORG 0x00000067
_startup
MOVLW 0xD5
BCF STATUS, RP0
MOVWF gbl_14_LSR
MOVLW 0xC4
MOVWF gbl_14_LSR+D'1'
MOVLW 0xBB
MOVWF gbl_14_LSR+D'2'
MOVLW 0xDC
MOVWF gbl_14_LSR+D'3'
CLRF gbl_15_gbl_aSig
CLRF gbl_15_gbl_aSig+D'1'
CLRF gbl_15_gbl_aSig+D'2'
CLRF gbl_15_gbl_aSig+D'3'
CLRF gbl_15_gbl_bSig
CLRF gbl_15_gbl_bSig+D'1'
CLRF gbl_15_gbl_bSig+D'2'
CLRF gbl_15_gbl_bSig+D'3'
CLRF gbl_15_gbl_zSig
CLRF gbl_15_gbl_zSig+D'1'
CLRF gbl_15_gbl_zSig+D'2'
CLRF gbl_15_gbl_zSig+D'3'
CLRF gbl_15_gbl_aExp
CLRF gbl_15_gbl_bExp
CLRF gbl_15_gbl_zExp
CLRF gbl_15_gbl_zExp+D'1'
CLRF gbl_15_gbl_aSign
CLRF gbl_15_gbl_bSign
CLRF gbl_15_gbl_zSign
CLRF gbl_15_gbl_zSigZero
CLRF gbl_15_gbl_ret
CLRF gbl_15_gbl_ret+D'1'
CLRF gbl_15_gbl_ret+D'2'
CLRF gbl_15_gbl_ret+D'3'
CLRF gbl_float_rounding_mode
CLRF gbl_float_exception_flags
CLRF gbl_float_detect_tininess
BCF PCLATH,3
BCF PCLATH,4
GOTO main
ORG 0x0000008E
interrupt
; { interrupt ; function begin
BCF STATUS, RP0
SWAPF Int1BContext+D'2', W
MOVWF FSR
SWAPF Int1BContext+D'1', W
MOVWF PCLATH
SWAPF Int1BContext, W
MOVWF STATUS
SWAPF Int1Context, F
SWAPF Int1Context, W
RETFIE
; } interrupt function end
END
-
Debes ir a :
Build -> opciones de proyecto -> configurar chip
Eliges las opciones deseadas tanto en configurar chip: pines de reset, oscilador (externo o interno),...
En opciones de proyecto la velocidad del cristal.
date cuenta que si tienes configurado como oscilador externo necesitas el cristal entre los pines 2 y 3 con sus respectivos condensadores. En simulación no necesitas el cristal
Luego en el pin 4 que es de reset si lo usas debes de fijar el potencial al nivel que te indica el datasheet bien poniéndolo a masa o a 5V, y a través de una resistencia mejor.
Evidentemente el pin 7 debe de estar como salida.
Una vez que se cumple lo anterior nada mas dar tensión al pic te debería de oscilar el led.
-
Listo ahora me pongo a ver y comento como me fue, muchas gracias!
-
Bueno les comento que ahi en las configuraciones que me dijo el amigo Fer_TACA encontre que el PIC queria usar el clock externo, entonces volvi a programar todo y lo que me sucede es que el led se queda encendido, y tengo un voltaje de 2,4 aprox a la salida de la pata 7 que es la que estaria configurada como salida, entonces me puse a fijar el tema del reset y no encontre nada en la hoja de datos, salvo tambien lo que me dijo Fer_TACA que es la pata 4, y resulta que en dicha pata tengo como 3,4V y si le pongo un cable o la toco con el dedo se apaga el led y no prende hasta que no le saco el cable o el dedo, aunque no conecte el cable a ingun lugar queda apagado hasta tanto se lo saque, que mas tendria que revisar? como se configura eso con el flowcode? Gracias!
-
Si colocas el oscilador como externo en tu montaje fisico debs de poner el cristal de la frecuencia que desees y ese valor de freceuncia debes de colocarlo en las configuraciones tambien. El cristal debe de llevar los condensadores asociados si o si.
Elpin de reset normalmnet ehya que colocal a +5v, mejor atraves de una resistencia de unos 4,7K.
Tambien las placas protoboar debes de comprobar las conexiones ,ya que se suelen producir con mucha frecuencia flsos contactos. con eso deberia de funcioar si o si
-
Hola denuevo, les comento que al fin lo pude hacer funcionar, le cambie una configuracion del clock que me parecio que iba mejor y le puse la R de 4,7K a +5V, la configuracion que tenia era la siguiente: Build-->Opciones del Proyecto-->Opciones Generales-->Velocidad del Reloj 10000000
y en Configurar Chip elegi la opcion Oscillator: Internal RC no clock. Con eso quedo joyita, y aqui viene mi otra pregunta, si yo quisiera usar las 6 salidas para distintos leds (esto en teoria se puede hacer) como hago con el tema del reset? porque si saco la R se me queda prendido siempre, muchas gracias nuevamente, y a medida que avance en mi proyecto les comento como voy!
-
Para usar las patillas como salidas, en configuraciones debes de seleccionar el reloj como interno y poner la patilla de reset como I/O. Con eso los pines 2 y 3 (conexion del oscilador) ya puedes usarlos como entradas o salidas.
Pero ojo que algunos micros esta patilla solo se puede configurar como entrada y no se puede utilzar como salida.
-
Bien, voy a darle un intento a ver como me va, muchas gracias!!!!