Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Todos los Microcontroladores y sus diferentes "familias". Todo este espacio es tuyo para mostrar tu código, consultar con los que más conocen del tema y para disfrutar de estos increíbles y poderosos componentes electrónicos.

Moderador: HJ

Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Notapor Switchxxi » Mar Abr 02, 2013 6:41 pm

Guenas y santas...

----- 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 frecuencimetro (o frecuencimetro). 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:

Diagrama.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:
Osccal.zip
(539.83 KiB) 529 veces


Un PCB muy mejorado, mas lindo y compacto, echo por HJ: http://www.servisystem.com.ar/foro/viewtopic.php?f=5&t=56&start=40#p2665



----- 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".


----- 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


ACTUALIZACIÓN

----- 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 :lol: .




PCB diseñado por HJ: http://www.servisystem.com.ar/foro/viewtopic.php?f=5&t=56&start=40#p2665


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

- Al terminar de grabar el micro, ahora deja la configuracion con el pin MCLR como MCLR en vez de un pin I/O y
la configuracion del oscilador como XT, evitando asi 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.




Ojala que a alguien le pueda llegar a servir.

Saludos
- Javier -
Última edición por Switchxxi el Mié Ago 27, 2014 9:56 pm, editado 13 veces en total
En mis circuitos, el humo no se cobra, va de regalo.
            Imagen
Avatar de Usuario
Switchxxi
 
Mensajes: 215
Registrado: Sab Mar 23, 2013 4:10 pm
Ubicación: Bs. As - Argentina

Re: Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Notapor HJ » Mar Abr 02, 2013 6:53 pm

Muy buen aporte.
Esto le va ha venir de diez a mas de uno.

Por suerte nunca me pasó, pero conozco gente que si le sucedió.

Gracias Switchxxi

Saludos
HJ
"Cuando llegue la inspiración, que me encuentre trabajando"
Picasso, Pablo
Avatar de Usuario
HJ
 
Mensajes: 477
Registrado: Jue Mar 21, 2013 3:16 pm
Ubicación: Tanti - Córdoba - Argentina

Re: Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Notapor Switchxxi » Mar Abr 02, 2013 7:48 pm

Gracias HJ... Ojalá pueda servirle a alguien. A mi, al menos, me sirvió para aprender como se programan los micros PIC.

Una cosa que note es que la frecuencia la calibra para cualquier lado xD. Puede parecer que el circuito no anda pero explicare ya que me olvide de ponerlo.

Compro un micro y leo el valor del OSCCAL xx, luego pongo ese micro en el circuito y el valor que recupera también es el que leí antes, osea que el valor que recupero es el mismo que Microchip calibro para ese micro en especial.
Ahora si mido la frecuencia de salida -que debería estar en 1Mhz +- 1%- en mi osciloscopio en realidad me marca valores muy lejos. En uno por ejemplo me marco 1.120Mhz, muy lejos de 1%.
Ya que no puedo dudar de Microchip, pensé en el osciloscopio ya que no es de primera marca.

No tengo generador de frecuencias pero si un celular con salida para tv y al medir el pulso de burst en salida NTSC mide aproximadamente entre 3.57 - 3.59Mhz con lo que descarto que el osciloscopio este midiendo cualquier cosa.

O hay algo que se me esta pasando de largo o Microchip calibra mal los micros xD.

Si uno observa el incremento de frecuencia de un valor al próximo es de 10khz -bastante inteligente siendo que el 1% de 1Mhz es precisamente 10Khz-. Si bien la temperatura y la tensión pueden variar el valor, la frecuencia que leo, esta en el orden del 10% o mas.

Así que empece a desconfiar de la calibración que viene de fabrica.

El que tenga un frecuencimetro y un PIC ya sea el 12F629 o el 12F675 y quiere probarlo me gustaría saber el resultado. El procedimiento no puede ser mas sencillo, solo hay que compilar este código:

Código: Seleccionar todo
   list   p=12F629
   radix   dec   
   
   include   "p12f629.inc"
   
   errorlevel   -302   ; Don't complain about BANK 1 Registers

   __CONFIG   _MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_CLKOUT  ;Internal osc.

