Autor Tema: Soy yo o el XC8?  (Leído 2541 veces)

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

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Soy yo o el XC8?
« en: 10 de Julio de 2017, 12:33:22 »
Hola gente, acá estamos con una nueva inquietud o problema. Les cuento:

Tratando de programar el 16F628A después de crear el programa y abrir el programa del programador GPIC usb, pues me encuentro que la configuración para el PIC que introduje en el XC8 no se correspondía con la existente en el apartado correspondiente del GPIC usb, o sea, la configuración seteada en el XC8 era completamente distinta a la que "abrió" el GPIC.

Por cosas del destino, pues luego de tener el programa realizado y funcionando, deseo agragar el uso de un conversor A/D, por lo que migro todo al 16F870 (quedándome con la inquietud anterior) y ho sorpresa, pasa exactamente lo mismo que con el micro anterior, la configuración "programada" no se corresponde con la que abre el programador.

Unas imágenes:

Esta es la lo que yo "supuestamente" seteo en el XC8:


* MPLAB.png
(9.51 kB, 296x224 - visto 609 veces)


Y creo que es la forma correcta de programarlo, no se, ustedes me dirán?!

Y esta es la configuración que abre el GPIC por supuesto, del programa anteriormente mencionado:


* GPIC.png
(10.89 kB, 605x275 - visto 538 veces)


Como verán salvo el tipo de oscilador, todo lo demás esta contrario a lo deseado, y en el caso del 16F628A ni el oscilador coincidía.

Y acá mi duda, yo estoy haciendo algo mal? O es el XC8?

Como aclaración, el GPIC esta programado lo visto en la segunda imagen, porque programé el micro directamente con el archivo .hex dado por el XC8 y nunca funcionó, y el mismo .hex, seteando la configuración manualmente desde el GPIC anda correctamente. O sea, el GPIC está funcionando correctamente (hace rato que lo uso y nunca e tenido problemas), por lo que el problema esta entre el XC8 o mi mala programación.

Desde ya muchas gracias por la ayuda.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Soy yo o el XC8?
« Respuesta #1 en: 10 de Julio de 2017, 13:41:10 »
Raro Chaly, siempre que programe con el XC8, genere el .hex y luego de alli lo grabe con el programa del Pickit2 ( o su version para linux en linea de comandos ), y siempre coincidieron los FUSES.

Puede ser el GPIC tambien. La unica forma de saber con ciencia cierta quien es el equivocado es viendo el archivo .hex
Crear un programa basico que compile, y revisar el .hex para ver si los bytes son correctos o no.

Si lo son: El problema es el GPIC que no interpreta correctamente el .hex ( la parte de los bits de configuracion )
Si no lo son: Es el XC8 o hay algo mal configurado.


Antes en el MPLAB 8.xx existia un lugar donde decia si querias usar los bits de configuracion del codigo o usarlo de una tabla. Pero en MPLABX/XC8 no existe mas. Simplemente generar los bits de configuracion y listo. Pero recuerdo que si no detecta ningun fuse ( solo caso de PIC18 ), utiliza unos "default".

Si queres sacarte la duda, subi el .hex con "poco programa" solo el while(1) y vemos.


EDITO:

Acabo de ver una inconsistencia, en la version v1.36 de XC8 o del MPLAB, no me aparece el FUSE de DEBUG, a pesar que en le datasheet si figura. Aun asi, es el unico cambio respecto a lo demas:

Ejemplo:

Código: C
  1. #include <xc.h>
  2.  
  3. // CONFIG
  4. #pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
  5. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  6. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  7. #pragma config CP = OFF         // FLASH Program Memory Code Protection bits (Code protection off)
  8. #pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
  9. #pragma config LVP = OFF        // Low Voltage In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
  10. #pragma config CPD = OFF        // Data EE Memory Code Protection (Code Protection off)
  11. #pragma config WRT = OFF        // FLASH Program Memory Write Enable (Unprotected program memory may not be written to by EECON control)
  12.  
  13.  
  14. void main (void)
  15. {
  16.    
  17.         while(1)
  18.         {
  19.         }
  20. }

Esto me genera el siguiente .hex:

Citar
:02000000FE2FD1 - Una instruccion ASM de salto
:060FFA00FD2F8301FD2F15 - 3 insrtucciones ASM; 2 saltos y 1 clrf status
:02400E007AFD39 - Config
:00000001FF - Fin del archivo

En negrita estan mis fuses en little endian  es decir el valor de los FUSES es:

0xFD7A = 1111 1101 0111 1010

En si solo posee 14 bits, pero el .hex se maneja de bytes, por eso completa con 1.

Nos queda:
11 1101 0111 1010

Observando el datasheet, tenemos que:

CP off = 11 1101 0111 1010 (Son dos pares y deben coincidir)
DEBUG Off = 11 1101 0111 1010
Sin implementar = 11 1101 0111 1010
WRT Off = 11 1101 0111 1010
CPD Off = 11 1101 0111 1010
LVP Off = 11 1101 0111 1010
BOR On = 11 1101 0111 1010
PWRTE Off = 11 1101 0111 1010
WDT Off = 11 1101 0111 1010
FOSC HS = 11 1101 0111 1010

A pesar de que no tengo el bit de configuracion DEBUG, el codigo es el correcto.
El formato es correcto:

:02 400E 00 7AFD 39

Cantidad de Datos = 0x02 bytes
Direccion = 0x400E = es el doble de 0x2007  (Es el doble porque en el hex es de a 8bits, mientras que el PIC seria de a 16bits cada incremento en la direccion)
Tipo de linea = Datos = 0x00
Datos de esa linea en little endian = 0x7AFD
Checksum = 0x39

Revisa tu .hex, y verifica si los FUSES son los correctos. Si lo son entonces es el GPIC quien no detecta correctamente la configuracion. Resumen, deberias tener esta linea:
:02400E007AFD39
« Última modificación: 10 de Julio de 2017, 15:01:26 por KILLERJC »

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:Soy yo o el XC8?
« Respuesta #2 en: 10 de Julio de 2017, 15:06:27 »
Hola KILLERJC, y el .hex generado por mi coincide exactamente con el tuyo, por lo que asumo que el GPIC usb esta leyendo mal los bits, los lee mal, pero los programa bien.

De hecho, veo que cuando lee el .hex, el GPIC coloca el dato a programar en 2007 como 0686, por lo que lo está leyendo mal, y cuando lo configuro de manera manual, pues coloca el dato 3D7A (lo mismo que el tuyo pero con los bits más significativos en 0).

Conclusión, el GPIC USB lee mal el archivo .hex generado por XC8.

Será hora de cambiar el programador por un PICKIT3, aunque sea genérico.... :?

Muchas gracias por la ayuda, pensé que podía ser yo "programado" mal.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Soy yo o el XC8?
« Respuesta #3 en: 10 de Julio de 2017, 16:43:47 »
No lo recuerdo pero hay alguna herramienta gráfica en MPLABX para setear los fuses?. Lo comento porque si la hay y los pones en el código debería haber algún checkbox del tipo chafar los fuses en el código o chafar los fuses en el desplegable...

Creo recordad que en XC32 sí que existe esa opción por si pones fuses en código in harmony para saber cuales prevalencen...

Sólo una idea... :P
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Soy yo o el XC8?
« Respuesta #4 en: 10 de Julio de 2017, 16:46:45 »

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:Soy yo o el XC8?
« Respuesta #5 en: 10 de Julio de 2017, 17:14:26 »
Hola a ambos, pues después de cacharrear un rato con el programa del programador y los .hex, llego a la conclusión de que el problema es el programa GPIC.

Tal como a contado Killer:

Citar
En negrita estan mis fuses en little endian  es decir el valor de los FUSES es:

0xFD7A = 1111 1101 0111 1010

En si solo posee 14 bits, pero el .hex se maneja de bytes, por eso completa con 1.

Nos queda:
11 1101 0111 1010

Todo es correcto, pero los bits que el XC8 los pone en '1' (los rojos) y que no son de utilidad, antiguamente el MPLAB los colocaba en '0', esto no debería de acarrear problemas ya que no se utilizan para nada, pero pareciera que el GPIC si los interpreta y mal.

Yo e eliminado manualmente esos 'unos' del .hex que trae problemas y todo se a solucionado. Y funciona como es debido. Con antiguos .hex generador por el MPLAB en .asm el GPIC no tiene problemas.

Ahora mi nueva pregunta: Hay manera alguna que el XC8 no me genere esos bits en unos? O de alguna manera modificar el GPIC para que no los interprete?

Nuevamente muchas gracias por su ayuda.

Un saludo.

Atte. CARLOS.

« Última modificación: 10 de Julio de 2017, 17:16:54 por Chaly29 »
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Soy yo o el XC8?
« Respuesta #6 en: 10 de Julio de 2017, 20:36:56 »
Desde XC8 no se puede, intente varias cosas. Simplemente los llena como 1, imagino que pensando que como es una Flash su valor por default es 1, aunque el datasheet te dice que si no esta implementado deberia leerse como 0.


 

anything