Proyecto - Recuperar valor configuración OSCCAL en PIC´s 12F629/75

----- Introducción ----------------

Hace tiempo me llamó la atención la cantidad de personas preguntando como recuperar el valor de calibración que viene grabado en ciertos PIC.

Grabado en la última posición del área de programa, este valor permite calibrar el oscilador interno a 4Mhz con una precisión de +-1%.
El problema viene, en estos micros, que si por error se borra todo el micro y no se guardo ese valor -si bien el micro seguirá funcionando normalmente- al requerir cálculos de tiempo ya no se sabrá la base a la que el oscilador interno esta trabajando.

Generalmente este valor permite variar el oscilador entre unos 780khz a 1300Khz (no todos tienen los mismos limites, aun si son del mismo modelo).

Los programadores generalmente avisan al intentar sobrescribir el valor que viene de fábrica, pero si no lo hace o se hace caso omiso a la advertencia y se sobrescribe habrá que buscar algún método para volver a recuperar dicho valor.


----- Aproximaciones --------------

Viendo por internet hay varios métodos pero todos tienen el problema de que son complicados.

Por ejemplo, Microchip presenta este método de calibración: http://www.microchip.com/stellent/idcpl ... e=en012094
El problema es que se necesita un osciloscopio, un generador de funciones, un tester con frecuencímetro (o frecuencímetro). Instrumentales que no siempre tiene cualquier aficionado a la electrónica.

Otro método es: http://picprojects.org.uk/projects/reca ... struction_
Requiere un transformador (hay que destacar el método empleado para obtener un generador de frecuencias) pero ademas de eso una PC.
Primero hay que grabar un programa dentro del micro, colocarlo en el circuito, hacerlo funcionar. Leer el valor de calibración que, una vez se halla encontrado, estará guardado en la EEPROM. Pasar ese valor a la última posición del programa, grabar el micro y recién ahí esta todo listo.

Demasiado complicado para un hombre vago como yo.


----- Circuito --------------------

Así que mas que por necesidad (ya que hasta ahora nunca perdí el valor de calibración) sino mas bien por curiosidad me puse a crear mi propio circuito para restaurar el valor.
En realidad solo tenia curiosidad de como se programan los micros... pero... ya que estaba... de paso...

El circuito que use es el siguiente:

Circuito.jpg

Esta realizado en Switch-CAD(TM) para poder colocarle anotaciones.

El HEX para grabar el micro Maestro, el PDF con la placa lista para transferencia (método de la plancha) y la guía de los componentes: OSSCAL.zip (Archivo adjunto).


----- Funcionamiento -------------

Básicamente lo que hace es: grabar un programa en el micro esclavo, enviarle ordenes para que cargue diversos valores en el registro OSCCAL para variar la frecuencia. Mide esta frecuencia hasta que la misma este dentro del rango de 1Mhz +-1%. Cuando encuentra que la frecuencia es correcta borra todo el micro y graba en la última posición el valor hallado dejándolo como viene de fábrica.

Hay que tener en cuenta lo siguiente:

- El circuito borra todo el micro, así que si hay algo dentro que no debe borrarse habrá que hacerle un BackUp primero.
- El circuito salva los Band Gap bits.
- Solo funciona con los PIC 12F629 y 12F675
- El micro Maestro deberá tener el valor de calibración correcto (el que viene de fábrica) ya que el calculo de la frecuencia depende de ello.


----- Pruebas --------------------

En las pruebas que hice ha tenido un éxito de 100%. He probado con 3 12F629 y con 2 12F675, nuevos sin uso y con el valor original que viene de fábrica, al saber el valor que debería tener según Microchip puede comparar con el valor que recupera el circuito y de los 5 micros que probé, los 5 fueron idénticos al valor que traen de fabrica.

