Autor Tema: 16f873 y error 0000h -> Fallo de programa?  (Leído 4755 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado the_nitro

  • PIC12
  • **
  • Mensajes: 53
16f873 y error 0000h -> Fallo de programa?
« en: 28 de Mayo de 2004, 22:13:00 »
Hola a todos. Os comento:
Estoy haciendo mi primer proyectillo con un 16f873, es la primera vez que toco esto de los PIC, antes he usado el motorola 68000 para la facultad y eso.
Bueno al tema. He simulado todo el progrma con el MPLab, aunnque no he utilizado ningun include de definiciones ni nada de lenguaje de alto nivel, pues me resulta más sencillo trabajar con el Datasheet, mis definiciones y un editor de texto. Bien, como os decía he simulado y todo me funciona como deseo.
Mi problema se halla al intentar proramar el PIC,( uso un TE20 y el ICProg), que en la verificacion de la programacion me da un fallo en la direccion 0000h. He mirado, remirado, leido y releido tropecientos manualistos del ICprog, y todas las cosas al respecto. Nada de nada!!
La verdad es que ahora estoy hecho un lio del copon!, he perdido el concepto Memoria de datos y de programa. Si en el simulador todo funciona, ha de funcionar luego, no?. Si fuera por un error en los bancos de memoria.... como seleciono dnd escribir k cosas??? Ahora os puedo asegurar que estoy más perdido que al principio del asunto.
  Acabo de programarlo tb directamente en la placa como aparece en http://www.pacalaconcurso.com/, y nanai de la china. Persiste el error.
 Sin embargo si he observado que si abro el ICprog solo (con todos los valores a F) y programao eso, sí se programa OK. Sin embargo al programarle mi codigo y hacer una posterior lectura, aparece un cosigo que nada tiene que ver con el mio.
  Aki os expongo mi codigo:
 

;Mediante este programa pretendo mandar una serie de mensajes
; al hyperterminal de windows mediante el puerto serie, tras una
; posterior conversion mediante un max232. Solo son de envio,
; no pretendo tener en cuenta la respuesta del mismo.
;
;Solo hay 8 posibles mensajes, indicados por el bit activo
; que se le pasa a la subrutina CMD mediante W_REG
;
;
; Por favor, echadle un vistazo a ver si me podéis decir si
;algo esta mal. He quitado muchas cosas para que no ocupe mucho
;y se haga tedioso, pues son datos sin importancia.
;
; Agradecería tambien si alguien me pudiera aclarar lo de
;como situar unos datos en mem de programa y mem de datos, o
;es k lo hace automático en ensamblador?? Es que ya estoy muy
;liado.
; Gracias de antemano a todos. Un Saludo
;

LIST P=16F873
;
;DECLARACION DE REGISTROS
;

PCL EQU 02h ;Indirecciomiento

PORT_A EQU 05h ;Puerto A
PORT_B EQU 06h ;Puerto B
PORT_C EQU 07h ;Puerto C

STATUS EQU 03h ;Registro de Estado

TRISA EQU 85h ;Configuracion puerto A
TRISB EQU 86h ;Configuracion puerto B
TRISC EQU 87h ;Configuracion puerto C

INTCON EQU 0Bh ;Registro interrupciones
OPTION_R EQU 81h

PIE1 EQU 8Ch ;Interrupciones
PIR1 EQU 0Ch ;Flags varios

TXSTA EQU 98h ;Registro Status Transmision
RCSTA EQU 18h ;Registro Status Recepcion
SPBRG EQU 99h ;Baud Generator
TX EQU 19h ;Registro de Transmision



;-------------------------------------------------------------------------------------------
;VARIABLES DE PROGRAMA
;

PTR EQU 20h ;Para recorrer tablas de Comandos
COMANDO EQU 21h ;Variable Aux. para saber que comnado tomar
EOC EQU 22h ;End Of Command?
CMD_AUX EQU 23h ;Varble aux comando introducido

W EQU 0
F EQU 1


;--------------------------------------------------------------------------------------------
;
;MEMORIA DE PROGRAMA [RAM] [Llamemoslo X]
;
;Vectores
ORG 00h
GOTO MAIN

ORG 04h
GOTO RTI


MAIN:
;Deshabilitamos todos los flags e interrupciones
BCF STATUS,6 ;Banco 0
BCF STATUS,5
CLRF INTCON
CLRF PIR1

BSF STATUS,5 ;Banco 1
CLRF PIE1


;Configuramos puertos
BSF STATUS,5 ;Banco 1
MOVLW B"00000000"
MOVWF TRISA ;Salida
MOVLW B"00000001"
MOVWF TRISB ;Salida / Interrupcion Externa
MOVLW B"11000000"
MOVWF TRISC ;Puerto serie

;Configuramos UART
CALL UARTINIT

;Habilitamos interrupciones
BSF STATUS,5 ;Banco 1
BSF OPTION_R,6 ;INT por flanco de subida


BCF STATUS,5 ;Banco 0
BSF INTCON,7 ;GIE
BSF INTCON,4 ;INT Externa


LOOP ;SLEEP
NOP
NOP
NOP
MOVLW B"00000001"
CALL CMD
GOTO LOOP
;-------------------------------------------------------------;
;RUTINA DE TRATAMIENTO DE INTERRUPCION
;

RTI
BTFSC INTCON,1 ;Interrupcion Externa?
GOTO RTI_S ;Si -->RTI_S
;No -->fIN

RETFIE

;---------------------------------------------------;*SUBPROGRAMAS*
;---------------------------------------------------
UARTINIT:
;Inicializacion de la UART
BSF STATUS,5 ;Banco 1
MOVLW 19h ;25 en decimal
MOVWF SPBRG ;Para 4MHz
BSF TXSTA,2 ;HI-SPBRG
BSF TXSTA,5 ;TX activo

BCF STATUS,5 ;Banco 0
BSF RCSTA,7 ;Puerto serie ON

BSF STATUS,5 ;Banco 1
BCF PIE1,4 ;Interrupcion TX OFF

RETURN

;------------------------------------------------
RTI_S:
MOVLW B"00000001" ;BIT 0 --> CMD0
CALL CLAXON
CALL LUCES
CALL CMD
BCF INTCON,1 ;Limpiamos Flag interrupcion externa
RETURN

;-------------------------------------------------------------------------------------------
CMD: ;Envia el comando cargado en el Acumulador  [0 CMD0, 1 CMD1, 2 CMD2....]
CLRF PTR ;Inicializamos puntero despl.
MOVWF CMD_AUX ;Guardamos el Comando pasado

NX_CHR MOVF PTR,W ;Puntero despl. a W
BTFSC CMD_AUX,0
CALL CMD0
GOTO X1

X1 BTFSC CMD_AUX,1
CALL CMD1
GOTO X2

X2 BTFSC CMD_AUX,2
CALL CMD2
GOTO X3

X3 BTFSC CMD_AUX,3
CALL CMD3
GOTO X4

X4 BTFSC CMD_AUX,4
CALL CMD4
GOTO X5

X5 BTFSC CMD_AUX,5
CALL CMD5
GOTO X6

X6 BTFSC CMD_AUX,6
CALL CMD6
GOTO X7

X7 BTFSC CMD_AUX,7
CALL CMD7

ADDLW 0 ;Si W=0 --> Z=1
BTFSC STATUS,2 ;Z=0 ?

RETURN ;Si -->Ultimo chr del comando

CALL SEND_CHR ;No -->Quedan chrs por tx en el comando
INCF PTR,F ;Incrementamos PTR despl.
GOTO NX_CHR


;-------------------------------------------------------
SEND_CHR: RETURN
;Envia caracter cargado en W
SEND_LOOP NOP
BSF STATUS,5 ;Banco 1
BTFSC TXSTA,1 ;TSR lleno?
GOTO SEND_LOOP ;Si ->Se esta trasmitiendo otro-> Esperar
BCF STATUS,5 ;Banco 0
MOVWF TX ;No ->Carga el caracter para Tx

RETURN




;---------------------------;
; TABLAS
,---------------------------;

TABLA0 ADDWF PCL,F
RETLW 45h
RETLW 40h
...................
...................
RETLW 13h ;<CR>
RETLW 00h

TABLA1 ADDWF PCL,F
RETLW ........
RETLW 00h
TABLA2 ADDWF PCL,F
RETLW......
......
.......

END

Desconectado the_nitro

  • PIC12
  • **
  • Mensajes: 53
RE: 16f873 y error 0000h -> Fallo de programa?
« Respuesta #1 en: 28 de Mayo de 2004, 22:16:00 »
 Bueno, siento haber puesto un post tan largo, pero no veía forma de explicar mi problema de forma más corta y clara.
  Espero que me podáis ayudar, pues por lo que tengo visto, este es de los pocos foros que se pueden contar con los dedos de las manos en las que se ve que hay gente que de verdad está puesta en el tema.
  Un millon de gracias por adelantado, un saludo.

Desconectado the_nitro

  • PIC12
  • **
  • Mensajes: 53
RE: 16f873 y error 0000h -> Fallo de programa?
« Respuesta #2 en: 28 de Mayo de 2004, 22:20:00 »
 Otra cosilla, puede ser k el pic este muerto???
 Pero si es nuevo!!!, antes de pincharlo en la placa se metio en el TE20!! y ya daba ese problema.

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: 16f873 y error 0000h -> Fallo de programa?
« Respuesta #3 en: 29 de Mayo de 2004, 11:59:00 »
Ummhh... yo de pics no entiendo nada. Pero se me ocurre que pueden ser dos cosas:
O el pic está cocinado, me pasó esta semana al conectar por error un 873 a 12v.
O puede que lo estés programando con la opción de proteger el pic contra lectura. Creo que la verificación falla porque el programador no puede leer lo que escribió. Si este fuera el caso podrías probar borrandolo completamente y volviendo a escribir asegurandote que la opción de protección de lectura está desabilitada...

Desconectado jca

  • PIC12
  • **
  • Mensajes: 75
RE: 16f873 y error 0000h -> Fallo de programa?
« Respuesta #4 en: 29 de Mayo de 2004, 20:43:00 »
hola compañero este error es desesperante, lo reconozco a mi me tuvo una buena temporada detras de el y bueno quien de nosotros no ha tenido ese error alguna vez, el T20 es comprado?o le has hecho tu?, de todas formas prueba una cosa cuando abras el IC-prog en vez de cargar tu programa primero borra el dispositivo y luego escribe tu algo en la memoria de programa e intenta grabarlo, si aun así sigue dandote ese error es que es problema de tensiones en el programador, si el programador lo has hecho tu lo mejor que puedes hacer es coger los 6 diodos que lleva el programador y los 3 transistores y ponerlos nuevos, no te preocupes pq el gasto de hacer esto es mínimo, vamos que con unos cuantos euros lo arreglas, pq al pic le da igual lo que le grabes, otra cosa es que haga lo que tu quieras o no.

Espero haberte ayudado. Saludos

Desconectado the_nitro

  • PIC12
  • **
  • Mensajes: 53
RE: 16f873 y error 0000h -> Fallo de programa?
« Respuesta #5 en: 30 de Mayo de 2004, 01:02:00 »
Hola colega,
  la verdad es k si lo probe, y...nanai, el caso es k si programo el chip en vacio (todo F) y lo programa bien.
  De hehco, como comentaba arriba, incluso  he probado a utilizar el onchip programing o como leches se llame, el de pacalaconcurso vamos. pero nada :S
  Ahora lo k he hecho es buscarme la vida y adaptar el codigo aun 16f84 y ahora me va todo de pm, pq la uart la he emulado (200 ejempo en interenet pa eso) y va de lujo y no da ni un solo problema.
 Crees k puede ser k el PIC este kemado? como lo solucionaste?
 Gracias compañero, un saludo

Desconectado odukec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 174
RE: 16f873 y error 0000h -> Fallo de programa?
« Respuesta #6 en: 30 de Mayo de 2004, 13:28:00 »
Hola..
hace poco programe un pic 873 y me salia ese mismo error.. despues de el desespero y la rabia , me puse a la tarea de ver que era lo que pasaba.. pues me di cuenta que la alimentacion del pic cuando lo estaba programando no estaba llegando bien.. yo tengo un propic el que se conecta al puerto paralelo.. mire y era un pinche transistor que habilita la alimentacion.. lo arregle hice la prueba y funciono entro el programa al pic rapidito..
Bueno no se depronto te pueda servir lo que me paso..

Saludos

Desconectado CDT_Gonzalo

  • PIC12
  • **
  • Mensajes: 93
RE: 16f873 y error 0000h -> Fallo de programa?
« Respuesta #7 en: 31 de Mayo de 2004, 00:09:00 »
El error 0000h no es un error en el codigo, ya que ICProg no interpreta lo que vos escribis en el PIC. El tema es el siguiente. Cuando vas a programar un PIC, el ICProg, borra el contenido del mismo, graba la memoria de programa, luego la memoria de datos, y lee el contenido de la memoria de programa y despues de la de datos. Si cuando lee la memoria, sea de programa o de datos, no coincide con lo que ves en la pantalla, te indica en que parte esta el error, en ese caso, en 0000h, eso quiere decir, que lo que lee del PIC, no es lo que esta en la pantalla (que es tu codigo en HEX). Es por eso que cuando programaste teniendo la pantalla en "blanco" te dio OK, porque lo que esta leyendo del PIC es 3FFF, y lo que tenes en la pantalla es lo mismo

Las opciones son 3:

-El programador esta mal echo (el voltaje esta en 12v justos, no regules la fuente en ese caso, o conseguite un DZ o un Regulador un poco (reitero UN POCO) mas grande, creo que no tenes q pasarte de los 13.4v)
-El ICProg está mal configurado (chequea como pide tu programador que configures el ICProg, por ejemplo MCLR invertido, etc)
-El PIC está quemado (comprate algun PIC chico y dentro de todo barato, como el 16F628, y proba, o pedile a algun conocido te preste un PIC, asi probas, si los otros funcionan, el PIC muy probablemente murió

Saludos!

Desconectado edo_luna

  • PIC10
  • *
  • Mensajes: 1
Re: 16f873 y error 0000h -> Fallo de programa?
« Respuesta #8 en: 09 de Abril de 2009, 19:38:04 »
Hola!
yo estoy usando el pic18f452, con el JDM y tengo problemas tanto con icprog como el winpic. Lo curioso es que los dos me mandan distintos errores. el ICprog me arroja el clasico "error de verificación 0000H ", del cual se ha hablado mucho pero no he podido solucionarlo (dicen q hay que deshabilitar el CP en una ventanita pero eso corre para el 16f84, pero con este sale otro menu distinto)
Y con el winpic me sale lo siguiente:

Resultado de la carga Hex: LastProgAdr=0x0043FE LastDataAdr=0xEFFFFF (C:\Documents and Settings\Edo\Mis documentos\Universidad\Tesis\practicas de c\lcd2.hex)
Programando...
Borrando ("Completa" o "Chip")...
Borrar chip empleando algorítmo "PIC18F_OLD" .
Borrar todo: ¡ Algoritmo de borrado COMPLETO no encontrado !
¡ Fallo en intento de borrado !
Programando CÓDIGO, 0x000000..0x0043FE
Verificando CÓDIGO, 0x000000..0x0043FE
Verificando 0x06lX..0x000000
Error de verificación: 000000: Leido=002800, Deseado=00EF0C, mask 00FFFF ==> diff=00C70C
Error de verificación: 000002: Leido=003000, Deseado=00F001, mask 00FFFF ==> diff=00C001
Error de verificación: 000004: Leido=003FFF, Deseado=00FFFF, mask 00FFFF ==> diff=00C000
Error de verificación: 000006: Leido=003FFF, Deseado=00FFFF, mask 00FFFF ==> diff=00C000
Más errores de verificación, no es posible enlistar todos (total=379)
Programando CONFIG, 0x300000..0x30000C
Verificando CONFIG, 0x300000..0x30000C
Verificando 0x06lX..0x300000
ERROR: ¡ Programación FALLIDA !

¿¿¿¿¿Que esta pasando?

Espero que alguien pueda ayudarme. Muy agradecido de antemano


 

anything