Autor Tema: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]  (Leído 11564 veces)

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

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #30 en: 31 de Diciembre de 2010, 10:53:06 »
Te explico un poco todo lo que he hecho. He probado el programa con la condicion temp <20 y pote <50 y funciona OK, porque ahora mismo estamos a 18 grados aqui donde estoy y es un valor entero.

La segunda prueba, la he hecho con la condicion temp < 10 y pote < 500 y me pone q la temp es 168, es como si no cogiera bien la temperatura si la primera vez no entra en el if  o no se q pasa..
Lo que si que veo es que cuando es temp=168 el bucle no para y no se q passa.. de eso saco que 168 no es 16.8 ya que la condicion esta por debajo de 10.

Como creo que es eso, ahora mismo estaba enviando los datos ( me salia el 168), he sacado el cable rs232 del pic ( con el puerto abierto) he vuelto a connectarlo y que grata sorpresa! temperatura =18 grados! lo que si que falla es que lo va enviando continuamente...

P.D: No se porque pero me parece que no es un problema de comas ya que si la temperatura fuera de 16.8 mostraria o 16 o 17 pero creo que este no es el problema. A veces aparecen estos 168 por algun que otro motivo.
« Última modificación: 31 de Diciembre de 2010, 10:58:08 por edu1989 »

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #31 en: 31 de Diciembre de 2010, 11:35:51 »
Ese 168 es problema del tiempo de adquisicion de datos del sensor. Nada mas.

El programa ahora funciona perfecto, lo unico que no muestra bien es cuando le envio el caracter "a" para que me envie los dos datos, el dato del pote esta Ok pero el dato del sensor siempre es 0. Luego si hago cumplir la condicion me dice la temp adequada del sensor..

Creo que en el caso de que se enviase un caracter ( en nuestro caso "a"), tendriamos que leer dentro de esa pequeña parte del codigo el dato que hay del sensor.


Gracias de antemano.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #32 en: 31 de Diciembre de 2010, 12:21:24 »
Ese 168 es problema del tiempo de adquisicion de datos del sensor. Nada mas.


  En el datasheet del TC77 me pareció leer que el tiempo de adquisición es de 300ms, pero si se intenta leer el dato antes que termine dicha adquisición el dato que envía el TC77 es el dato que estaba almacenado anteriormente.
Supongamos que el sensor tiene en su registro el valor correspondiente a 17º y yo leo dicho dato. De repente es expuesto a 25º y comienza la adquisición propia del sensor, si yo intento leer en este momento me devolvería 17 si es que todavía no terminó con la adquisición. No debería devolver un valor erróneo.


El programa ahora funciona perfecto, lo unico que no muestra bien es cuando le envio el caracter "a" para que me envie los dos datos, el dato del pote esta Ok pero el dato del sensor siempre es 0. Luego si hago cumplir la condicion me dice la temp adequada del sensor..

Creo que en el caso de que se enviase un caracter ( en nuestro caso "a"), tendriamos que leer dentro de esa pequeña parte del codigo el dato que hay del sensor.


  No debería ser ese el problema, porque lo único que hace el programa es forzar a que se envíen los datos, tanto si la temperatura es menor a 20 como si yo le envío la "a" por el RS232.
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: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #33 en: 31 de Diciembre de 2010, 12:23:24 »
El 168 ya no me sale al poner un delay mas grande. El problema ahora es que envia temp=0 cuando pido los datos enviando el caracter "a"
He probado eso de leer el dato justo antes de enviarlo y sigue enviado el 0.

P.d: Yo tambien he leido eso de los 300ms y si q tienes razon.. no se de donde saldra entonces el 168 q salia.
« Última modificación: 31 de Diciembre de 2010, 12:25:26 por edu1989 »

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #34 en: 02 de Enero de 2011, 09:54:58 »
Hola a todos, aprovecho la ocasion para felicitaros el año y la navidad. Espero que estas fiestas esten hiendo bien

