PICS, destripando el oscilador...(Wiiskas/Wiifree)

Hola señores!
Estoy un poco perplejo ante la falta de información y el misterio sobre el oscilador en los 12F629 y 12F675 .... los ya conocidos pics por cualquiera que se haya dado un paseo por estos lares...
el caso es que en el datasheet de estos bichitos... viene algo así como...(pag 56)
***************************************
9.2.5.1 Calibrating the Internal Oscillator
A calibration instruction is programmed into the last
location of program memory. This instruction is a
RETLW XX, where the literal is the calibration value.
The literal is placed in the OSCCAL register to set the
calibration of the internal oscillator.
---------------------------------------------------------------------------
bsf STATUS, RP0 ;ACCEDE AL BANCO 1
call 3FFh ;Almacena¿?o llamada a subrutina¿?
movwf OSCCAL ;mete el W en el resgistro OSCCAL(esta en la direccion 90h) (los 6 bits más altos de esta posicion de memoria son los que indican la velocidad todo a 1-> max velocidad todo a 0->min velocidad),x defecto tras reset, a 100000 (vel media)
bcf STATUS, RP0 ;ACCEDE AL BANCO 0 //vamos, a seguir currando
---------------------------------------
demonstrates how to calibrate the internal oscillator.
For best operation, decouple (with capacitance) VDD
and VSS as close to the device as possible.
*****
Note: Erasing the device will also erase the preprogrammed
internal calibration value for
the internal oscillator. The calibration value
must be saved prior to erasing part as
specified in the PIC12F629/675 Programming
specification. Microchip Development
Tools maintain all calibration bits to
factory settings.
*******
Del 34xx, lo que nos interesa por tanto son esas dos xx,de hecho, los 6 bits más altos, por ejemplou...el famoso 34AC,q ocurre con el¿?Porque ese valor y no el...3480 ->que implicaria el 80 en hexadecimal, que significa 10000000 ¿? 344C
En el tutorial de Lande el utiliza el 1001100

***************************
De momento lo unico que saco en claro:
-Guardar como oro en paño el valor de fabrica del oscilador
-Que tengo que aprender más ensamblador de PICS xD
-Que un condensador viene guai entre Vcc y Vss para estabilizar...
-Que no se quien se ha inventado el valor ese de oscilador que va rulando por ahi, un tal 34AC, xq AC?¿?¿->10101100, es decir 101011, es un valor intermedio, pero un poco más alto
****************************

Preguntas que me realizo...

Sera que el Wiifree funciona a pesar de las malas configuraciones en aquella ultima posicion de memoria lejana...debido a que carga en el OSCCAL un valor predeterminado (como por ejemplo 100000-- [frec. intermedia])¿?¿?¿?

Porque ese valor de fabrica, es tan importante?? Acaso no se puede meter en el OSCCAL el valor que nos de la gana, para configurar el reloj interno....

Se solucionarian todos estos problemas a costa de ponerle un Oscilador de Cuarzo

En caso afirmativo, El Wiiskas podria hacerlo¿??¿

¿Relacion entre estos valores y los DRE's ????

Hasta que punto podemos colaborar con el desarrollo de nuevas versiones de Wiiskas, que al menos a mi es el que me causa más aprecio.

un salud
Claroq ue se solucionarian bastantes cosas con un cristal externo y un par de condensadores (o capacitores o fiultors o loq ue quieras llamarle) el wiiskas está pensado a 4mhz(mega hertz o hercios o ciclos...), con lo que un cristal de ese calibre, sería suficiente y un par de condensadores de 27 pF (picofaradios). Con eso, se olvidadn totalmente del problema del oscilador interno!. [babas] [babas]
Gracias por contestar Gameoso

Los condensadores a los que se hacen referencia no son solo los condensadores de 22pF que se suelen poner junto al reloj (oscilador de cuarzo), esos se dan por hecho. Y en realidad es tonteria ponerlo teniendo un oscilador interno, aunque sea cutre, ya lo tiene!!


--Con respecto al Condensador-----
Se refieren a un condensador entre Alimentacion y Tierra para estabilizar. Esto se realiza tambien en el interior de nuestros ordenadores, se ve que junto a cada integrado hay un pekeño condensador y es para eso, para estabilizar, ya que en ocasiones el layout o diseño de pistas de la placa hace que la alimentacion y/o tierra tengan mucho recorrido, (teniendo por ello una caida de tension, debida a la resistencia interna)

***Pero aun asi sigo teniendo dudillas... ***
Porque es capaz el Wiifree de funcionar con valores mal programados en la ultima posicion de memoria¿? Yo apostaria a que es por que le mete en el OSCCAL (registro interno de configuracion del Oscilador Interno) un valor PREDETERMINADO. ¿Cual es? ¿Alguien se atreve a afirmar algo?

¿y si esto es así, porque no lo podria realizar Wiiskas así, seria una facilidad en cuanto a su programación ??


***3ªParanoiA*****
Existe en el Wiiskas alguna relacion entre los valores metidos en la ultima posicion de memoria " 3FF " (en hexadecimal) y los queridos DRE's ...Cual es vuestra experiencia. Se dice que el mejor valor que se puede dejar en esta posicion es el de fabrica...¿PORQUE!!!?¿??
Interesante hilo. Hoy me he tenido que pelear con esto, porque el otro dia me despiste y no apunte los valores. Tengo dos pics, uno con Wiiskas y valor del oscilador anotado, y otro con Wiifree y sin valor de oscilador. El del Wiifree no lo anoté porque pensé en leerlo en otro momento desde el chip programado, pero hoy haciendo pruebas me di cuenta de que cuando se programa con Wiifree, se pierde. Es decir, en el código del Wiifree no se tiene en cuenta el valor de fábrica, por lo que estarán poniendo un valor estándar en el código.

Mis pruebas con Wiiskas, y valor de fábrica para el oscilador dan muchos problemas, mensajes como se ha producido un error, saque el disco y apague la consola, DREs tras pausa por ejemplo en RED STEEL, etc....

En cambio, con Wiifree, ningún problema, salvo algun tirón en videos del Wario Ware, pero sin DREs tras pausa ni nada por el estilo. Además los Backups de Game Cube, que ya no me iban ni en la Cube, aquí funcionan de maravilla.

Hay un metodo que he leido en un enlace de algún post, para calibrar oscilador del pic, pero no he tenido tiempo de probarlo, y además hace falta montar un circuito con 4 pics y algunos componentes pasivos.

¿Alguien conoce con que valor se está programando el oscilador en el Wiifree?

Saludos.


EDITO: He desempolvado mis apuntes del pic, y he visto que el oscilador interno como ya sabiamos va a 4MHz, pero tiene un error de +-1.5%. Ese error se calibra con el famoso valor CAL3, CAL2, CAL1, CAL0 del registro OSCCAL, que corresponde con el grabado en fábrica en la última posición.

Lo que no me cuadra mucho, es que el Wiifree con un valor sin determinar de OSCCAL funcione mejor que el Wiiskas con el valor exacto de OSCCAL, que es lo que me pasa a mi. Como conclusión creo que al final, el valor de fábrica no va a influir tanto como pensamos.
pues trabaja mejor con uno externo, ya lo estoy calando, tal como puse en el hilo del wiiskas (o de wifree... no recuerdo) trabaja mucho mejor con el externo. El interno es altamente recomendado solo cuando la exactitud no es crucial, pero al parecer, en este caso si lo es.
El posible error máximo de +-1.5% significa que es el valor máximo que podría diferir el oscilador del valor supuesto, pro eso trae la calibración. De fábrica, no todos vienen iguales, prque es una R y una C la que se usa, por lo que al ser elementos analógicos, no son exactos, por eso la calibración y la tolerancia.
Los capacitores no son por hecho que vayan, pues los neófitos no saben ni de q ué se habla, pero se procura ser lo más explicativo para que todos le metan a montarlo.
La razón por la que el wifree no da latas por la calibración es porque tiene mejorado algoritmo de lectura,no por estos valores, al analizar el código, nunca hace modificación sobre el oscilador. El wiiskas, se esta quedando atrás porque no ha logrado mejorar el algoritmo de lectura, nada que ver con el oscilador, ya que para los Grandes intervalos de tiempo del protocolo del lector, el PIC, ya hizo miles de instrucciones, por loq ue ahí, sin importar las variaciones, con gran facilidad, se podría implementar algún sincronizmo, sin importar el valor del calibrador.
Me alegro x vuestro interes en el tema.

