D@rkbytes, te pregunto lo siguiente en referencia al valor OSCCAL.
Yo grabo en este caso los 16F877A o 16F876 con el K150, que por cierto como ya he dicho alguna vez, graba que es un gusto a una velocidad barbara, y no me había fijado nunca en lo del OSCCAL, de hecho ni pensaba en ello, pero e visto y sobretodo una vez sacado el tema por herrerab, que por ejemplo en los que tengo vírgenes, cuando lo leo con el K150 no me aparece ningún dato, solo 3FFF en dicha dirección y en los que he grabado cuando los leo, también aparece 3FFF, pero los uso y de momento funcionan bien.
Eso es porque ese tipo de PICs que estás usando no tienen oscilador interno, así como te mencionó @herrerab.
El registro OSCCAL es único de los PIC con oscilador interno, y aunque algunos PIC tengan oscilador interno, no pierden el valor de fábrica porque no está guardado en una locación que el usuario pueda borrar.
Este asunto de la pérdida del valor de OSCCAL es de los PIC pequeños como los PIC10 y PIC12.
Pero esto no sucede con todos. Por ejemplo, los PIC12F508/509 tienen un registro especial reservado en donde se encuentra el valor de OSCCAL, así si se llega a sobrescribir, se lee ese registro y ahí se verá el valor para OSCCAL.
Puede ser posible que por defecto aunque este el valor OSCCAL el K150 al leerlo saque 3FFF y no el valor que debería estar en dicha dirección, y al grabar como dependiendo de la grabación no se llega al final de dicha dirección, pues también.
¿Aunque luego se lea el PIC no saca dicho valor OSCCAL?
Eso lo tendrías que verificar leyendo un PIC12F629 o un PIC12F675, por ejemplo.
Y la otra pregunta es. ¿Si por el motivo que sea, hemos borrado dicho valor y no lo teníamos guardado que se debe hacer en dicho caso?
Digo esto porque esos valores vienen dados de fábrica y cada PIC tiene el suyo propio. ¿No?
Supongo que no podemos poner uno al azar. ¿O se puede copiar el de un PIC para ponerlo en otro?
Existen algunos métodos para recuperar el valor de OSCCAL cuando no se sabe el valor original.
Algunos tienen buena precisión y otros no tanta, pero suelen dar buen resultado para lograr que el PIC trabaje dentro de un rango óptimo.
Mira este post:
Consulta de OSCCAL en PIC12F629
Y no, no se debe poner un valor al azar ni usar el valor de otro PIC, pues desde fábrica se realiza una calibración y el valor obtenido es exclusivo para ese PIC.
Los valores para cada PIC son diferentes, y llegar a encontrar dos o más PIC con el mismo valor, es una mera coincidencia muy probable.
Mi pregunta era que cuando voy a programar un 12F629, primero saco la dirección del propia PIC y la anoto.
Luego cargo el fichero .hex que quiero introducir y en la dirección 0x3FF pongo el valor que he anotado.
A la hora de programar el PIC, el programador lo primero que hace es borrar el contenido del microchip y después copia el .hex.
Todo sin problemas, pero la duda es que una vez programado el microchip lo leo y en la dirección 0x3FF no está el valor que yo le he introducido que era el valor que leí antes de programarlo, por lo tanto la dirección del OSCCAL ya no está grabada en el microchip.
Yo metí "344C" y en el PIC grabado en 0x3FF aparece "34FF". ¿Por qué?
Esa es la duda. ¿Y dónde está la "344C" que yo metí?
¿Por qué no graba los 2 últimos bytes?
No es necesario volver a escribir el valor de OSCCAL cada vez que se grabe el PIC.
Las aplicaciones para grabar los PIC, deben guardar el valor de OSCCAL y volverlo a escribir.
O sea, borran todo el contenido del PIC pero el valor de la dirección 0x3FF debe ser re escrito nuevamente.
Esto está especificado en las notas de aplicación por programación ICSP dadas por Microchip.
Y es un protocolo que las aplicaciones deben seguir para una correcta grabación del dispositivo.
Algo que puedes hacer para saber si realmente existe el valor de OSCCAL, es como te mencioné anteriormente, usar otra aplicación y leer el PIC.
Con el ICProg se debe ver el valor de ésta forma:
Con el WinPic800 será de ésta forma:
Y con el PICkit 3 se debe ver de ésta otra forma:
Como puedes ver, con esas tres aplicaciones se puede leer correctamente el valor de OSCCAL.
Por eso te digo que uses otra aplicación para corroborar que sí exista el valor "4C" para tu PIC, éste es el valor para OSCCAL, ya que el "34" es un RETLW.
Edit:
El hardware para leer y grabar varios PICs incluyendo algunos PIC18 como el 18F2550 y 18F4550, es el
JDMD Programmer.
Y en esta página se encuentra toda la información en castellano.
Programador JDMD
Este sencillo programador también cuenta con programación
ICSP.
http://perso.wanadoo.es/pictob/jdmd.htm#programador_jdmd