He seguido probando cosas y pasa lo que pasaba hasta ahora.. funciona bien pero cuando envio el caracter a q tiene que devolverme los dos datos, el valor del sensor es 0 no se porque.

Seguire mirando cosas y posteando los resultados.

Muchas gracias.

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #35 en: 03 de Enero de 2011, 06:33:25 »
Ahora vuelve a salirme el 168. He cambiado a 5MHz y lo he probado y me sale el 168 con la condicion temp < 30ºC ( siempre esta enviando). Por otro lado sigue enviando temp=0 cuando envio el caracter "a"

Ayuda por favor! no se que intentar ya..

ARREGLADO! Era el pin CS! que estaba en rb3 y tenia que estar en rb2.. pequeñas cosas que hacen que todo falle!
« Última modificación: 03 de Enero de 2011, 06:54:08 por edu1989 »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #36 en: 03 de Enero de 2011, 13:54:48 »
  Entonces, para clarificar, ¿Cómo quedó el asunto? ¿Está funcionando todo bien ahora?
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: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #37 en: 03 de Enero de 2011, 14:00:41 »
Si, todo OK.
Mirate el post que he abierto hoy para que veas donde estoy ahora mismo. Se por un dia que me dijiste que no dominas mucho los comandos AT pero creo que el problema que tengo no es con los comandos.

Muchas gracias.

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #38 en: 10 de Enero de 2011, 15:07:44 »
Hola de nuevo Angel, tengo una pequeña parte mas para ayer.


Tengo que hacer que el dispositivo que va conectado al PIC (via RS232) sea detectable y conectable para otros dispositivos. Eso lo hago con comandos AT ( es igual que no sepas como funcionan). Tengo que enviar por el puerto ser ie los siguientes comandos:
Código: [Seleccionar]
ats0=1<cr>
ats512=4<cr>
ats502=1<cr>
ats536=1<cr>
at+btk="XXXX"<cr>
at&w<cr>
atz<cr>

Cuando recibo cada comando, el modulo Bluetooth me envia un "OK" de vuelta por el puerto serie. Tengo que ir enviado por ejemplo: ats0=1 y esperar a recibir el OK, y cuando lo reciba enviar la siguiente instruccion. Despues de cada instruccion hay que enviar el cambio de linea tambien. Esta parte solo es para hacer el modulo detectable y connectable

Despues tengo que estar a la espera de que el otro modulo se quiera connectar con el del PIC. Hay que estar leyendo el puerto serie para saber cuand envia a peticion de connexion. Despues pondre exactamente el mensaje que envia.

Despues de todo esto hay que iniciar el programa que ya tenemos hecho. Pongo una pequeña parte del codigo que es como yo lo he planteado.
Código: [Seleccionar]
// Establecer connexion con comandos AT

putst ("AT");
putst ("\n");
//Comprovar que reciba  "OK"


putst ("ATS0=1")
putst ("\n");
//Comprovar que reciba  "OK"

putst ("ATS512=4")
putst ("\n");
//Comprovar que reciba  "OK"

putst ("ATS502=1")
putst ("\n");
//Comprovar que reciba  "OK"

putst ("ATS536=1")
putst ("\n");
//Comprovar que reciba  "OK"

putst ("AT+BTK="1234"")
putst ("\n");
//Comprovar que reciba  "OK"

putst ("AT&W")
putst ("\n");
//Comprovar que reciba  "OK"

putst ("ATZ")
putst ("\n");
//Comprovar que reciba  "OK"

 
Si se recibe el mensaje siguiente, empieza el programa:
Código: [Seleccionar]
PAIR 1 008098E6A5F4
PAIR 0 008098E6A5F4
CONNECT 008098E6A5F4,1101 A

Cuando se lea esto, el programa puede empezar con normalidad

