Buscador
YoReparo.com La Web 

Regístrate gratis para participar de los foros, o si ya estás registrado haz login.

Pic 16F84A INERTE E INANIMADO

comentario del autor Vie Mar 28, 2008 3:22 pm
   
hola foreros, como pueden ver es la primera vez que escribo aqui, este ha sido mi lugar de aprendizaje Smile, Ahora solicito de su ayuda porque la verdad ya me choque. Resulta que quiero programar un maldito pic 16f84A. El chiste es que ya le busque por todas partes y nomas no jala. Aclaro que lo compilo y lo simulo en proteus y jala lo que deseo antes de quemar.

Nada mas para que chequen lo que he hecho por orden de desesperacion:
1. Programe un archivo muy sencillo y quemo (segun), pero pues cuando lo puse no jalo, entonces dije no pues no se quemo bien, lo queme como 10 veces y no jalo cuando lo ponia en la proto. mmmta!
2. Como tenia una fuente de 6.1 volts pues supuse que ya lo habia quemado y tal vez por eso no jalaba y pues ni con el nuevo tampoco!
3. Regulè el voltaje de la fuente con un 7805 (5v 1A). y asi tampoco
4. Le puse un capacitor para que segun desapareciera ruido, y nel pastel
5. Coloquè exactamente los valores que he encontrado en la red de como se conecta:
- Patas del cristal de 4 MHZ con capacitores de 22pF
-Resistencia de 4k que sale del Reset(pata 4) a 5 V
6. Programe otro prgrama sencillo y jalo simulado y de ahi lo queme en el pic y hasta ahi bien, pero como siempre cuando lo puse en la proto niwas.

Ya no se que hacer, aqui les adjunto el programa que en realidad quiero meterle al pic, haber si le ven algo feo.

Ultima edición por chacharas el Sab Mar 29, 2008 11:48 pm, editado 1 vez

chacharas

Reputación

comentario del autor Vie Mar 28, 2008 3:25 pm
   
como no he podido adjuntar el archivo aqui esta el programa:

LIST P=PIC16F84A


_XT_OSC equ 0x3FFD
_WDT_OFF equ 0x3FFB
_PWRTE_ON equ 0x3FF7
_CP_OFF equ 0x3FFF

__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF


;------------------------------------------------------------
; Declaración de Registros
;------------------------------------------------------------
w equ 0x0000
status equ 0x0003
porta equ 0x0005
portb equ 0x0006
pclath equ 0x000a
contador equ 0x000d
banderas equ 0x000e
_np_tiempo equ 0x000f
_np_tiempo1 equ 0x0010
_np_tiempo2 equ 0x0011
_np_tiempo3 equ 0x0012
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
ra2 equ 2 ;bit 2 delpuerto a
ra3 equ 3 ;bit 3 del puerto a
rb1 equ 1 ;bit 1 del puerto b
rb2 equ 2 ;bit 2 delpuerto b
rb3 equ 3 ;bit 3 del puerto b
rb4 equ 4 ;bit 4 del puerto b
rb5 equ 5 ;bit 5 del puerto b
rb6 equ 6 ;bit 6 del puerto b
rb7 equ 7 ;bit 7 del puerto b
rp0 equ 5 ;registrer bank select bit
rp1 equ 6 ;registrer bank select bit
z equ 2 ;bit cero
pulsado equ 0 ;


;------------------------------------------------------------
; Inicio
;------------------------------------------------------------

reset org 0
goto paso2


;------------------------------------------------------------
; programa principal
;------------------------------------------------------------
paso2
movlw b'00000000' ;configurar el puerto b como ssssssss
bsf status,rp0 ;cambiar a banco 1
movwf trisb
movlw b'00000001' ;configurar el puerto a como xxxsssse
movwf trisa
paso4
movlw d'00' ;se empieza la cuenta
bcf status,rp0 ;cambiar a banco 0
movwf contador
bcf porta,ra1
bcf porta,ra2
bcf porta,ra3
bcf portb,rb1
bcf portb,rb2
bcf portb,rb3
bcf portb,rb4
bcf portb,rb5
bcf portb,rb6
bcf portb,rb7
paso15
bcf banderas,pulsado ;iniciar el bit pulsado
paso16
btfsc porta,ra0 ;si el bit ra0 = 1
goto paso15 ;cierra el ciclo
btfsc banderas,pulsado ;si el bit pulsado = 1
goto paso16 ;cierra el ciclo

