Autor Tema: Error al comparar dos strings con strcmp  (Leído 42591 veces)

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

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #135 en: 20 de Enero de 2011, 13:10:53 »
Creo que si a veces funciona y a veces no es debido a los retardos. Me explico

putst ("AT");
putch ('\r');

//time_delay(999999999999);
LeerRespuesta (ComandoRecibido1);

Con ese retardo de ahi funciona, en cambio sin el no. Fijate tu! Un reetardo!

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #136 en: 20 de Enero de 2011, 13:53:56 »
Creo que si a veces funciona y a veces no es debido a los retardos. Me explico

putst ("AT");
putch ('\r');

//time_delay(999999999999);
LeerRespuesta (ComandoRecibido1);

Con ese retardo de ahi funciona, en cambio sin el no. Fijate tu! Un reetardo!

  ¿Será que sin el retardo no le da tiempo al módulo a recoger los datos?
  Es un poco raro. Porque si yo mando datos y me pongo a leer inmediatamente (me quedo esperando por el propio while que hay dentro de la función getch) y recién cuando el módulo reciba los datos y pueda responder lo va a hacer y entonces voy a terminar leyendo bien.
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: Error al comparar dos strings con strcmp
« Respuesta #137 en: 20 de Enero de 2011, 13:57:42 »
Sospecho que esta el echo activado y que recibo lo que envio.

He visto que recibia AT ( que es lo que envio, bueno, lo que envio es AT\n). He imaginado que estaba habilitado el echo y he visto en la guia dl modulo de comandos AT que el comando ATEn (n=0 para disable y n=1 para enable) estaba por default a 1. Estoy intentando cambiarlo y n funciona...
Ahora recibo caracteres raros en el buffer...
« Última modificación: 20 de Enero de 2011, 14:06:17 por edu1989 »

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #138 en: 20 de Enero de 2011, 14:12:40 »
Puedes ayudarme con esta funcion?
Código: [Seleccionar]
/*
void SacarCaracteres (char buffer_todos_caracteres) //Sacamos los caracteres recibidos en falso
{
int i=0;
char buffer_caracteres[7];


while(i<8){
if(buffer_todos_caracteres[i]=='O'){
buffer_caracteres[0]=buffer_todos_caracteres[i];
}
else if (buffer_todos_caracteres[i]=='K')
buffer_caracteres[1]=buffer_todos_caracteres[i];

else
buffer_caracteres[i]=buffer_todos_caracteres[i];

i++;


}

*/


Mientras yo pruebo bien lo otro. Muchas gracias amigo

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #139 en: 20 de Enero de 2011, 14:19:37 »
  No sé que quieres que intente hacer con dicha función.

  ¿El parámetro que le pasas es todo lo que lees con la función de lectura?
  Con definir la variable "buffer_caracteres[7]" como global y no dentro de la función ya bastaría.
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: Error al comparar dos strings con strcmp
« Respuesta #140 en: 20 de Enero de 2011, 14:27:17 »
Salen errores... "pointer required" en casi todas las partes del codigo y no devuelvo nada ( no se como hacerlo).

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #141 en: 20 de Enero de 2011, 14:32:44 »
Depende de lo que envio por el putst entra en el bucle infinito del while...(de la funcion getch)

Creo que seria bueno volver a cambiar la funcion de leer. La condicion de indice < 4 no me gusta mucho... alguna idea?
Código: [Seleccionar]
void LeerRespuesta(char *mensaje) // Recibimos \n \r O K \n \r por lo tanto 6 caracteres.
{
int indice=0;
int cont=0;

time_delay(99);
while(indice<4){
*mensaje=getch();
*mensaje++;
indice++;
}

}

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #142 en: 20 de Enero de 2011, 14:46:14 »
Te cuento las cosas que estoy haciendo.

Cuando tengo el echo activado, me devuelve el caracter leido ( pero solo si el char tiene 2 o menos caracteres, no se porque..)
Si tengo el echo desactivado, me devuelve unos caracteres raros en forma de quadrado...

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #143 en: 20 de Enero de 2011, 14:57:32 »
Estoy controlando el registro RCREG y pone 0x41 ( que coincide con la A) y 0x54 que coincide con la T. Porque recibo AT? ese es el problema..

Acabo de ejecutar y he visto que en el RCREG hay 0x0A y en el buffer no lo coge.. sale un caracter extraño. AHI SI QUE ESTA EL PROBLEMA! que puedo hacer?
Osea ahora mismo estoy viendo el caracter 0x0d y despues viene el 0x0a. Cuando coge estos dos para. No los guarda bien en el buffer.. no se si me explico cuando digo que los guarda como un quadrado..

dime algo si no lo entiendes. Ya sabes por donde puede ir el problema? tiene que haber otra forma de guardar los datos...