Muchas gracias de antemano Angel
« Última modificación: 10 de Enero de 2011, 15:53:00 por edu1989 »

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #39 en: 11 de Enero de 2011, 05:45:34 »
Hola a todos, he seguido haciendo pruebas y he sacado esto:
Código: [Seleccionar]
Establecer connexion con comandos AT
   ================================================================================= */

//Primer comando AT
putst ("AT");
putst ("\n");
//Comprovar que reciba  "OK"
 if (getch_available() == true) //Si hay un caracter disponible recibido por el puerto serie
 {
   comando_recibido1 = getch();    // Cambiar getch por una funcion que lea mas de 1 caracter
   while (comando_recibido1!="OK"){
      error_comando=0;
}
if(comando_recibido1=="OK")
      error_comando=1;
 }

//Segundo comando AT
if (error_comando==1)
{
error_comando=0;
putst ("ATS0=1");
putst ("\n");
 if (getch_available() == true) //Si hay un caracter disponible recibido por el puerto serie
 {
   comando_recibido2 = getch();    // Cambiar getch por una funcion que lea mas de 1 caracter
   while (comando_recibido2!="OK")
      error_comando=0;
if(comando_recibido2=="OK")
      error_comando=1;
 }
}



//Tercer comando AT
if (error_comando==1)
{
error_comando=0;
putst ("ATS512=4");
putst ("\n");
 if (getch_available() == true) //Si hay un caracter disponible recibido por el puerto serie
 {
   comando_recibido3 = getch();    // Cambiar getch por una funcion que lea mas de 1 caracter
   while (comando_recibido3!="OK")
      error_comando=0;
if(comando_recibido3=="OK")
      error_comando=1;
 }
}


//Quarto comando AT
if (error_comando==1)
{
error_comando=0;
putst ("ATS502=1");
putst ("\n");
 if (getch_available() == true) //Si hay un caracter disponible recibido por el puerto serie
 {
   comando_recibido4 = getch();    // Cambiar getch por una funcion que lea mas de 1 caracter
   while (comando_recibido4!="OK")
      error_comando=0;
if(comando_recibido4=="OK")
      error_comando=1;
 }
}


//Quinto comando AT
if (error_comando==1)
{
error_comando=0;
putst ("ATS536=1");
putst ("\n");
 if (getch_available() == true) //Si hay un caracter disponible recibido por el puerto serie
 {
   comando_recibido5 = getch();    // Cambiar getch por una funcion que lea mas de 1 caracter
   while (comando_recibido5!="OK")
      error_comando=0;
if(comando_recibido5=="OK")
      error_comando=1;
 }
}


//Sexto comando AT
if (error_comando==1)
{
error_comando=0;
putst ("AT+BTK=1234");
putst ("\n");
 if (getch_available() == true) //Si hay un caracter disponible recibido por el puerto serie
 {
   comando_recibido6 = getch();    // Cambiar getch por una funcion que lea mas de 1 caracter
   while (comando_recibido6!="OK")
      error_comando=0;
if(comando_recibido6=="OK")
      error_comando=1;
 }
}

//Septimo comando AT
if (error_comando==1)
{
error_comando=0;
putst ("AT&W");
putst ("\n");
 if (getch_available() == true) //Si hay un caracter disponible recibido por el puerto serie
 {
   comando_recibido7 = getch();    // Cambiar getch por una funcion que lea mas de 1 caracter
   while (comando_recibido7!="OK")
      error_comando=0;
if(comando_recibido7=="OK")
      error_comando=1;
 }
}

//Octavo comando AT
if (error_comando==1)
{
error_comando=0;
putst ("ATZ");
putst ("\n");
 if (getch_available() == true) //Si hay un caracter disponible recibido por el puerto serie
 {
   comando_recibido8 = getch();    // Cambiar getch por una funcion que lea mas de 1 caracter
   while (comando_recibido8!="OK")
      error_comando=0;
if(comando_recibido8=="OK")
      error_comando=1;
 }
}

