Autor Tema: Oscilador Interno de los PIC's  (Leído 22277 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Oscilador Interno de los PIC's
« en: 22 de Diciembre de 2006, 22:32:27 »
Hola Amigos:

Les cuento mis aventuras y desventuras con los osciladores internos para ver si le son utiles a alguien y tambien para que si he hecho algo mal me corrijan.

Primero probe el siguiente circuito, usando un 12F508 como emisor y un 16F84 como receptor:



Todo funciono perfecto, al presionar cada boton este envia un mensaje y se visualiza en el LCD, incluso lo probe usando modulos de 433 MHz,  use el oscilador interno del 12F508, y un cristal de 4 MHz con el 16F84, pues no tiene oscilador interno.

Luego probe el siguiente circuito, remplazando el 16F84 por otro 12F508 con su oscilador interno:



Y todo bien, al presionar un boton se prende el respectivo led, tambien probado usando modulos de RF, luego quise usar el primer circuito remplazando el 12F508 por un 12F675, y el 16F84 por un 16F628, trabajando ambos con el oscilador interno, aqui empezaron mis problemas.
« Última modificación: 23 de Diciembre de 2006, 00:06:42 por veguepic »
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: Oscilador Interno de los PIC's
« Respuesta #1 en: 22 de Diciembre de 2006, 22:54:08 »
Usando el 12F675 y 16F628 no pude hacer andar el circuito.

En vista de esto use el emisor con el 12F508 con oscilador interno, el cual funciona perfectamente, y en el receptor use el 12F628 usando el oscilador interno tambien, lo simule en proteus y funciono perfecto, luego arme el circuito y no ando.

Tras mucho probar con el oscilador interno, decidi usar el oscilador externo con un cristal de 4MHz y o maravilla, todo perfecto por lo cual la falla es del oscilador interno.

Inmediatamente me puse a leer el datasheet y no pude encontrar el registro para ajustar la frecuencia del oscilador interno, debe ser porque no lo tiene y es mas, por lo que veo en el datasheet la frecuencia puede variar desde  3.65  hasta  4.28  MHz, esto es un error de  -8.75%  a  +7%  !!!!!

Entonces medi la frecuencia del oscilador interno del PIC 16F628 y en mi caso el error es algo mayor al 3% por lo que no podre usarlo en mi circuito, es mas en ninguno que implique  comunicaciones.

Debo acotar que el oscilador interno del 12F508 tiene un error de ±1%, el cual viene calibrado de fabrica de fabrica, con este porcentaje de error no he tenido ningun problema. El registro para ajustar la frecuencia es el OSCCAL, 05h, aunque con el valor de fabrica no es necesario tocarlo, solo que antes de grabarlo el PIC deben primero leer el valor de este registro para que al momento de grabar mantenga este valor. Esto winpic lo hace sin ningun problema.

De momento seguire usando el 16F84 con el cristal de 4 MHz en lo que consigo otro pic de 18 pines con oscilador interno con error de ±1% , ahora tengo otro problema, por error borre la calibracion de fabrica del 12F675, asi que ahora lo estoy ajustando, ya les contare como me va y si logro hacerlo andar.

Espero tambien compartan sus experiencias con los osciladores externos.

Saludos
« Última modificación: 23 de Diciembre de 2006, 02:05:04 por veguepic »
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Oscilador Interno de los PIC's
« Respuesta #2 en: 23 de Diciembre de 2006, 00:42:49 »
hola veguepic, yo use el 16F818 y tiene para escoger desde 500KHz hasta 8Mhz e incluso menos aun , y ademas tiene un registro de calibracion de su oscilador interno. :-)
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Oscilador Interno de los PIC's
« Respuesta #3 en: 23 de Diciembre de 2006, 01:13:37 »
Yo e utilizado los 12c509 y 16f628 con los osciladores internos y funcionan muy bien, el 628 solo me trajo un pequeño problema, tuve que grabarlo 3 veces hasta que comenzó a funcionar el oscilador interno jojo, (como que tuve que asentarlo jajaja) después de eso funciono de 10, y los 12c509 nunca me trajeron problemas.

Saludos
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: Oscilador Interno de los PIC's
« Respuesta #4 en: 23 de Diciembre de 2006, 02:42:57 »
Hola Henry:

No tengo ese pic pero al tener un registro de calibracion supongo que se puede lograr una precision del orden de ±1%, por aqui tengo un 16F88 con frecuencias similares, voy a probarlo a ver si me sirve para el circuito que quiero implementar.  :-)