Como se observa no hace falta complicados métodos ni instrumentales que no siempre están en el taller, ni siquiera una PC. Solo colocar el micro en el zócalo, presionar el botón. Las luces verdes y rojas parpadearan, luego la luz verde quedara prendida un tiempo -En ese momento esta buscando la frecuencia- y al apagarse las luces verdes y rojas parpadearan nuevamente ya que están grabando el valor encontrado. Una vez esto el micro quedara limpio y con el valor salvado en la última posición.


----- A resolver/Agregar ---------

- Falta una parte que comprueba que micro esta insertado. Si se coloca otro micro que no sea los especificados puede llegar a dañarlos.
Tampoco comprueba si hay un micro o no colocado.

- Como se ve en el diagrama, hay un LED que debería indicar cuando el proceso terminó. Al ponerlo en el circuito encontré que de alguna forma la tensión presente en el pin 6 del micro esclavo pasa a VCC alimentando el micro y haciéndolo funcionar.Tengo que investigar que esta pasando ahí y porque hace eso.
Esa parte no esta implementada en el software.

- Agregar una comprobación de que el programa primero y el código luego fue correctamente grabado, en caso contrario hacer parpadear el LED de "Done".

- Algún día lo implementare en algún microcontrolador con mas pines para añadirle algunas características mas pero, por ahora, quiero evitar la fatiga... :LOL:

----- Aclaraciones ---------------

En el diagrama que puse se ve que las tensión VPP dice 13V pero si se observa detalladamente el regulador entrega 12v. En un principio había puesto 13v (se coloca 2 diodos en serie y en directa entre el pin GND del 7812 y GND misma con lo que en la salida habrá 12v + 0.7v + 0.7v ~= 13.4V) pero en las pruebas use 12v y no hubo problemas. De echo en las hojas de datos se señala que solo hace falta una tensión mínima de 8.5v para VPP.

Ademas, en el diagrama me falto poner un capacitor de 100nf que iría lo mas cerca posible al micro esclavo entre el pin 1 y el 8, osea entre la alimentación del mismo. El error vino de dibujar los dos en paralelo luego del 7805 cuando la alimentación del PIC esclavo esta comandada por el transistor superior. Corregido en el esquema.


----- Vídeo demostración -----

Warning - Achtung - Precaución: El vídeo que sigue no es apto para personas sensibles, puede contener lenguaje incomprensible, errores y/u omisiones.


Vista de los componentes:

Componentes.jpg

Versión 0.6: http://www.mediafire.com/view/1nqa07ua3 ... L_V0.6.HEX (Archivo adjunto).

- Al terminar de grabar el micro, ahora deja la configuración con el pin MCLR como MCLR en vez de un pin I/O y la configuración del oscilador como XT, evitando así que el micro no pueda ser regrabado con un programador ICSP.

Versión 0.5: http://www.mediafire.com/view/xa4v3k745 ... L_V0.5.HEX

- Corrección de algunos errores menores.

Versión 0.4: http://www.mediafire.com/view/wj5go0840 ... L_v0.4.HEX

- Añadida la comprobación del programa grabado.
- Si no hay micro a comprobar o el programa no esta bien grabado el LED verde destellara 3 veces.
- En caso de que por algún error no haya podido recuperar el valor de la calibración el LED verde destellara 2 veces.

Versión 0.2: http://www.mediafire.com/view/cu32nt17c ... AL_0.2.HEX

- Ahora el micro maestro puede ser tanto el 12f629 o el 12F675.
- De no hallar el valor del oscilador ahora borra el programa usado para la calibración.

Saludos
- Javier -
 

Adjuntos

  • OSCCAL V0.6.HEX.zip
    1 KB · Visitas: 3
  • Osccal.zip
    539.8 KB · Visitas: 4
Ese circuito lo habia hecho hace años andaba por la red , me quedaba dañado el 629 al usar un programador casero jajajja hay lo encontre en uno de los cajones jaja este muchacho deber ser el creador de ese circuito muy agradecido ...
16353870453561640176406.jpg
 
Última edición:
Arriba