Hay errores y deberiamos cambiar la funcion getch ya que esta solo lee un caracter y en este caso se envia un "OK" que son dos caracteres

Ayudenme por favor.
Muchas gracias, seguire investigando...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #40 en: 11 de Enero de 2011, 10:25:18 »
  En estos momentos estoy sin mi PC, porque tengo conectada la de un amigo para probarla; supongo que para el miércoles ya conectaré la mía.
  Podrías fijarte en www.microchipc.com, si en las funciones para RS232 no está ya implementada una función para lectura de cadena a travez del RS232, sino habrá que hacer una rutina propia.

  Creo que cuando envías un comando podés poner directamente "puts ("AT/n");" Con el "/n" ya incluido, tal vez sea más legible así. Es sólo cuestión de gustos.

  En un if hacés "if (comando_recibido1 == "OK") error_comando = 1". Pero no podés comparar cadenas de caracteres de esa manera. Si no me equivoco la función para comparar cadenas de caracteres es STRCMP.

 
  Y como simple detalle, creo que la mayoría de los lenguajes de programación (al menos lo sé de Pascal y Delphi), cuando una función se ejecutó bien el error es 0 (cero). Tal vez para unificar criterios podrías hacer lo mismo, es decir, si el if de comando_recibido es OK entonces poner "error_comando = 0".
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: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #41 en: 11 de Enero de 2011, 11:13:11 »
Muchas gracias! ( Que fallo no usar el strcmp..). Ya he modificado todo lo que dices.

Me sale un error ahora porque creo que debo pasar el puntero de los caracteres. Si te fijas en la declaracion de la función strcmp en la lib string.h:
Código: [Seleccionar]
#include <string.h>

int
strcmp(register const char * s1, register const char * s2)
{
register signed char r;

while(!(r = (unsigned char)*s1 - (unsigned char)*s2++) && *s1++)
continue;
return r;
}


Yo en mi programa lo hago de esta forma: ( Pongo solo una de las palabras porque en todos los casos es lo mismo, lo unico que cambia es el caracter enviado)
Código: [Seleccionar]
//Segundo comando AT
if (error_comando==0)
{
error_comando=1;
putst ("ATS0=1/n");

 if (getch_available() == true) //Si hay un caracter disponible recibido por el puerto serie
 {
   comando_recibido2 = getch();    // Cambiar getch por una funcion que lea mas de 1 caracter
 while (strcmp(comando_recibido2, comando_recibido_ideal)!= 1 ){
      error_comando=1;
}
if(strcmp(comando_recibido2, comando_recibido_ideal) == 1 )
      error_comando=0;
 }


Y la declaracion de estos datos la tengo puesta como:
Código: [Seleccionar]
int error_comando=1;
char comando_recibido_ideal[] = "OK";


char comando_recibido1;
char comando_recibido2;
char comando_recibido3;
char comando_recibido4;
char comando_recibido5;
char comando_recibido6;
char comando_recibido7;
char comando_recibido8;

Creo que es el tema de los punteros...

Gracias de antemano por toda la ayuda prestada

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Problema: aparecen caracteres raros PIC18f4550 [Hi-tech PICC-18]
« Respuesta #42 en: 11 de Enero de 2011, 12:05:53 »
Hola de nuevo, queria comentarte una cosa que se me paso antes. El salto de linia es /n o \n?

Lo de la función que lee mas de un caracter, tenia una en mi codigo:
Código: [Seleccionar]
unsigned char UsartReadChar_nonstop(void)
{
  if (!RCIF) // TRMT1 is set when TSR is empty
    return 0;   
  return RCREG;
}

Esa parte del if se va haciendo hasta que el bit RCIF es 1 y por tanto el registro TSR esta vacio ( no hay mas para transmitir? ? No entiendo bien ese return 0..
Entra en ese if si el buffer no esta vacio no?

Gracias de antemano.


 

anything