Hola Esteban:

Revisando la hoja de datos del 12C509 veo que el oscilador interno tiene el mismo rango de frecuencias que el 16F628, 3.65 a 4.28 MHz, pero al tener un registro de calibracion supongo que viene calibrado de fabrica con la misma precision que el 12F508 osea ±1%. He vuelto a revisar la hoja tecnica del 16F628 y aun no encuentro el registro de calibracion.  :(

En que aplicaciones usaste el 16F628 ??

Ea Esteban, tu segundo nombre no es Jesus?  :mrgreen:

Si bien ambos PIC 12F675 y 16F628 digo que no he podido hacerlos funciona, me refiero al circuito de comunicaciones que quiero implementar, para otros circuitos de prueba que he armado en donde la precision del oscilador interno no es critica funcionan sin problemas.

Saludos y un abrazo a ambos.

Hugo

P.D. acabo de encontrar la aplicacion 00250A de Microchip para autocalibrar el oscilador interno del 12F675, ya tocara mañana ver si puedo implementarla con los instrumentos que tengo.
« Última modificación: 23 de Diciembre de 2006, 02:54:37 por veguepic »
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Oscilador Interno de los PIC's
« Respuesta #5 en: 23 de Diciembre de 2006, 04:58:07 »
Hola, el 16f628 con el oscilador interno lo usamos con un amigo para hacer un control de luces, por lo cual no tenia necesidad de un cloc tan preciso, simplemente queríamos hacer algo barato, y como te ahorras un cristal, pues pusimos el oscilador interno, por lo que tengo entendido, no tiene registro de calibración, esto dice la hoja de dato: "Precision internal 4 MHz oscillator factory calibrated to +- 1%", con lo cual parece venir calibrado calibrado.

Citar
Ea Esteban, tu segundo nombre no es Jesus?  Mr. Green
jejeje supongo que es por la fecha de cumpleaños, no sos el primero que me hace ese chiste jejeje


Saludos
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Oscilador Interno de los PIC's
« Respuesta #6 en: 23 de Diciembre de 2006, 05:31:17 »
Les cuento mis aventuras y desventuras con los osciladores internos para ver si le son utiles a alguien y tambien para que si he hecho algo mal me corrijan.


veguepic, siendo generalistas sobre el término oscilador interno, te comento que yo los uso habitualmente en comunicaciones que son asíncronas (donde los timings toman gran importancia porque es lo único que permite que la comunicación sea buena) y andan perfectamente.

No solo eso sino que son equipos que funcionan hace tiempo y siguen funcionando.

Según leo del datasheet el PIC12F508 sí tiene registro de calibración, te expongo lo extraído del mismo

DataSheet 41236 versión b  - Sección 4.2
Location 01FFh (PIC12F508) and location 03FFh (PIC12F509) contain the internal clock oscillator calibration value. This value should never be overwritten.

En caso que lo hayas sobreescrito, puedes ir probando cargando valores a dicha posición hasta lograr que la frecuencia sea la adecuada.

Lo que debes hacer en tu código es casualmente hacer que en dicha posición se grabe un valor y tu 1er línea debiera ser algo así como

Código: ASM
  1. call     0x1FF
  2.       movwf    OSCCAL


Espero te haya servido.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: Oscilador Interno de los PIC's
« Respuesta #7 en: 23 de Diciembre de 2006, 10:46:56 »
hola veguepic

en su dia, y gracias a la ayuda de maunix, consegui poner a funcionar un sistema de transmision de datos en el cual necesitaba los dos pines del oscilador de un 12f675 y tratare de ayudarte aunque perdona porque estoy en plena mudanza, con el ordenador recien formateado y los archivos del proyecto ya guardados en alguna caja... si mi memoria no me falla esta es la solucion en pbp: (para tu imagen de los leds)

*****************************
include "modedefs.bas"
DEFINE OSCCAL_1K 1
define OSC 4

@ DEVICE pic12F675, 0x1fc4
' palabra de configuración:
    ' oscilador interno IO
    ' PWRT y BOREN enables

TRISIO = %001100 ' GP2 entrada, las demas como salidas.
CMCON = 7  ' comparadores en off
ADCON0 = 0 ' ADC off
ANSEL = 0  ' IO digitales

continua programa...

****************************

tratare de localizarte una web con amplia informacion sobre el 675 a lo largo del dia.

pd: no se hasta que punto de precision necesitas, yo realice varios circuitos con oscilador interno para transmision de datos via infrarrojos y todos funcionan sin problemas.

pd: aunque a mi estas fiestas me son bastante indiferentes vayan mis deseos de lo mejor para todos vosotros. salu2

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Oscilador Interno de los PIC's
« Respuesta #8 en: 23 de Diciembre de 2006, 13:06:49 »
Muchachos, he encontrado esta nota de aplicación que creo que aclara bastante bien el punto.

Espero les sirva


AN250 : Auto-calibration of the PIC12F6XX Internal RC Oscillator

Saludos!
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: Oscilador Interno de los PIC's
« Respuesta #9 en: 23 de Diciembre de 2006, 20:37:02 »
y yo encontre la web que os comentaba: http://members.shaw.ca/picgroup/ opcion 'resources' - y dentro del apartado pic basic 'Burn on the 12F675 , a powerhouse with only 8 pins'

espero que te sirva de algo amigo veguepic

un saludo

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: Oscilador Interno de los PIC's
« Respuesta #10 en: 27 de Diciembre de 2006, 13:56:21 »
Gracias Mauricio y Joaquin por sus respuestas.

La nota de aplicacion la habia visto pero por los equipos que involucra no me es posible implementarla, he tratado de implementar lo que puso Joaquin pero no me ha sido posible, mas tarde retomare el tema, pondre aqui los resultados para que los evaluen.

De momento he comprado otro 16F628A y sigo con el mismo problema que el anterior 16F628. Solo le he cargado los fuses en Winpic800, definiendo el oscilador interno pero con salida del clock, osea INTRC CLKOUT, el error es de +3% para el 16F628 y de 5% para el 16F628A.

De momento solo puedo suponer que los pics tengan defectos, probablemente sean muestras o samples, algo que no me sorprenderia o que estoy haciendo algo mal.

Saludos.
« Última modificación: 27 de Diciembre de 2006, 18:00:10 por veguepic »
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Oscilador Interno de los PIC's
« Respuesta #11 en: 27 de Diciembre de 2006, 15:23:53 »
veguepic no te desanimes, puedes seguir usando el 12F e irle variando el registro de calibración "a mano" hasta que logres la frecuencia con la presición que deseas.

Una vez que lo logras, recuerda ese valor y guardalo en la posición 0x1FF o 0x3FF (dependiendo del pic) en forma de un retlw valor. 

Por último tu primera instrucción en tu software debiera ser un call a esa dirección y a continuación un movwf OSCCAL.

Código: ASM
  1. org 0x000
  2.     call    0x1FF
  3.     movwf   OSCCAL
  4.  
  5.   ;
  6.   ;
  7.  
  8.    org      0x1FF
  9.    retlw    0x24

El valor 0x24 es arbitrario, lo puse solo como ejemplo y lo debieras ir variando hasta que logres la frec. deseada.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: Oscilador Interno de los PIC's
« Respuesta #12 en: 28 de Diciembre de 2006, 02:38:16 »
Hola Mauricio:

Yo cargaba el valor del osccal de una forma mas burda, esto es modificando directamente el archivo en Winpic800:



justo en la ultima posicion, donde dice 3440.

Sabia que no debo cambiar los dos primeros digitos (34), solo modificaba los ultimos digitos. Como es obvio, no es la mejor manera de hacerlo, por lo cual lo hice como indicas y con esto he logrado obtener un error menor a ±1%. Gracias por el dato.

Hay algo que me sigue molestando, he cargado el valor de la calibracion mediante el siguiente programa:

   LIST      P=12F675,
   #include   <p12f675.inc>

   __CONFIG h'11A5' ;  _CP_OFF&_PROTECT_OFF&_BOD_OFF&_MCLR_ON&_PWRTE_ON&_WDT_OFF&INTRC_OSC_CLKOUT   

    org          0x000
    bsf          STATUS,RP0        ;Banco 1
    call          0x3FF
    movwf     OSCCAL
    bcf          STATUS,RP0       ;Banco 0

   org        0x3FF
   retlw      0x04

   END

y segun tengo entendido una vez cargado este valor de calibracion, el PIC seria el equivalente a uno de fabrica. Luego siempre antes de grabarlo hay que leer este valor antes de grabar de nuevo el PIC.

Me pasa que luego de haber calibrado el PIC y posteriormente grabar el siguiente programa:

include "modedefs.bas"     

@ device pic12F675, CPD_OFF
@ device pic12F675, PROTECT_OFF
@ device pic12F675, BOD_OFF
@ device pic12F675, MCLR_ON
@ device pic12F675, PWRT_ON
@ device pic12F675, WDT_OFF
@ device pic12F675, INTRC_OSC_NOCLKOUT

DEFINE     OSC  4   'Oscillator speed in MHz

ADCON0  =   0
ANSEL      = 0             ' Disable analog converter
CMCON    = 7             ' Comparators off
TRISIO     = %011111

dato var byte

inicio:
    if  GPIO.0 = 0 then   serout GPIO.5,T1200,["OK","   QUE  PASEN   "]
    if  GPIO.1 = 0 then   serout GPIO.5,T1200,["OK","FELICES  FIESTAS"]
    if  GPIO.2 = 0 then   serout GPIO.5,T1200,["OK","  Y UN PROSPERO "]
    if  GPIO.4 = 0 then   serout GPIO.5,T1200,["OK","      2007      "]
    pause   50
    goto inicio
end


he verificado que el valor de calibracion esta en la ultima posicion, pero el programa sigue sin funcionar, el mismo programa adaptado para el 12F508 y el 12F683 funciona perfectamente. El diagrama es el del primer post.

Lo unico que puedo suponer es que o los pics estan mal o me los he "cargado" con alguna mala coneccion. Que opinan.

Saludos
« Última modificación: 28 de Diciembre de 2006, 03:22:08 por veguepic »
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Oscilador Interno de los PIC's
« Respuesta #13 en: 28 de Diciembre de 2006, 08:48:32 »
Habría que ver que asm te genera ese programa en basic.

1) Que el programa en basic no borre el contenido de la posición 0x3FF
2) Que el software de tu programador no borre el contenido de la posición 0x3FF.  El winpic800 tiene en cuenta este detalle y te avisa antes de hacer algo.
3) Tu programa en basic debiera leer el valor de calibración del oscilador.  No se si el que le indiques que tu oscilador es de 4MHz haga que el basic genere un valor de calibración que ocupe la posición 0x3FF o simplemente lo use para generar los retardos necesarios dentro de tu aplicación

