Autor Tema: COMUNICACION SERIAL PIC12F675 -(Configuracion de Osc)-Solucionado  (Leído 5624 veces)

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

Desconectado siniestro

  • PIC10
  • *
  • Mensajes: 44
COMUNICACION SERIAL PIC12F675 -(Configuracion de Osc)-Solucionado
« en: 19 de Octubre de 2014, 20:45:14 »
Buen dia compañeros, nuevamente me acerco a ustedes con una duda.  Estoy trabajando en un proyecto en el cual debo enviar datos a una computadora para que sean ingresados a una base de datos Oracle, he trabajado con un pic16f877a, con el cual, el envio de los datos no he tenido problema alguno.  Sin embargo con fines de avanzar, estoy realizando un circuito pequeño usando el PIC12F675, el cual estaria funcionando como un "simulador" del circuito mas grande pues deberia enviar las mismas cadenas de texto como lo haria el circuito completo. El problema radica en que grabo el programa pero al ver los datos recibidos, no coiniciden para nada el codigo es el siguiente:
Código: [Seleccionar]
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 19/10/2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

INCLUDE "modedefs.bas"
DEFINE OSC 4
TRISIO=%00000001
ANSEL=%00000000
CMCON=%00000111
WPU=%00000000
rnd var byte
Temp var byte
HumA var byte
HumT var byte
Peso var byte
Color var byte
Accion var byte
Invernadero var byte
invernadero=1