incf contador,1 ;contador = contador + 1
bsf porta,ra1 ;led indicador de cuenta
movlw .20 ;temporizador 255 mse
call tiempo_100_1000_mc
movlw .55
call tiempo_1_100_mc
bcf porta,ra1
bsf banderas,pulsado ;se esta pulsando
movlw d'110' ;si el reg contador >= d'110'
subwf contador,w
btfss status,c
goto paso16 ;cierra el ciclo
bsf portb,rb6 ;colgar
movlw .20 ;temporizador 255 mse
call tiempo_100_1000_mc
movlw .55
call tiempo_1_100_mc
bcf portb,rb6
movlw .2 ;temporizador 2 seg
call tiempo_1_255_mega_c
bsf portb,rb4 ;seleccion
movlw .20 ;temporizador 255 mse
call tiempo_100_1000_mc
movlw .55
call tiempo_1_100_mc
bcf portb,rb4
movlw .2 ;temporizador 2 seg
call tiempo_1_255_mega_c
bsf portb,rb4 ;seleccion
movlw .20 ;temporizador 255 mse
call tiempo_100_1000_mc
movlw .55
call tiempo_1_100_mc
bcf portb,rb4
movlw .2 ;temporizador 2 seg
call tiempo_1_255_mega_c
bsf portb,rb3 ;flecha derecha
movlw .20 ;temporizador 255 mse
call tiempo_100_1000_mc
movlw .55
call tiempo_1_100_mc
bcf portb,rb3
movlw .2 ;temporizador 2 seg
call tiempo_1_255_mega_c
bsf portb,rb4 ;seleccion
movlw .20 ;temporizador 255 mse
call tiempo_100_1000_mc
movlw .55
call tiempo_1_100_mc
bcf portb,rb4
movlw .2 ;temporizador 2 seg
call tiempo_1_255_mega_c
bsf portb,rb7 ;agenda
movlw .20 ;temporizador 255 mse
call tiempo_100_1000_mc
movlw .55
call tiempo_1_100_mc
bcf portb,rb7
movlw .2 ;temporizador 2 seg
call tiempo_1_255_mega_c
bsf portb,rb4 ;seleccion
movlw .20 ;temporizador 255 mse
call tiempo_100_1000_mc
movlw .55
call tiempo_1_100_mc
bcf portb,rb4
goto paso4 ;cierra el ciclo


;------------------------------------------------------------
; Declaración de Subrutinas
;------------------------------------------------------------

tiempo_100_1000_mc
movwf _np_tiempo
goto tiempo_100_1000_mc_1
tiempo_100_1000_mc_bucle2
nop
nop
nop
nop
nop
nop
nop
tiempo_100_1000_mc_1
movlw .22
movwf _np_tiempo1
tiempo_100_1000_mc_bucle1
movlw .150
movwf _np_tiempo2
tiempo_100_1000_mc_bucle
decfsz _np_tiempo2,1
goto tiempo_100_1000_mc_bucle
decfsz _np_tiempo1,1
goto tiempo_100_1000_mc_bucle1
nop
decfsz _np_tiempo,1
goto tiempo_100_1000_mc_bucle2
return


tiempo_1_100_mc
movwf _np_tiempo
goto tiempo_1_100_mc_1
tiempo_1_100_mc_bucle1
nop
nop
nop
nop
nop
nop
nop
tiempo_1_100_mc_1
movlw .246
movwf _np_tiempo1
tiempo_1_100_mc_bucle2
nop
decfsz _np_tiempo1,1
goto tiempo_1_100_mc_bucle2
nop
nop
nop
nop
nop
decfsz _np_tiempo,1
goto tiempo_1_100_mc_bucle1
return


tiempo_1_255_mega_c
movwf _np_tiempo
goto tiempo_1_255_mega_c_1
tiempo_1_255_mega_c_bucle2
nop
nop
nop
nop
nop
nop
nop
tiempo_1_255_mega_c_1
movlw .10
movwf _np_tiempo1
tiempo_1_255_mega_c_bucle1
nop
nop
movlw .99
movwf _np_tiempo2
tiempo_1_255_mega_c_bucle0
nop
nop
nop
movlw .200
movwf _np_tiempo3
tiempo_1_255_mega_c_bucle
nop
nop
decfsz _np_tiempo3,1
goto tiempo_1_255_mega_c_bucle
nop
nop
nop
decfsz _np_tiempo2,1
goto tiempo_1_255_mega_c_bucle0
nop
nop
nop
decfsz _np_tiempo1,1
goto tiempo_1_255_mega_c_bucle1
decfsz _np_tiempo,1
goto tiempo_1_255_mega_c_bucle2
return