#define     rp0      5               ; bit 5 of the status register

      org   0x00

SetUp
      bsf      STATUS, rp0    ; Bank 1   

      call   3FFh
      movwf   OSCCAL         ; Calibra el oscilador

      movlw   b'10000000'      ; Turn off T0CKI, prescale for TMR0 = 1:2, pull-up off
      movwf   OPTION_REG

      movlw   b'00111111'      ; output 0 = Out; 1 = In
      movwf   TRISIO            ;

      bcf      STATUS, rp0      ; bank 0 

      movlw   07h            ; Set up W to turn off Comparator ports
        movwf   CMCON           ; must be placed in bank 0

Inicio
      goto   Inicio

   end


y medir en el pin 3 del micro la frecuencia de salida.

Saludos.
En mis circuitos, el humo no se cobra, va de regalo.
            Imagen
Avatar de Usuario
Switchxxi
 
Mensajes: 215
Registrado: Sab Mar 23, 2013 4:10 pm
Ubicación: Bs. As - Argentina

Re: Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Notapor Mario » Mar Abr 02, 2013 8:09 pm

Hola Javier!
Muy interesante y útil tu trabajo. Coincido con Héctor en que nunca he dependido de eso, pero de que conozco personas que han necesitado de esta precisión y mágicamente no existía más, luego de varias programaciones del PIC.

Switchxxi escribió:Ya que no puedo dudar de Microchip, pensé en el osciloscopio ya que no es de primera marca.

No tengo generador de frecuencias pero si un celular con salida para tv y al medir el pulso de burst en salida NTSC mide aproximadamente entre 3.57 - 3.59Mhz con lo que descarto que el osciloscopio este midiendo cualquier cosa.


Yo no dudaría del osciloscopio.
En ultima instancia puedes controlarlo (rápida y fielmente) conectando tu programador de PICs USB (que mencionas en otro hilo) y fijándote a cuanto trabaja el cristal y si coincide o hay gran desviación. Esa es una prueba sencilla y con hardware "ready to use", es decir, no tienes que montar nada en protoboards o cosas así.

Saludos!
Mario
En Servisystem, hay una sección de Montajes que puede llegar a interesarte. Hay muchas ideas útiles y montajes electrónicos para construir. No te olvides: todo lo que sea importante, también estará en el Blog.
Avatar de Usuario
Mario
Administrador del Sitio
 
Mensajes: 428
Registrado: Vie Ene 28, 2011 7:22 am
Ubicación: Principado de San Nicolás de los Arroyos

Re: Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Notapor HJ » Mar Abr 02, 2013 9:05 pm

Bueno tocayo, hice la prueba con un 12F675 que es lo que tenía a mano y está dentro de las especificaciones.

Calibración_675.JPG
Calibración_675.JPG (39.59 KiB) Visto 6006 veces


Te adjunto una captura de pantalla de la medición.
TEK0004.JPG
TEK0004.JPG (16.7 KiB) Visto 6006 veces


Fijate que la frecuencia medida es de 990,1KHz.

si sacamos el promedio nos da:[(1000 - 990.1) / 1000] * 100 = 0.99%

Saludos
HJ
"Cuando llegue la inspiración, que me encuentre trabajando"
Picasso, Pablo
Avatar de Usuario
HJ
 
Mensajes: 477
Registrado: Jue Mar 21, 2013 3:16 pm
Ubicación: Tanti - Córdoba - Argentina

Re: Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Notapor HJ » Mar Abr 02, 2013 9:27 pm

Bueno, acabo de descubrir una posible causa de tu diferencia de valor medido, por este método.

Resulta que por costumbre siempre le coloco un capacitor de 10nF entre los pines de alimntación del micro y hoy también lo hice.

Ahora realicé nuevamente la medición, pero sin el capacitor y ohhh sorpresa, la frecuencia varía y bastante...

Te adjunto captura de pantalla.
TEK0005.JPG
TEK0005.JPG (17.32 KiB) Visto 6003 veces


ahora la medición da 1099 MHz... lo que dá un error de 9.9%... mucho mas de lo indicado por el fabricante.