Y si lo hacemos por punteros? Comprobamos que tal direccion sea 0x0d etc..

RESUMEN DE LA SITUACION: estoy enviando ATE0 y ahora estoy viendo el registro RCREG. La primera vez veo que vale 0x0d ( el retorno de carro) pero cuando lo quiere meter en el buffer sale ese caracter raro. Lo mismo pasa en el segundo con 0x0a. Una vez hay esos dos caracteres salta al while y ya no sale.
Ayudame por favor.
« Última modificación: 20 de Enero de 2011, 15:12:50 por edu1989 »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #144 en: 20 de Enero de 2011, 15:38:19 »
Estoy controlando el registro RCREG y pone 0x41 ( que coincide con la A) y 0x54 que coincide con la T. Porque recibo AT? ese es el problema..

Acabo de ejecutar y he visto que en el RCREG hay 0x0A y en el buffer no lo coge.. sale un caracter extraño. AHI SI QUE ESTA EL PROBLEMA! que puedo hacer?
Osea ahora mismo estoy viendo el caracter 0x0d y despues viene el 0x0a. Cuando coge estos dos para. No los guarda bien en el buffer.. no se si me explico cuando digo que los guarda como un quadrado..

dime algo si no lo entiendes. Ya sabes por donde puede ir el problema? tiene que haber otra forma de guardar los datos...

Y si lo hacemos por punteros? Comprobamos que tal direccion sea 0x0d etc..

RESUMEN DE LA SITUACION: estoy enviando ATE0 y ahora estoy viendo el registro RCREG. La primera vez veo que vale 0x0d ( el retorno de carro) pero cuando lo quiere meter en el buffer sale ese caracter raro. Lo mismo pasa en el segundo con 0x0a. Una vez hay esos dos caracteres salta al while y ya no sale.
Ayudame por favor.

  El tema puede ser que vos veas esos caracteres "raros" porque estás viendo el dato en modo ASCII, miralo en modo decimal o hexa para asegurarte bien.
  Yo no puedo hacer mucho ya que no tengo el módulo como para ir probando cosas. Lo que acabo de hacer es armar en físico el circuito que usé en proteus simulando el módulo con los dos PIC16F628 y me funcionó de maravillas.  Primero envíe AT para que responda OK y luego ATS para que responda ERROR y funcionó bien ya que puse un led en U1 (que sería tu micro) y se prendió cuando la respuesta fue OK y se apagó cuando fue ERROR.

  Y la función que usé para lectura de la respuesta fue la misma que te plantee en su momento.
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: Error al comparar dos strings con strcmp
« Respuesta #145 en: 20 de Enero de 2011, 17:18:56 »
Ya he probado de verlo en hexa y se guarda bien. Lo que falla es que cuando ha cogido los dos caracteres entra en el bucle del whilee... No puede ser que esos caracteres hagan que el bit se ponga a 0 o algo?

Ya se que puedes hacer poco sin el modulo y de veras te agradezco mucho lo que estas haciendo.
Solo dime las pruebas que quieres que haga o lo que se te ocurra.

Muchas gracias

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #146 en: 20 de Enero de 2011, 19:03:58 »
Estoy viendo que hay que poner las veces exactas que tiene que hacer el getchar porque ahora he puesto 50 por ejemplo y entra en el getch y se queda alli...
Alguna idea amigo para probar?

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #147 en: 20 de Enero de 2011, 21:13:54 »
He estado mirando y se produce la interrupcion de RCIF( puesta a 1) cuando el bit ABDEN pasa de 0 a 1.
Angel dime tu las pruebas que haria porque a mi ya no me queda ninguna...

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #148 en: 20 de Enero de 2011, 21:31:23 »
Fijate:
Código: [Seleccionar]
ABDEN: Auto-Baud Detect Enable bit
Asynchronous mode:
1 = Enable baud rate measurement on the next character. Requires reception of a Sync field (55h);
cleared in hardware upon completion.
0 = Baud rate measurement disabled or completed

Puede que este relacionado con la velocidad no? no se eh ya casi digo por decir algo..

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #149 en: 20 de Enero de 2011, 22:15:47 »
Fijate:
Código: [Seleccionar]
ABDEN: Auto-Baud Detect Enable bit
Asynchronous mode:
1 = Enable baud rate measurement on the next character. Requires reception of a Sync field (55h);
cleared in hardware upon completion.
0 = Baud rate measurement disabled or completed

Puede que este relacionado con la velocidad no? no se eh ya casi digo por decir algo..

  Sí, estaba viendo justo eso. No contesté antes porque fui a cenar.
  No entiendo porque se pone por si solo en 1. En teoría después de un PowerOnReset está en 0, y cuando vos inicializas el UART en ningún momento lo hacés 1.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything