Antes que nada no pense que lo habias grabado con eso... Se que cuando lo lees y esta protegido contra lectura lees 0x00, lo pense, pero como luego dijiste que habias probado otro programa y el error era "distinto" supuse que era otro problema.
Respecto de OSCCAL son 6 bits, justificados a la izquierda.. es decir que va desde 0000 0000 a 1111 1100 , si lo queres ver en decimal, son multiplos de 4. ( 4/8/12/16/etc)
Comienza en el punto central que es 1000 0000, y podes ir para ambos lados. de 1000 0000 a 1111 1100 aumenta la frecuencia y para el otro lado disminuye.
¿Cuanto varia? No se decirte, no esta dicho en el datasheet. Lo unico que aparece en el datasheet es la variacion de la frecuencia ( maximos y minimos) segun Vdd, pero no cuanto es la variacion que provee OSCCAL
¿ Pero queres saber alguna curiosidad ?
Microchip pre-programa los PIC y deja el valor con un RETLW xx en la ultima posicion de memoria flash ( es decir deja los 8 bits que van en el OSCCAL ), de esa forma vos podes llamar a esa posicion de memoria y obtener el valor para que el oscilador quede calibrado ( medido por microchip) PERO si grabaste ( mejor dicho, borraste ) esa area, el dato desaparece, ya que supuestamente lo que dice el datasheet que es deber de la persona el mantener ese valor . Y vas a tener que buscar vos el valor de calibracion necesario.
El tema es que para calibrarlo, vas a necesitar de un reloj (preciso) que entre por el timer por ejemplo, asi cuando pasen dale 10 pulsos del oscilador externo, te tiene que dar el valor exacto de pulsos del reloj interno, y ahi vas a saber que esta calibrado
.
O podes ir variando OSCCAL y medirlo desde el exterior, pero no creo que midas con tanta precision de esa forma.