Autor Tema: Problemas con 12f629 y comunicacion Serie  (Leído 4871 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Problemas con 12f629 y comunicacion Serie
« en: 04 de Febrero de 2008, 05:20:28 »
Que tal amigos alguien podria ayudarme a encontrar luz; no me explico que esta pasando con el siguiente programa:

Código: FreeBasic
  1. DEVICE=12F629
  2. CONFIG  INTRC_OSC_NOCLKOUT, MCLRE_OFF, WDT_OFF
  3. 'XTAL=4
  4. INCLUDE "MODEDEFS.BAS"
  5.              
  6. OSCCAL=0
  7. CMCON=7
  8.  
  9. DIM G AS BYTE
  10.  
  11. HIGH GPIO.1
  12. DELAYMS 500
  13. LOW GPIO.1
  14. DELAYMS 500
  15. HIGH GPIO.1
  16. DELAYMS 500
  17. LOW GPIO.1
  18. DELAYMS 500
  19.  
  20. G=0
  21.  
  22. SEND:
  23.  
  24. SERIN  GPIO.2,T9600,[G]
  25.  
  26. IF G="X" THEN
  27. HIGH GPIO.1
  28. SEROUT GPIO.0,T9600,["ON GP1 G =", DEC G,13]
  29. ENDIF
  30.  
  31. IF G="W" THEN
  32.  LOW GPIO.1
  33. SEROUT GPIO.0,T9600,["OFF GP1 G=", DEC G,13]
  34. ENDIF
  35. GOTO SEND

Si dejo el programa como esta, usando el INTRC y deshabilitando el MCLR para usar esos pines, me hace el BLINK de la primera parte bien; pero no adquiere los datos que vienen del puerto serie.

Si cambio el programa, y habilito el XT definiendo XTAL=4 y comentando el config y OSCCAL, ademas de añadir el cristal de 4MHZ y la resitencia de 10K para el MCLR, el programa funciona correctamente. Tanto hace el BLINK como recibe los datos desde el puerto.

Por obvias razones - quiero usar los todos los pines- quisiera no hacer uso de cristal externo ni de la resistencia, Pero ya he probado todo y usando el oscilador interno no funciona. Ya he probado las 4 configuraciones del BANDGAP desde bajo hasta alto y nada ocurre.


Saludos.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Problemas con 12f629 y comunicacion Serie
« Respuesta #1 en: 04 de Febrero de 2008, 08:14:42 »
En el programa veo OSCCAL=0, si usas cristal no afecta.
Pero si usas el oscilador interno tienes que hacer OSCCAL= AL DATO
DE LA ULTIMA POSICION DE MEMORIA, siempre y cuando no este
borrado. Este dato es la calibracion de fabrica que da microchip.
Si se ha borrado tendras que calcularlo, el dato esta sobre 60decimal.
Tambien para en contrar mejor el dato usa una velocidad mas
baja de serie y programa por ejemplo un contador que incrementa
el valor de osccal desde cero despues de una pausa envia el valor
osccal al puerto serie lo monitorizas y llegara un momento que
veas el valor de ajuste, lo suficientemente bueno como para
que funciones la rutina serie.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Saludos desde Granada, España.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Problemas con 12f629 y comunicacion Serie
« Respuesta #3 en: 04 de Febrero de 2008, 16:39:49 »
En el programa veo OSCCAL=0, si usas cristal no afecta.
Pero si usas el oscilador interno tienes que hacer OSCCAL= AL DATO
DE LA ULTIMA POSICION DE MEMORIA, siempre y cuando no este
borrado. Este dato es la calibracion de fabrica que da microchip.
Si se ha borrado tendras que calcularlo, el dato esta sobre 60decimal.
Tambien para en contrar mejor el dato usa una velocidad mas
baja de serie y programa por ejemplo un contador que incrementa
el valor de osccal desde cero despues de una pausa envia el valor
osccal al puerto serie lo monitorizas y llegara un momento que
veas el valor de ajuste, lo suficientemente bueno como para
que funciones la rutina serie.

Muchas gracias por responder, pero en realidad me perdi en esta parte:

Citar
OSCCAL= AL DATO DE LA ULTIMA POSICION DE MEMORIA... el dato esta sobre 60decimal

Segun Yo el dato por default es 0, o Lowest; si es que ese dato corresponde al BANDGAP en el winpic. Yo lo he movido a 128 que se supone es una frecuencia media.

De cualquier modo hare la rutina que me comentas para encontrar el valor adecuado.

Gracias Saludos.



Me contesto sobre el BANDGAP, es para el uso del BOR y POR por default viene como cero segun lo he leido en 2 pics nuevos con el winpic.
« Última modificación: 04 de Febrero de 2008, 16:57:27 por navaismo »
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Problemas con 12f629 y comunicacion Serie
« Respuesta #4 en: 04 de Febrero de 2008, 18:15:18 »
Dogflu tras leer tu mensaje que me has linkado, hice los cambios que comentas, cambie el Valor del Osccal a 63 -como tu ejemplo- y baje la transmision de 9600 a 600 y OH! sorpresa Fucniona! Y bastante bien.

Pero sigo sin entender el porque 63, segun el data del 12F629 osccal solo puede tener 3 valores esta en la  pagina 18 del PDF ahi si me perdi. Pero muchas gracias por ayudarme a resolver esto.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: Problemas con 12f629 y comunicacion Serie
« Respuesta #5 en: 04 de Febrero de 2008, 18:20:52 »
hola

aquí un enlace que me ayudó bastante con eses enanos en su día: 12f629/675

yo tengo probado con DEFINE OSCCAL_1K 1 en pbp y funcionarme bien. de todas formas creo que el link merece una lectura

un saludo

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Problemas con 12f629 y comunicacion Serie
« Respuesta #6 en: 04 de Febrero de 2008, 18:38:05 »
Gracias Xocas por el dato.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Problemas con 12f629 y comunicacion Serie
« Respuesta #7 en: 04 de Febrero de 2008, 19:50:59 »
Hola amigos, para poder utilizar el PIC12F629/675 usando el oscilador interno 4Mhz,
hay que tener en cuenta que puede tener un error de +/-200Khz, esto es un error muy
elevado para utilizar rutinas que necesitan medir el tiempo con una cierta precisión como
le pasa a la función que simula el protocolo de la capa de bajo nivel del RS232. Para poder
calibrar este oscilador interno microchip nos proporciona un registro interno “OSCCAL” ,
de este registro solo son útiles los 6 bit de mayor peso. Para facilitar este trabajo microchip
escribe el valor de calibración distinto para cada chip que fabrica en la ultima posición de
memoria flash 3FFh (para el PIC12F675 que tiene 1Kword, el valor que nos interesa esta en
el Byte bajo 34xx), este valor lo borramos fácilmente si no tenemos cuidado y es irrecuperable
por eso es recomendable leer primero el pic y guardar este valor. Según tengo entendido
hay algunos programadores a los que se le puede indicar que no borren nunca este valor.
También Microchip nos indica en el datasheet mediante una rutinita en Assembler como cargar
este valor en el registro OSCCAL durante el arranque de forma automática. Es misión del
programador ya sea de una forma u otra la de cargar el registro OSCCAL  con el valor adecuado,
en ningún caso lo hace el propio micro por su cuenta. Usando el valor que graba el fabricante en
cada micro se consigue una calibración <2% de error para ser mas exacto tenemos una media
de 1.5% de error y si este valor lo calculamos nosotros, hay varios métodos, podemos llegar
fácilmente a 0.15% de error de media. Y no sigo mas porque estoy escribiendo un articulo
que saldrá publicado precisamente sobre este tema... :wink:

PD: En la direccion de la flash 3FFh se encuentra el valor escrito por el fabricante 34xx, siendo
34 la instruccion codigo maquina cuyo nemonico es RETLW y xx el dato osccal, RETLW xx que
traducido seria carga xx en el registro W y retorna despues del Call, despues de esto solo
queda pasar el valor que contiene W al registro OSCCAL como indica el compañero mas abajo.
« Última modificación: 05 de Febrero de 2008, 20:32:38 por dogflu66 »
Saludos desde Granada, España.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Problemas con 12f629 y comunicacion Serie
« Respuesta #8 en: 04 de Febrero de 2008, 20:12:49 »
Que tal Navaismo,

Tal vez ya captaste el funcionamiento del oscilador interno, pero tal vez no. De cualquier manera me gustaria comentar algo mas.
Los micros de la serie 12 y de la serie 10 que contienen oscilador interno, debe ser calibrado. Pero por defaul los micros ya contienen ese valor de calibracion, que se encuentra en la ultima direccion de la memoria de programa del micro. Es decir en la ultima direccion de la memoria de programa se encuntra un retlw XX o un movlw XX (depende del micro), pero al fin y al cabo la idea es colocar el valor de calibracion en el registro W. Ese valor XX es diferente en cada micro y obviamente cuando lo reprogramas no debes borrar esa localidad de lo contrario tendras que buscar el valor de calibracion, que es un proceso algo detallado. Pero en fin, si usas un programador PICStart Plus, este al programar el micro nunca toca esa localidad, y te avisa mediante una ventana de mensajes que esa localidad no fue borrada. Con otros porgramadores no es asi al parecer tienes que configurarlos para decirles que no toquen esa ultima localidad.

Ahora bien ese valor en W tienes que cargarlo al registro OSCCAL, para que el oscilador interno trabaje a su frecuencia (que en la mayoria es de 4 MHz). Si tu colocas otro valor diferente al valor precalibrado de fabrica, eso ocasiona que el oscilador entregue una frecuencia muy diferente, que es lo que te sucedio cuando le colocaste al OSCCAL el valor de 0.

Una manera super sencilla de cargar ese valor es usando la directiva que te menciono xocas06. es decir el DEFINE OSCCAL_1K_1.

Ahora bien si, lo que paso fue que ya perdiste el valor de la calibracion, existne varias formas de recalibrarla algunas circulan por la red y hasta por este mismo foro. Y algo que yo uso es generar un frecuencia de 10 KHz en uno de los pines, y con el uso de un osciloscopio veo el valor de la frecuencia que se produce, si la frecuencia es muy alta significa que el oscilador es mayor a 4 MHz, y si es menor, lo contrario. Es un metodo de pruebe y error, pero funciona.

Saludos y espero haberte ayudado con este tema.

Elreypic.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Problemas con 12f629 y comunicacion Serie
« Respuesta #9 en: 05 de Febrero de 2008, 13:58:14 »
Gracias amigos, si de ehcho no es la primera vez que uso este PIC de hecho generalmente calibraba el OSCAL a 128 que se supone es una frecuencia media, la cual respetaba las pausas tal como las definia, generalmente me leo los datas antes de usar el pic mas cuando traen oscilador interno. El problema fue que al calibrar el OSCCAL como lo venia haciendo -con 128- no respeta la rutina serie.

Gracias a Carlos he entendido el porque no la respetaba y he solucionado el problema, realmente agradezco a todos sus explicaciones porque, si no fuera por eso uno seguiria pensando que las cosas estan bien cuando no lo estan.

Gracias a Todos. y esperare impaciente ese articulo.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."