En este caso lo que falló el procedimiento de medición por la ausencia de un capacitor entre Vcc y GND.

Saludos
HJ
"Cuando llegue la inspiración, que me encuentre trabajando"
Picasso, Pablo
Avatar de Usuario
HJ
 
Mensajes: 477
Registrado: Jue Mar 21, 2013 3:16 pm
Ubicación: Tanti - Córdoba - Argentina

Re: Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Notapor Switchxxi » Mar Abr 02, 2013 9:38 pm

Hola Mario. Haré esa prueba a ver si realmente mide 12Mhz que es la frecuencia a la que trabaja el programador.

Hj. Acabo de hacer una prueba con un PIC12F629 virgen, osea con el valor de calibración original. Con el valor 0x3C la frecuencia era de 986Mhz = 1,4%, si cambio el valor a 0x40 (ya que el micro ignora los dos bits de menor peso) la frecuencia pasa a 991Khz = 0,9% pero si uso el siguiente valor 0x44 la frecuencia es 1Mhz casi exacto, la resolución de mi osciloscopio es de 3 decimales así que varia aprox +- 1khz.

Por cierto, creo que el problema era medirlo mediante un cable común con el circuito sobre el protoboard y no directo con la punta de prueba sobre el pin del micro.

Después haré mas pruebas con otros micros ya que parece interesante mas si se puede "afinar" la frecuencia.

Saludos.

Edito, hay un capacitor cerca de 100nf cuando medí cualquier cosa, pero es interesante el dato.
En mis circuitos, el humo no se cobra, va de regalo.
            Imagen
Avatar de Usuario
Switchxxi
 
Mensajes: 215
Registrado: Sab Mar 23, 2013 4:10 pm
Ubicación: Bs. As - Argentina

Re: Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Notapor Switchxxi » Mié Abr 03, 2013 1:39 am

Pequeña actualización sobre el capacitor, el oscilador, etc.

Efectivamente, Mario, no se me había ocurrido usar el cristal del programador. Mide bien, las mediciones saltan entre 11.98Mhz y 12.00Mhz.

20130208_844806.jpg
20130208_844806.jpg (67.57 KiB) Visto 5992 veces



Ademas encontré el grosero error que estaba cometiendo. Al principio no borraba el programa una vez que se hallaba el valor de calibración por lo que quedaba en pantalla la frecuencia a la que lo calibraba, eso lo hacia para poder ver si el código andaba bien o no.
Cuando probé, que la frecuencia salto para cualquier lado, fue después, cuando no hay código en el micro por lo que la frecuencia de salida sigue estando ya que no depende del código pero en cualquier lado ya que el registro OSCCAL esta cargado valla a saber con que :oops: :oops: .


No fue del todo en vano ya que al igual que HJ comprobé lo que la falta de un capacitor de 100nf cerca del micro puede hacer.

Salida con el capacitor de 100nf:

20130208_845854.jpg
20130208_845854.jpg (111.92 KiB) Visto 5992 veces


Y sin el capacitor:

20130208_850849.jpg
20130208_850849.jpg (165.2 KiB) Visto 5992 veces


En esta ultima imagen se ve que la frecuencia cambia y si bien parecería ser mejor sin capacitor que con el, hay que observar que la señal se degrada bastante apareciendo ruido en ella. Si se observa la señal de HJ se nota aun mas el ruido en los pulsos.


La verdad que esto lo dejo para mañana u otro día, pero si bien Microchip calibra sus micros en +-1% se puede obtener una frecuencia mucho mas fina. Como se ve en la primera imagen de la salida del micro (la que tiene capacitor) la frecuencia es de 988Khz muy cercano al 1% menos de 1Mhz, pero si se incrementa el valor de calibración se puede llegar a un valor muy por debajo del limite de +-1%.

El que lo quiera comprobar solo tiene que compilar el código anterior pero agregando después de la instrucción "call 0x3FF" la instrucción "addlw 0x04" con lo que quedaría algo así:

Código: Seleccionar todo
          call         0x3FF
          addlw     0x04
          movwf   OSCCAL