LOOP
random rnd
temp=(rnd//10)+25
random rnd
huma=(rnd//10)+50
random rnd
humt=(rnd//10)+70
Random rnd
peso=(rnd//100)+1
random rnd
Accion=(rnd//4)
random rnd
color=(rnd//3)

   SEROUT GPIO.1, T9600,["I",#Invernadero,",",#TEMP,",",#HUMA,",",#HUMT,"F"]
   pause 1000
   SEROUT GPIO.1, T9600,["I",#invernadero,",",#peso,",",#color,"F"]
   pause 1000
   SEROUT GPIO.1, T9600,["I",#invernadero,",",#accion,"F"]
   pause 1000
   SEROUT GPIO.1, T9600,["Prueba_de_envio"]
   pause 1000

GOTO LOOP

Se supone que deberia recibir 3 cadenas de la siguiente forma:
"I1,28,50,70,F"
"I1,100,3"
"I1,3"

Sin embargo recibo algo como esto:
ª U²›þª e"ÿª %²›E"ÿª

Ya revice y la velocidad de transmicion esta igual tanto en el envio como en la recepcion, la verdad que ya no se que hacer.  Gracias por su ayuda  
« Última modificación: 23 de Octubre de 2014, 00:09:30 por siniestro »
Saber de todo un poco, sin ser experto en nada (una filosofia extraña)

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: COMUNICACION SERIAL PIC12F675
« Respuesta #1 en: 20 de Octubre de 2014, 05:59:26 »
¿Que oscilador estas usando, el externo o interno?.
Saludos desde Granada, España.

Desconectado siniestro

  • PIC10
  • *
  • Mensajes: 44
Re: COMUNICACION SERIAL PIC12F675
« Respuesta #2 en: 20 de Octubre de 2014, 22:08:05 »

Citar
¿Que oscilador estas usando, el externo o interno?.
Esa es la cuestión, yo quiero usar el oscilador externo, pero por mas que leo no se como configurarlo en el PicBasic Pro, por las pruebas que hice, veo que esta trabajando con cristal interno pero sabra Dios en que frecuencia porque aunque retire el cristal del circuito, el sigue mandando los caracteres extraños, el cristal es de 4MHZ pero necesito saber como configurar el oscilador, quise aprender a usar los dos modos, interno y externo pero por mas que leo el Datasheet no logre hacerlo. Vi un registro donde aparece configuracion para ello pero son 13 bits y  no me reonocio ese registro mi MicroCodeStudio. Gracias por tu respuesta doflu66
Saber de todo un poco, sin ser experto en nada (una filosofia extraña)

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: COMUNICACION SERIAL PIC12F675
« Respuesta #3 en: 20 de Octubre de 2014, 22:36:47 »
No te puedo ayudar como quisiera porque no trabajo con tú lenguaje.
Si te puedo decir que con el oscilador interno es difícil hacer trabajar la comunicación serie porque es un oscilador muy inexacto.
Usando el externo si que funcionara. En el siguiente enlace se explica como realizar un ajuste fino en frecuencia del oscilador interno, para poder trabajar con rs232.
http://www.pickey.es/uso-practico-del-pic12f675--iii-.html
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: COMUNICACION SERIAL PIC12F675
« Respuesta #4 en: 20 de Octubre de 2014, 23:00:23 »
Para que el oscilador externo trabajando con cristal de 4Mz entre en funcionamiento, tienes que activar el bit de configuración XT.
Saludos desde Granada, España.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: COMUNICACION SERIAL PIC12F675
« Respuesta #5 en: 21 de Octubre de 2014, 00:36:23 »
Que tal siniestro,

Como te explica dogflu66 debes configurar los fusibles de modo que actives el oscilador en XT, actualmente lo estas dejando como oscilador interno.
El problema radica en que no está calibrado. Esto se explica claramente en el datasheet del PIC12F675 en la pagina 56; dice asi:

Ejemplo 9-1 Calibrando el oscilador interno

BSF STATUS, RP0 ;Bank 1
CALL 3FFh ;Get the cal value
MOVWF OSCCAL ;Calibrate
BCF STATUS, RP0 ;Bank 0

Eso es lenguaje ensamblador que puedes insertar en tu codido de picbasic al inicio de tu codigo, usando la directiva ASM ENDASM (pagina 194 del manual de PICbasic v 2.60).

Ese valor de calibracion esta grabado de fabrica en la ultima direccion de memoria del PIC, como un RETLW XX (donde xx es el valor de calibracion, y ese valor es diferente en cada PIC, aun cuando sean dos PIC16F675).

Algo que debes saber es que algunos programadores borran toda la memoria de programa antes de cargar un nuevo codigo. Las herramientas de Microchip como el PICKIT 2 y el PICKIT 3 salvoguardan esa direccion dejandola intacta para preservar ese valor de calibracion. Para verificar que ese valor esta ahi, realiza una lectura del micro usando tu programador y luego observa el contenido de la ultima direccion de la memoria de programa si hay un RETLW XX todo esta bien simplemente usa el procedimiento anterior, si no entonces tienes que buscar un metodo para calibrar el micro de forma manual y es algo doloroso.

Otro forma de cargar ese valor de calibracion directamente usando BASIC es usar la directiva DEFINE de la siguiente manera.

El PIC16F675 en un micro de 1K de memoria de programa entonces, seria como sigue:

Define OSCCAL_1K 1

Esto esta explicado en la pagina 12 del manual del PICBASIC Pro ver. 2.60.


En picbasic tambien puedes definir los fusibles desde tu codigo con la directiva "@" de la siguiente manera:

@   __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_ON & _BODEN_ON & _CPD_OFF

En la instruccion anterior estas predefiniendo los fusibles como sigue;

_INTR_OSC_NOCLKOUT    Oscilador interno con el pin de salida usado como puerto ( en tu caso, este lo cambias por _XT_OSC para usar el oscilador externo de 4MHz y colocas tu cristal)
_WDT_OFF  Watch-dog timer apagado o deshabilitado
_PWRTE_ON Power-up timer habilitado
_MCLRE_OFF  master clear (reset) deshabilitado, el pin GPI0.3 puede ser usado solamente como pin de entrada
_CP_ON    Memoria de programa protegida de lectura (asi nadie puede leer lo que hay en tu PIC)
_BODEN_ON   Brown-out detect habilitado (Reset automatico cuando el voltaje de alimentacion es muy bajo)
_CPD_OFF    Memoria de datos no protejida.

Para que esto funcione tienes que editar el archivo que hay en la libreria de instalacion del PICBasic Pro (12F675.INC) De otro modo te va a generar un error de compilacion.

Saludos y espero que esto te sirva para resolver tu problema.

elreypic.

Desconectado siniestro

  • PIC10
  • *
  • Mensajes: 44
Re: COMUNICACION SERIAL PIC12F675
« Respuesta #6 en: 21 de Octubre de 2014, 00:44:09 »
Gracias elreypic y dogflu66, voy a leerme toda la informacion para cuando necesite usar el oscilador interno, comprendo que es inexacto y por eso tengo conectado el cristal,
Para que el oscilador externo trabajando con cristal de 4Mz entre en funcionamiento, tienes que activar el bit de configuración XT.
Ese bit de configuaracion REGISTER 9-1: CONFIG — CONFIGURATION WORD (ADDRESS: 2007h) segun la pagina 54 del datasheet

Citar
bit 2-0 FOSC2:FOSC0: Oscillator Selection bits
111 = RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN
110 = RC oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN
101 = INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
100 = INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
011 = EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN
010 = HS oscillator: High speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
001 = XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
000 = LP oscillator: Low power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN

el problema es que no se como asignar en mi caso 1 al bit 0 de ese registro, tendre que hacerlo insertando codigo en ensamblador como sugiere el amigo elreypic

Citar
Las herramientas de Microchip como el PICKIT 2 y el PICKIT 3 salvoguardan esa direccion dejandola intacta para preservar ese valor de calibracion
Uso el Pickit 2 y efectivamente, ya antes habia leido sobre el valor del OSCCAL y guarde el valor la primera vez q lei el PIC, pero luego vi que el Pickit, guarda ese valor y lo vuelve a escribir en la posicion correcta en mi caso es 3448 si mal no recuerdo. .
« Última modificación: 21 de Octubre de 2014, 00:46:57 por siniestro »
Saber de todo un poco, sin ser experto en nada (una filosofia extraña)

Desconectado siniestro

  • PIC10
  • *
  • Mensajes: 44
Re: COMUNICACION SERIAL PIC12F675
« Respuesta #7 en: 21 de Octubre de 2014, 01:39:17 »
Amigo elreypic2
Citar
Para que esto funcione tienes que editar el archivo que hay en la libreria de instalacion del PICBasic Pro (12F675.INC) De otro modo te va a generar un error de compilacion.
lei el archivo con el nombre M12F665.INC y encontre esto
Citar
; *** DEVICE Fuses Definitions
EXTRC      equ   3FF80007h       ; XX XXXX XXXX X111
EXTRC_OSC_CLKOUT equ    3FF80007h       ; XX XXXX XXXX X111
EXTRCIO      equ   3FF80006h       ; XX XXXX XXXX X110
EXTRC_OSC_NOCLKOUT equ  3FF80006h       ; XX XXXX XXXX X110
EXTRC_OSC       equ     3FF80006h       ; XX XXXX XXXX X110
INTOSC      equ   3FF80005h       ; XX XXXX XXXX X101
INTRC_OSC_CLKOUT equ    3FF80005h       ; XX XXXX XXXX X101
INTOSCIO   equ   3FF80004h       ; XX XXXX XXXX X100
INTRC_OSC_NOCLKOUT equ  3FF80004h       ; XX XXXX XXXX X100
INTRC_OSC       equ     3FF80004h       ; XX XXXX XXXX X100
EC_OSC          equ     3FF80003h       ; XX XXXX XXXX X011
HS_OSC          equ     3FF80002h       ; XX XXXX XXXX X010
XT_OSC          equ     3FF80001h       ; XX XXXX XXXX X001
LP_OSC          equ     3FF80000h       ; XX XXXX XXXX X000
WDT_ON          equ     3FF70008h       ; XX XXXX XXXX 1XXX
WDT_OFF         equ     3FF70000h       ; XX XXXX XXXX 0XXX
PWRT_OFF        equ     3FEF0010h       ; XX XXXX XXX1 XXXX
PWRT_ON         equ     3FEF0000h       ; XX XXXX XXX0 XXXX
MCLR_ON         equ     3FDF0020h       ; XX XXXX XX1X XXXX
MCLR_OFF        equ     3FDF0000h       ; XX XXXX XX0X XXXX
BOD_ON          equ     3FBF0040h       ; XX XXXX X1XX XXXX
BOD_OFF         equ     3FBF0000h       ; XX XXXX X0XX XXXX
PROTECT_ON      equ     3F7F0000h       ; XX XXXX 0XXX XXXX
PROTECT_OFF     equ     3F7F0080h       ; XX XXXX 1XXX XXXX
CPD_ON          equ     3EFF0000h       ; XX XXX0 XXXX XXXX
CPD_OFF         equ     3EFF0100h       ; XX XXX1 XXXX XXXX

coloque lo siguiente en mi programa
Código: [Seleccionar]
@ __config _XT_OSC
INCLUDE "modedefs.bas"
DEFINE OSC 4
TRISIO=%11110
ANSEL=%00000000
CMCON=%00000111
pero sigue sin funcionar  :(
Saber de todo un poco, sin ser experto en nada (una filosofia extraña)

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: COMUNICACION SERIAL PIC12F675
« Respuesta #8 en: 22 de Octubre de 2014, 12:14:56 »
Que tal siniestro,

Para poder configurar los fuses o el registrod e configuracion, se hace mediante el software del programador. Tu dices que estas usando el PICkit 2 pero no menciones que IDE estas usando si el IDE del Pickit 2 Programmer o el MPLAB.

Si usas el MPLAB es muy sencillo cambiar los bits del registro de configuracion o como lo conocemos los piclisteros los fusibles.
En el MPLAB vas al MENU, despues das click en Configure, seleccionas Configuration Bits. Al abrirse la ventana hay una casilla que dice: Configuration Bits set in code (si esta seleccionada quiere decir que tu estas predefiniendo los fusibles desde tu codigo, que  es todo el procedimiento que te he descrito anteriormente). Tienes que deseleccionarla para que entonces tu puedas modificar los fusibles manualmente. En esa ventana veras que hay una opcion que dice FOSC y por default esta en RC oscillator. simplemente dale click ahi y aparecera todo el menu de opciones del cual seleccionas el que dice INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN.

Asi de simple.

Si estas usando el IDE del PICKit2 programmer entonces es un poquito mas complicado, pero no tanto.
En ese IDE a un lado DEVICE   esta la palabra Configuration: 01FF y si te fijas la palabra configuration esta en azul y subrayada. Le das click a palabra y te aparecera un ventana que se llama Configuration Word Editor.
Veras que solamente 9 bits estan implementados (los bits 9-15 no lo estan, porque no tiene ninguna funcion). En los bits 0-8 estan los fusibles. Aqui es que haces uso del datasheet del micro. En la pagina 54 esta la asignacion del registro de configuracion. Y como puedes ver los bits 0 al 2 es para selecionar el tipo de oscilador. Para selecionar el oscilador interno los bits 2,1 y 0 deben ser 100. Bingo!!!!!!!
Regresas a la ventana de Configuration Word Editor y dando click a cada a la casilla correspondite veras que puedes cambiar de 1 a 0 o de 0 a 1. Una vez que haces esto le das click al boton de salvar y entonces procedes a grabar el micro (previamente ya has cargado el archivo hexadecimal de tu programa).

Recuerdca que previamente en tu programa debes incluir:
DEFINE   OSCCAL_1K 1

Saludos,

Elreypic.     

Desconectado siniestro

  • PIC10
  • *
  • Mensajes: 44
Re: COMUNICACION SERIAL PIC12F675
« Respuesta #9 en: 22 de Octubre de 2014, 13:01:49 »
Hola elreypic2, te agradesco infinitamente tu apoyo, al momento de leer tu respuesta me encuentro en el trabajo y no cargo mis juguetes (por lo regular siempre los tengo por si tengo algun tiempo libre lo aprovecho )
Citar
Para poder configurar los fuses o el registrod e configuracion, se hace mediante el software del programador. Tu dices que estas usando el PICkit 2 pero no menciones que IDE estas usando si el IDE del Pickit 2 Programmer o el MPLAB.
Te comento que mi IDE es el MicroCode Estudio y uso el PICkit 2 para grabar el .hex

Citar
Si estas usando el IDE del PICKit2 programmer entonces es un poquito mas complicado, pero no tanto.
En ese IDE a un lado DEVICE   esta la palabra Configuration: 01FF y si te fijas la palabra configuration esta en azul y subrayada. Le das click a palabra y te aparecera un ventana que se llama Configuration Word Editor
Exelente, aunque no tengo un PIC a mano, abrí el programa y encontre la seccion que me indicas y creo que con esto ya debe andar.

Citar
En la pagina 54 esta la asignacion del registro de configuracion. Y como puedes ver los bits 0 al 2 es para selecionar el tipo de oscilador. Para selecionar el oscilador interno los bits 2,1 y 0 deben ser 100. Bingo!!!!!!!
Si, ya me habia leido esa seccion pero no sabia como poder configurar eso desde el codigo, creo que de la forma manual en el Programa para grabar, asi es mas facil. Yo quiero usar el oscilador externo, en mi caso debe ser 001 los bit del 0-2

Citar
Recuerdca que previamente en tu programa debes incluir:
DEFINE   OSCCAL_1K 1
Eso es solo cuando necesite usar el oscilaro externo verdad???

Aprendí mucho en este post, les agradesco a dogflug66 y a ud elreypic2
Saber de todo un poco, sin ser experto en nada (una filosofia extraña)

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: COMUNICACION SERIAL PIC12F675
« Respuesta #10 en: 22 de Octubre de 2014, 13:35:09 »
Que tal siniestro,

DEFINE  OSCCAL_1K 1
Solo se usa para usar el oscilador interno. Si usas el oscilador externo XT no necesitas esta directiva.

Saludos.

Elreypic.

Desconectado siniestro

  • PIC10
  • *
  • Mensajes: 44
Re: COMUNICACION SERIAL PIC12F675(solucionado
« Respuesta #11 en: 22 de Octubre de 2014, 13:38:15 »
Gracias elreypic2, una vez que grabe mi PIC y lo vea funcionar correctamente, daré por solucionado este tema. .
Gracia a Todos. .
Saber de todo un poco, sin ser experto en nada (una filosofia extraña)