Autor Tema: FALLO OSCCAL INVALID  (Leído 2199 veces)

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

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
FALLO OSCCAL INVALID
« en: 10 de Marzo de 2020, 05:29:56 »
Buenas a todos!

Tengo 11 PCB con el micro 16F506. Las programo con el PICKIT-3 y en dos de ellas me sale el error  de 'OSCCAL INVALID VALUE'
apareciendo el mensaje de 'Programming failed at Program Memory address 0x000000'

¿Cómo puedo solucionarlo?

He visto que hay gente que lo consigue con la opción en el menú de TOOLS - OSCCAL - AUTO.. pero en el PICKIT3 no me sale esa opción.

Espero vuestra ayuda.
Saludos.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:FALLO OSCCAL INVALID
« Respuesta #1 en: 10 de Marzo de 2020, 06:26:50 »
Fijate si hay una opcion de auto-regenerar el OSCCAL, sino la otra opcion es cargarlo vos mismo. Y sino si ya lo borraste por completo y el valor desaparecio, que no le de importancia al OSCCAL.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:FALLO OSCCAL INVALID
« Respuesta #2 en: 10 de Marzo de 2020, 06:42:16 »
La opción de auto-regenerar no la tengo, solo 'Set Manually'.
He probado a cargar valores manualmente (Valores que tienen las otras 9 que sí he podido programar) pero cuando vuelvo a subir el .hex vuelve el fallo a salir.

Un a de ellas la he borrado completamente con 'Erase' y he vuelto a hacer el proceso y tampoco lo he solucionado.
Si le doy a omitir el fallo del OSCCAL y que programe de todas maneras me da error de "Programming failed ... 0x000000"

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:FALLO OSCCAL INVALID
« Respuesta #3 en: 10 de Marzo de 2020, 11:31:46 »
Intenta poner el valor del osccal directamente en el hex.  Normalmente van en la última posición de la flash.  Puede que tengas que escribir la línea hex completa.

  Luego abre el pickit3 y carga el hex modificado así se generará un nuevo checksum válido, lo salvas, lo vuelves a importar y lo intentas grabar a ver si te admite el osccal.

También, puedes intentar asignarlo directamente en el código del programa escribiendo ese valor en la flash mediante el uso de #org

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:FALLO OSCCAL INVALID
« Respuesta #4 en: 11 de Marzo de 2020, 04:54:03 »
Buenas,

nada conectar el pic vi que el valor de la última posición era '0C20'. Ahora lo intento poner manualmente en la opción de "Set Manually" y me se me quita el error de OSCCAL INVALID y el valor de la última posición me aparece 'C20'. Hasta ahí correcto. El problema viene cuando cargo el .hex ya que se me borra nuevamente el valor del OSCCAL y pasa a ser FFF.

He ido a probar la solución de indicarlo con el #ORG pero admito que no se cómo ponerlo en el código ni donde. He probado con #ORG 0x2C0 antes el bucle void pero me da fallo en compilación.

Muestro el cuerpo de mi código por si me podeis indicar dónde y cómo escribirlo.

Código: [Seleccionar]
#include<16f526.h>
#device ADC=16    //Los puertos analógicos ahora son digitales (datos=16bits)
#fuses INTRC_IO, NOMCLR, NOWDT                //Master Clear pin used for I/O
#use delay(internal=4000000)

//Definimos los pines y cómo los llamaremos a lo largo del programa
#define verde1 PIN_B0
#define rojo1 PIN_B2
#define verde2 PIN_C0
#define rojo2 PIN_C2


void main(){

//Configuración de periféricos
setup_timer_0(RTCC_INTERNAL);                                //Reloj interno
setup_comparator(NC_NC_NC_NC);                         //Anular comparadores

//int pulsar;


    for (;;) {

}
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:FALLO OSCCAL INVALID
« Respuesta #5 en: 11 de Marzo de 2020, 07:05:31 »
No pasa por el codigo, o es el programador (soft especialmente), o es el PIC. Y me juego mas por el programador.

Si posees algun otro programador distinto, ej.. Un Pickit2 si estabas usando un 3, podrias probarlo.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:FALLO OSCCAL INVALID
« Respuesta #6 en: 11 de Marzo de 2020, 07:56:43 »
Sí, debe de ser de algún problema que tenga el programador porque de "golpe y porrazo" me ha vuelto a programar las PCBs correctamente.

Me voy a comprar una para cuando vuelva a ocurrir descartar al menos este tipo de fallos.


Aún así agradecería que me contestaran a la cuestión que he hecho en el anterior post de cómo hacer lo de #ORG.

Gracias a todos!

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:FALLO OSCCAL INVALID
« Respuesta #7 en: 11 de Marzo de 2020, 12:23:16 »
Buenas,

nada conectar el pic vi que el valor de la última posición era '0C20'. Ahora lo intento poner manualmente en la opción de "Set Manually" y me se me quita el error de OSCCAL INVALID y el valor de la última posición me aparece 'C20'. Hasta ahí correcto. El problema viene cuando cargo el .hex ya que se me borra nuevamente el valor del OSCCAL y pasa a ser FFF.

He ido a probar la solución de indicarlo con el #ORG pero admito que no se cómo ponerlo en el código ni donde. He probado con #ORG 0x2C0 antes el bucle void pero me da fallo en compilación.

Muestro el cuerpo de mi código por si me podeis indicar dónde y cómo escribirlo.

Código: [Seleccionar]
#include<16f526.h>
#device ADC=16    //Los puertos analógicos ahora son digitales (datos=16bits)
#fuses INTRC_IO, NOMCLR, NOWDT                //Master Clear pin used for I/O
#use delay(internal=4000000)

//Definimos los pines y cómo los llamaremos a lo largo del programa
#define verde1 PIN_B0
#define rojo1 PIN_B2
#define verde2 PIN_C0
#define rojo2 PIN_C2


void main(){

//Configuración de periféricos
setup_timer_0(RTCC_INTERNAL);                                //Reloj interno
setup_comparator(NC_NC_NC_NC);                         //Anular comparadores

//int pulsar;


    for (;;) {

}
}

  Tienes que hacerlo al revés. Primero abre el hex y luego ponle el valor en Set manually.

  Es que eso es como los fuses. No puedes configurarlos en el propio pickit2 o 3, etc antes de importar el fichero hex, si no, cuando importas el hex todo se solapa por lo que hay en el hex.

  Como el hex viene con esa posición a 0xff pues se sobreescribe.

  Lo del #org tienes que conocer la última posición de flash de tu micro, donde se graba el osccal.

  Hazlo mejor con la directiva #ROM, colocada después de los fuses de esta forma:

#ROM int8 0xfffe= {0xcc}

   Sustituye el valor 0xcc por tu osccal. y el 0xfffe por la dirección del ultimo byte de tu flash.

  Así ese valor irá al pickit directamente asignado desde la compilación y no debería darte mas problemas.

Saludos.


 
« Última modificación: 11 de Marzo de 2020, 13:24:44 por remi04 »

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:FALLO OSCCAL INVALID
« Respuesta #8 en: 12 de Marzo de 2020, 03:08:56 »
De acuerdo!

Lo probaré! Muchas gracias compis!