Duda en lengua del CCS

¡Hola!

Para inicializar el modem y ver que responde OK le envio el "AT\r" y él me debe de devolver "OK" indicando que todo está bien.

Pues bien, no se si es que mi problema está en el lenguaje C, porque esto no me funciona, a ver si me decís donde he metido la gamba....

void InicializaModem(void) {

int1 salir = 0; char respuesta[4]; char respOK[4];

memset (respuesta,'\0',sizeof (respuesta) ); strcpy (respOK,"OK");

// Envio comando AT y espero respuesta OK while (salir == 0) {

delay_ms (2000);

fprintf (COM1,"%S", "AT\r"); gets (respuesta);

if ( strcmp (respuesta, respOK) == 0) salir = 1; }

// Enciendo LED RA0 indicando que se ha inicializado correctamente output_low (pin_a0); }

Lo del pin, está bien,,, es que se activa con nivel bajo... ;)

Reply to
Carmelo J. Morales Muñoz
Loading thread data ...

Yo no se como funciona el CCS, pero esta parte tiene pinta de que nunca va a funcionar, aunque el modem responda bien.

Se supone que el fprintf esta bien, inmediatamente pasa a leer con gets, habría que saber como funciona gets en detalle en este compilador para PIC, pero suponiendo que lea caracter a caracter hasta recibir un avance de linea, seguramente lo que leerás será el eco del comando, es decir AT\r\r\n (no se si hay dos retornos o una solo, pero es algo así), luego vendría otra linea con el "OK\r\n" que de todas formas el strcmpo no te iba a reconocer, porque no es lo mismo que "OK"

para mi gusto, es mejor hacerse una rutina propia para leer lineas, con timeout, es decir una rutina que lee caracteres hasta detectar un asci 10, y tiene un timeout para el caso de que esperes una respuesta y no llegue.

De ese modo es posible enviar el AT, y luego leer varias lineas hasta recibir un OK o un timeout.

Y con el strcmp es igual, o usas strncmp o te haces tu propia rutina de comparacion.

Reply to
Nolo Pongo

Gracias!.... Veré a ver si soy capáz de sacar la rutina necesaria!

Reply to
Carmelo J. Morales Muñoz

Hola Carmelo,

Por si acaso aún hay tiempo, te recomiendo que en primer lugar verifiques que el modem está configurado para devolver los códigos de resultados, normalmente esto se hace con el comando: ATQ0 [ENTER] para activar y con ATQ1 [ENTER] para desactivar. En segundo lugar confirmar que las respuestas del módem son en modo texto, es decir "OK", "BUSY", "CONNECT", etc. esto se hace con el comando: ATV1 [ENTER].

De todos modos mi recomendación es que utilices las respuestas en modo numérico, (ATV0[ENTER]) ya que te resultará más facil utilizar cualquier modem. Ten en cuenta que al conectarse, lo normal es que se devuelva un mensaje con el modo de conexión del enlace, esto es, la velocidad, la compresión de datos, el modo de corrección de errores, etc.

La cadena de inicialización para el modem la deberias enviar siempre que accedas a él por primera vez en el programa, así te garantizas que se ajusta a los parámetros que te convienen, ya que los fabricantes tienden a configurar los modem "a su bola" y te pueden dar muuuuuchos quebraderos de cabeza (lo digo por propia experiencia).

Te sugiero las siguentes cadenas:

AT&FQV1 [ENTER] para respuestas en modo texto.

AT&FQV [ENTER] para respuestas en modo numérico.

Para conocer todos los valores de los parámetros más relevantes del perfil activo normalmente se emplea AT&V.

Conviene leerse el apartado del manual en el que te indique los comandos HAYES soportados y la configuración de fábrica.

Saludos

eulalio arroba arrakis punto es

para activar y con ATQ1 [ENTER] para desactivar "Carmelo J. Morales Muñoz" escribió en el mensaje news:6a9id.169872$ snipped-for-privacy@news-reader.eresmas.com...

no

Reply to
Yo Mismo

Hola!

Nunca es tarde.... muchas gracias por la información, me está costando hacerme con el control del modem, para empezar me he tenido que pasar a otro pic con ma memoria, un saludo1

Reply to
wanadoo

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.