Se que el Señor Netcat esta acostumbrado a trabajar cn el Atmel (no recuerdo el modelo) y que esta pensando en portar su codigo a otro 12Fxx más rapido que los pics actuales(Recordar, que adapto su codigo a los 12F629 y 12F675).

Pero entonces...o conseguimos calibrar perfectamente el oscilador (no teniendo porque ser el Oscilador de fabrica) o nos olvidamos de Wiiskas¿???? Es aquí donde entran los demas usuarios. Debemos averiguar la relacion entre los Dre's y el valor de la ultima posición del pic...

Sera cuestion de suerte?¿Quizas de "calibración"???
La "R" y la "C" del oscilador interno del pic sabemos que tienen cierta llamemosle "tolerancia", La cual debe ser CORREGIDA o COMPENSADA con el valor correcto en la ULTIMA POSICION...

Una pregunta interesante seria...¿¿porque llevan distintos valores de fabrica en aquella dichosa posicion???????????? Los calibran en fabrica?

Creo que N3TkAt deberia de pasarse por aki...Necesitamos un poco de iluminación ya que esto no son más que hipotesis...
AVIÉNTATE MACHO!! yo ya lo tengo jalando y si mejora considerablemente con el oscilador externo... hipótesis.... mientras tú no lo hagas, apra ti seguirán siendo "hipótesis"....
En el datasheet del PIC viene todo. A leeR!!!
jo :( acabo de llegar de clase!
un poquito de dulzura conmigo no?
xDD
No me apetece más datasheet por hoy...
xfa, dime q hay q modificar xa indicarle que utilize el CLK externo
no es dureza, es certeza...
Pero bueno, aquí va tal cual lo puse ya en los otros hilos:
gameoso (en los otros hilos) escribió:Respuesta a los problemas:

Simplemente un cristal externo y nos olvidamos de valores de calibración:
- Al programar el PIC, le indicamos que queremos de oscilador el XT o el HS (el que sea de los 2, ya que 4 MHz es frecuendia baja todavía) ****NO IMPORTA SI NOS PREGUNTA DEL VALOR DE CALIBRACIÓN, PUES YA NO SE OCUPA, ASÍ QUE SI LE DICEN SI O NO, DA IGUAL!!***
- Ponemos un cristal de cuarzo de 4 MHz entre las patas 2 y 3 del pic.
- Entre las mismas patas 2 y 3, le metemos un condensador de 27picoFaradios (pF) a cada una rumbo a GND o la pata 8 del PIC.
- Lo ponemos en el Wii
- Disfrutamos!! [beer] [beer] [beer]


y el usuario vassago lo puso gráficamente ya:
diagrama
muxas gracias x la info, no staba al tanto ;)
muy bueno, aun así, me gustaria saber más sobre porque el wiifree va y el wiiskas no va con el mismo pic... y sobretodo si calibrando con el circuitillo ese funciona, o si con determinados valores de fabrica ya va.... no es plan de simplemente decir, ala, así funciona y asi nos kedamos..
muchisimas gracias de nuevo
me cito:
pues trabaja mejor con uno externo, ya lo estoy calando, tal como puse en el hilo del wiiskas (o de wifree... no recuerdo) trabaja mucho mejor con el externo. El interno es altamente recomendado solo cuando la exactitud no es crucial, pero al parecer, en este caso si lo es.
El posible error máximo de +-1.5% significa que es el valor máximo que podría diferir el oscilador del valor supuesto, pro eso trae la calibración. De fábrica, no todos vienen iguales, prque es una R y una C la que se usa, por lo que al ser elementos analógicos, no son exactos, por eso la calibración y la tolerancia.
Los capacitores no son por hecho que vayan, pues los neófitos no saben ni de q ué se habla, pero se procura ser lo más explicativo para que todos le metan a montarlo.
La razón por la que el wifree no da latas por la calibración es porque tiene mejorado algoritmo de lectura,no por estos valores, al analizar el código, nunca hace modificación sobre el oscilador. El wiiskas, se esta quedando atrás porque no ha logrado mejorar el algoritmo de lectura, nada que ver con el oscilador, ya que para los Grandes intervalos de tiempo del protocolo del lector, el PIC, ya hizo miles de instrucciones, por loq ue ahí, sin importar las variaciones, con gran facilidad, se podría implementar algún sincronizmo, sin importar el valor del calibrador.
12 respuestas