End

chacharas

Reputación

asistió a la solución Vie Mar 28, 2008 8:24 pm
   
Hola. Siempre que programas un pic, antes de desconectarlo del programador, verifica que el .hex del bufer es similar bit a bit con el .hex guardado en el pic (funcion de verificar), asi descartas que se halla programado mal. Bueno ahora al problema en si, Te recomiendo desabilitar el brown out detect y el low program voltage, este ultimo puede causarte problemas con algunos programadores. Para programar el pic, te sugiero el winpic (no el winpic 800 sino el winpic) que es el mas sencillo de usar, y con el que mejores resultados he obtenido. Tambien esta el icprog, aunque es mas complicado. Tambien antes de programar, chequea los bit de configuracion (fusibles) en el programador, y chequea que el pic que vas a programar es el seteado. Como ultimo consejo, antes de conectar alguna etapa de potencia, actuadores o lo que sea, es recomendable probar inicialmente el circuito con leds. Bueno espero que te halla podido servir todo esto, cualquier problema no dudes en volver a preguntar. Saludos!

Fofo almarales

Reputación

asistió a la solución Vie Mar 28, 2008 8:51 pm
   
Otras de las cosas que habría que chequear, es la grabadora, quizá no este bien armada.....
La fuente, es elemental que sea estable, fija y libre de ruidos...así que olvidate de un simple transformador, es preferible implementar una batería de 9 con un regulador, en el caso de no tener una buena fuente....
Leí que eres nuevo en el foro, y note que no tienes el titulo apropiado a tu consulta.
Te recomiendo que leas el reglamento del foro y veas como es el sistema de valoracion, como se redacta la consulta y el titulo del post...
saludos

torres.electronico
Moderador
Reputación

comentario del autor Sab Mar 29, 2008 11:47 pm
   
gracias por la respuesta

Como veo eso de bit a bit que dices??.. lo que pasa es que como ven no le se muy bien aún a la programación en HEX y opr eso me estoy ayudadndo del niple.. lo que pienso es que no ha de servir la protoboard en la que lo estoy probando probare en otra. Resulta que cuando lo simulo me sale bien, lo quemo con watch dog desabilitado y todas las demas opciones y con XT habilitado. Y lo quemo y deahi me dice que ya esubo y entonces lo leo y me sale que si esta el programa, pero ya cuando lo implemento ya se muere. Ya probe mi chip con un programa bien chafa que prende nada mas leds y sigue sin reaccionar

Que otra cosa me recomiendaa que tal vez haya dejado de lado, ya estoy super desanimado porque esta cosa sigue inerte.

chacharas

Reputación

asistió a la solución Dom Mar 30, 2008 3:24 pm
   
lo de comprobar el .hex del pic con el .hex cargado, esto lo logras con la funcion de verificar (en el programa que utilizes para quemar el pic)

Fofo almarales

Reputación

comentario del autor Dom Mar 30, 2008 6:01 pm
   
Si lo he hecho la verdad, pero sigue sin jalarme, le ves algun problema a mi programa?

chacharas

Reputación

solución Lun Mar 31, 2008 12:43 pm
   
Hola. Primero es aconsejable borrar el puerto b con un clrf portb y no con bcf ya que por mucha memo que tenga el 84A, te puede llegar a limitar en proyectos mas complejos. Tambien para ahorrare la asignacion de nombres a los registros y a los bits, puedes utilizar la libreria del pic16f84a llamandola como include "p16f84a.inc" luego del list. Si no la tienes te la puedo facilitar. Una cosa muy sencilla, seria que nos pasaras el .asm para compilarlo, probarlo en fisico y decirte que error estas cometiendo y si es de hardware o de software. Aunque el proteus no es algo 100% infalible, el hecho que te arroje errores en fisico y no en simulado apunta a que la falla es bien sea de hardware (protoboard malo, cables muy finos, fuente etc etc etc) o del programador al momento de meterle el programa al pic.

Fofo almarales

Reputación



Hacer una pregunta

Reglamento / P+F

Foros

Miembros / Expertos