Lo que haría esto es pasar al siguiente valor de calibración con lo que la frecuencia de trabajo aumentaría.

Esto ya me había pasado con otro micro cuando estaba investigando que máxima frecuencia le podía sacar al micro en el circuito que controlaba 3 cooler de una PC. Me había dado cuenta que un punto o dos (no recuerdo bien) por encima de lo que estaba grabado tenia una frecuencia muy cercana a 1Mhz.

Mi suposición de esto es que para calibrar los micros, Microchip, usa algo similar a lo que yo arme acá. Al llegar a la frecuencia justo en -1% lo toma como bueno por eso oscila en 990Khz. (Cuando pruebe los otros, si todos oscilan un punto por debajo de 1Mhz ya que cada incremento es de 1% (10Khz) en la frecuencia aproximadamente, asentara mas mis sospechas de que lo hacen así xD).

Así que si diseñan algo que requiera una frecuencia muy cercana a 1Mhz, deberían chequear todo esto.


Por lo pronto el circuito que propuse calibró todos los micros que probé exactamente con el valor que Microchip les había grabado. Ya que todo esto esta basado en suposiciones y que seguramente Microchip sabe un poquito mas que yo (un poquito significa un 99.9% mas que yo :lol: ) dejare el programa tal cual esta.


Pensar que todo esto era solo para aprender a programar un micro y termine aprendiendo muchísimas cosas mas y para mejor interesantes.
Desde ya muchísimas gracias a HJ por descubrir lo del capacitor.

Saludos.
- Javier -
En mis circuitos, el humo no se cobra, va de regalo.
            Imagen
Avatar de Usuario
Switchxxi
 
Mensajes: 215
Registrado: Sab Mar 23, 2013 4:10 pm
Ubicación: Bs. As - Argentina

Re: Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Notapor HJ » Mié Abr 03, 2013 8:25 am

Gracias a vos por este importante aporte que has hecho al foro.

Saludos
HJ
"Cuando llegue la inspiración, que me encuentre trabajando"
Picasso, Pablo
Avatar de Usuario
HJ
 
Mensajes: 477
Registrado: Jue Mar 21, 2013 3:16 pm
Ubicación: Tanti - Córdoba - Argentina

Re: Proyecto - Recuperar valor configuración OSCCAL en PIC´s

Notapor Mario » Mié Abr 03, 2013 9:11 am

Muy buen trabajo amigos! :D

Disculpen si les rompo mucho los esquemas con la propuesta que me gustaría hacerles.
En virtud de que ha sido evidente que la inclusión o no del capacitor, respecto a los resultados en frecuencia y forma de onda, me gustaría proponerles lo siguiente, si es que aún estamos a tiempo, para completar las mediciones y los resultados en todos los escenarios.

Alguno de los dos tiene el hardware armado aún como para hacer el mismo ensayo, pero esta vez con baterías de 1,5V (2 o 3, para lograr 3V o 4,5V) y con los cables "ultra-cortos" desde el porta-pilas hasta el PIC?

Tal vez de este modo, quedaría terminada y comprobada la accion del capacitor como filtro para preservar el PIC del ruido que pueda ingresar por la alimentación y por el que pueda generar él mismo en el funcionamiento de su clock.

Es sólo una idea, de todos modos, si no puede ser ahora, siempre habrá un momento para hacer los ensayos en cualquier montaje futuro. Por ahora ya está vista y comprobada en forma empírica la "necesidad" del capacitor de 100nF. Sólo faltaría saber si el defecto se incrementa con la alimentación, el largo de sus cables, etc, etc, etc....

Buen trabajo amigos!
Felicitaciones! ;)
Mario
En Servisystem, hay una sección de Montajes que puede llegar a interesarte. Hay muchas ideas útiles y montajes electrónicos para construir. No te olvides: todo lo que sea importante, también estará en el Blog.
Avatar de Usuario
Mario
Administrador del Sitio
 
Mensajes: 428
Registrado: Vie Ene 28, 2011 7:22 am
Ubicación: Principado de San Nicolás de los Arroyos

Siguiente

Volver a Microcontroladores

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron