Autor Tema: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232  (Leído 25839 veces)

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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS2
« Respuesta #90 en: 24 de Diciembre de 2010, 10:21:16 »
Pues en la pag 25  en la tabla TABLE 2-2:CAPACITOR SELECTION FOR CRYSTAL OSCILLATOR pone que el crystal es de 4MHz. Es difícil entenderlo bien porque hay muchos modos y muchas configuraciones distintas.

  Si te referís a la página 25 del datasheet del PIC18F4550, lo que allí figura es para usarlo como guía.

  Mi pregunta se refería a ¿Qué cristal tiene tu placa PICDEM? Pues si no sabemos eso no vamos a poder determinar los bits de configuración.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS2
« Respuesta #91 en: 24 de Diciembre de 2010, 10:24:15 »
Es de 20MHz, confirmado!
Acabo de mirarlo..
« Última modificación: 24 de Diciembre de 2010, 10:32:55 por edu1989 »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS2
« Respuesta #92 en: 24 de Diciembre de 2010, 10:37:26 »
Y como puedo saberlo? en la placa encima del crystal pone JWT20.000.. imagino que de 20MHz no?

  Claro, casi seguro que es de 20MHz.
  Y como vos habías configurado los bits para que pase directo la señal del cristal hacia el núcleo, tu PIC termina trabajando a 20MHz, entonces por ello es que no te envía bien los datos. Porque habías calculado la velocidad para una frecuencia de 4MHz.

  Mirando el diagrama de la página 24 del datasheet del PIC, veo que el oscilador primario puede ser dividido en 4, 3, 2 o 1 (según la configuración de los bits CPUDIV). Así que no se podría hacer que trabaje a 4MHz

  Se puede recalcular el TAD para 20MHz y cambiar en el programa PIC_CLK de 4000000 a 20000000. Con eso debería funcionar.

  Sino también se puede configurar los CPUDIV para que divida 4, recalcular el TAD para 5MHz y cambiar PIC_CLK 4000000 por PIC_CLK 5000000
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS2
« Respuesta #93 en: 24 de Diciembre de 2010, 10:39:12 »
Vale la pena que el PIC trabaje a 5MHz en vez de a 20MHz? mas que nada es por si se ve claramente la diferencia.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS2
« Respuesta #94 en: 24 de Diciembre de 2010, 10:49:39 »
Vale la pena que el PIC trabaje a 5MHz en vez de a 20MHz? mas que nada es por si se ve claramente la diferencia.

  Yo te mostraba la opción de 5MHz para que sea más parecida a los 4MHz conque se había pensado el programa. Porque tal vez para 20MHz habría que cambiar alguna otra cosa en cuanto a la configuración del UART. Aunque viendo la fórmula, me parece que funcionaría bien igual.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS2
« Respuesta #95 en: 24 de Diciembre de 2010, 11:28:06 »
Me quedo con los 5 entonces y ya esta. Entonces lo dejo todo tal y como lo tngo y cambio los bits para que divida por 4 no? Volvere a calcular el Tad tanto del sensor como del pote.

Muchas gracias

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS2
« Respuesta #96 en: 24 de Diciembre de 2010, 11:41:13 »
Me quedo con los 5 entonces y ya esta. Entonces lo dejo todo tal y como lo tngo y cambio los bits para que divida por 4 no? Volvere a calcular el Tad tanto del sensor como del pote.

Muchas gracias

  Sí, hay que recalcular el TAD del conversor AD. También cambiar la definición de PIC_CLK de 4000000 a 5000000.

  ¿A que te referís con el TAD del sensor?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS2
« Respuesta #97 en: 24 de Diciembre de 2010, 11:44:33 »
Me parecia recordar que alguna otra funcion tambien jugaba con la freq. Voy a mirarlo y a arreglarlo y ya te dire.

Gracias

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #98 en: 25 de Diciembre de 2010, 15:09:57 »
Estoy arreglando la funcion del conversor para que funcione  tambien con la nueva freq (5MHz) y me da un error en el proteus..
" adc clock period (1.6667e-7) violates the minimum required Tad time"

He seguido los pasos que hicimos la otra vez... Me explico:

Para el Tad ( tiempo de conversion bit a bit), dijimos que la Tad real tenia que ser mayor a una Tad minima ( dijimos 0.7us pero en el datasheet he visto 0.8us)
Por tanto la Tad sera Tosc( 1/5Mhz=0.2us)* X >= 0.8 o 0.7
En principio la configuracion que teniamos de los bits ADCS2:ADCS0 (100) ya funcionaria (Tosc*4= 0.2us*4= 0.8us). Por tanto Tad=0.8us

En cambio para el Tacq habia la condicion que el Tacq tenia que ser mayor a un tiempo de adquisicion calculado ( en base a unos tiempos etc etc...) que daba 1.65us.

Aqui es donde creo que hay que hacer el cambio ya que Tacq(calculada teoricamente)<= x* Tad que viene siendo 1.65us<= x* 0.8. Por tanto ya no podria ser 2Tad y tendria que ser 4Tad para cumplir la condicion.

Dejo el codigo aqui:
Código: [Seleccionar]
void setup_adc(void)
{
  ADFM = 1;
  ADCON1 = 14; // PCFG3=1,PCFG2=1,PCFG1=1,PCFG0=0. Todas las entradas digitales
  // Seleccionamos el canal 0 (AN0) que es donde esta conectado el potenciometro
  CHS3 = 0;
  CHS2 = 0;
  CHS1 = 0;
  CHS0 = 0;
  //Tiempo de adquisicion
  ACQT2 = 0;
  ACQT1 = 1; 
  ACQT0 = 0;
  // Tiempo de conversion
  ADCS2 = 1;
  ADCS1 = 0;    //                         Idem a 4Tosc. 4*Tosc(1/5Mhz = 0.2us) es el primer valor que hace que sea superior a 0.7us( el minimo) (100)
  ADCS0 = 0;
 
  ADON = 1; // A/D converter module is enabled
  /* Configure A/D interrupt*/
  ADIF = 0;
}

Gracias de nuevo.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #99 en: 26 de Diciembre de 2010, 12:38:47 »
Estoy arreglando la funcion del conversor para que funcione  tambien con la nueva freq (5MHz) y me da un error en el proteus..
" adc clock period (1.6667e-7) violates the minimum required Tad time"

He seguido los pasos que hicimos la otra vez... Me explico:

Para el Tad ( tiempo de conversion bit a bit), dijimos que la Tad real tenia que ser mayor a una Tad minima ( dijimos 0.7us pero en el datasheet he visto 0.8us)


  El parámetro 130 de la tabla 28-29 indica que el TAD mínimo para un PIC18Fxxxx con una VCC >=3V es de 0.7us


Por tanto la Tad sera Tosc( 1/5Mhz=0.2us)* X >= 0.8 o 0.7
En principio la configuracion que teniamos de los bits ADCS2:ADCS0 (100) ya funcionaria (Tosc*4= 0.2us*4= 0.8us). Por tanto Tad=0.8us

En cambio para el Tacq habia la condicion que el Tacq tenia que ser mayor a un tiempo de adquisicion calculado ( en base a unos tiempos etc etc...) que daba 1.65us.

Aqui es donde creo que hay que hacer el cambio ya que Tacq(calculada teoricamente)<= x* Tad que viene siendo 1.65us<= x* 0.8. Por tanto ya no podria ser 2Tad y tendria que ser 4Tad para cumplir la condicion.

Dejo el codigo aqui:
Código: [Seleccionar]
void setup_adc(void)
{
  ADFM = 1;
  ADCON1 = 14; // PCFG3=1,PCFG2=1,PCFG1=1,PCFG0=0. Todas las entradas digitales
  // Seleccionamos el canal 0 (AN0) que es donde esta conectado el potenciometro
  CHS3 = 0;
  CHS2 = 0;
  CHS1 = 0;
  CHS0 = 0;
  //Tiempo de adquisicion
  ACQT2 = 0;
  ACQT1 = 1; 
  ACQT0 = 0;
  // Tiempo de conversion
  ADCS2 = 1;
  ADCS1 = 0;    //                         Idem a 4Tosc. 4*Tosc(1/5Mhz = 0.2us) es el primer valor que hace que sea superior a 0.7us( el minimo) (100)
  ADCS0 = 0;
 
  ADON = 1; // A/D converter module is enabled
  /* Configure A/D interrupt*/
  ADIF = 0;
}

Gracias de nuevo.

  A mi me parece que está bien como lo estás dejando.

  El error te lo tira proteus, pregunto ¿Que frecuencia le estás poniendo al proteus para que trabaje? Porque si no me equivoco tenés que ponerle la frecuencia de trabajo del núcleo. En este caso sería 5MHz y no los 20MHz que es el cristal que tenés.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS2
« Respuesta #100 en: 26 de Diciembre de 2010, 15:19:59 »
He puesto 5MHz.. no se porque me tira el error.. mas tarde subo el proteus y el codigo entero.

Edito: He probado de grabarlo y sigue sin funcionar.. sigue pasando lo mismo.. se envian caracteres extraños.. ( con el cable normal, sin cruzar). Adjunto una carpeta con todo el proyecto.

A ver si descubrimos que es lo que passa..

 Aprovecho tambien para felicitaros las fiestas desde España. Un saludo y gracias.
« Última modificación: 26 de Diciembre de 2010, 20:30:17 por edu1989 »

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #101 en: 27 de Diciembre de 2010, 09:14:06 »
Hola de nuevo. He estado probando pero esta vez he encontrado un esquema en el proteus que simula toda mi placa. En esa simulacion cuando clicas encima del PIC te permite poner la palabra de configuracion, he hecho la AND de todas las palabras y me ha quedado una que he puesto alli y la he quitado del programa      ( del mplab). Funciona y por lo que creo es que la palabra de configuracion en el proteus no se pone en el codigo sino que se especifica en esa opcion.

Ahora hay que descubrir porque no funciona y recibo caracteres raros...

Gracias

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #102 en: 27 de Diciembre de 2010, 11:06:41 »
  Yo lo simuló en Proteus sin poner nada en la palabra de configuración e incluso sin poner las sentencias "__CONFIG (x,xx)" en el programa. Lo único que hice fue asignar un clock de 5MHz y obviamente los cambios de PIC_CLK en el programa y también el cambio en el TAD y en el tiempo de adquisición. Al simularlo así funcionó perfectamente.

  Voy a investigar eso de la palabra de configuración, a ver que pasa.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #103 en: 27 de Diciembre de 2010, 11:08:26 »
Si eso ya lo intente y tambien me funciono. Ahora cuando agregues las palabras de configuración a ver que pasa... yo lo hago como te he explicado antes.

Gracias nuevamente.

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #104 en: 28 de Diciembre de 2010, 08:16:13 »
Sigue sin funcionar... he pensado que podia ser el max232 pero ya viene dentro de la placa y no tendria que dar problemas..
Tambien he pensado en la velocidad y es la misma en los dos.. no se que mas probar la verdad..
He probado de bajar la velocidad a 4800 y configurarla de esta forma tambien en el hyperterminal y nada..

Lo que me estoy preguntando ahora ( que estoy seguro que no es el problema) es que en el hyperterminal hay un bit de parada y en mi caso.. no he configurado nada de eso.

Tengo que entregar el proyecto pronto y pensaba que esta parte seria un poco mas rapida.. pero ya veo que no..
A ver si alguien puede ayudarme, muchas gracias de antemano.
« Última modificación: 28 de Diciembre de 2010, 08:19:04 por edu1989 »