Una curiosidad, cómo pruebas que el valor del oscilador esté ok? Ese programita que yo te dí fue solo a modo de ejemplo y no debiera ser todo tu programa.  En algún lado debes hacer un loop infinito y configurar a tu pic para que saque el oscilador por sus pines así lo puedes medir con el osciloscopio. 

Es más, creo que medirías su valor dividido 4 si mal no recuerdo.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: Oscilador Interno de los PIC's
« Respuesta #14 en: 28 de Diciembre de 2006, 13:45:53 »
Estoy como medio entrampado en esto.  :( Pero sigo adelante.

1) Estoy seguro que mi programa no borra esta direccion, pues al grabarlo verifico que tenga el valor de calibracion, y al volver a regrabarlo compruebo que siga ahi.

2) Ahora si tengo el cuidado de leer el valor de calibracion y al grabarlo Winpic800 lo restaura.

3) Justo eso es lo que me lleva a pensar que algo anda mal con estos PICS, el mismo programa con muy ligeras modificaciones lo he implementado para 12F508, 12F675 y 12F683. Solo falla en los 12F675, a menos que sea un bug en el 12F675.

Digo que no es necesario que el programa llame al valor del oscilador pues en otros pics con oscilador interno como el 12F683, 16F628 y 16F628A he hecho la siguiente prueba:

Primero borro el PIC con Winpic800 salvando antes el valor de calibracion. Luego entro al config y solo activo INTRC CLKOUT y MCLR, luego le doy grabar, ojo que no he cargado ningun programa. Monto el PIC en el protoboard y le pongo alimentacion y tambien conecto el MCLR. Luego mido con un frecuencimetro la patilla OSC CLKOUT, y la frecuencia es la cuarta parte del oscilador interno. Fosc_int / 4 .

Este test lo he hecho con el 12F683 dando un error menor al 1%, tambien lo he hecho con los 16F628 y 16F628A dandome errores del 3 y 5 % respectivamente. Es por eso que mi programa funciona con el 12F683 y no funciona con los 16F628 y 16F628A. Con el 12F508 no se puede hacer este test pues no tiene CLKOUT.

El mismo test lo he tratado de hacer con el 12F675 y siempre me da 1.33 MHz, solo cuando cargo el programa del post anterior me da 1 MHz.

Hare un par de pruebas mas sino cambiare PICS.

Saludos
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo


 

anything