Autor Tema: Problemas con la comunicación SERIE  (Leído 2398 veces)

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

Desconectado Ichigo

  • PIC10
  • *
  • Mensajes: 5
Problemas con la comunicación SERIE
« en: 12 de Diciembre de 2007, 09:26:58 »
Buenas a todos. Este es mi primer mensaje en este foro, así que espero ser lo suficientemente claro y cumplir con las normas.

Resulta que estoy trabajando en un proyecto (similar a muchos otros ya comentados por aquí) que consiste en conectar una placa que contiene un pic (funcionando) a través de una conexión serie a una segunda placa, esta con un modulo bluetooth EMISOR (también funcionando). El RECEPTOR de los datos podría ser cualquier otro dispositivo bluetooth, en mi caso utilizaré un teléfono móvil.

El objetivo es que el micro tome medidas de un sensor de temperatura analógico y las digitalice (lo hace de hecho).

Mi problema viene a partir de aquí pues una vez tengo el valor a enviar no sé como hacerlo, me explico:
Yo sé como enviar caracteres a través del puerto serie, y por ende, al aire a través del bluetooth ya que precisamente lo que me permite es abstraerme de la complejidad física y pensar que emisor y receptor están conectados a través de un cable.
El problema es que el dispositivo receptor "no entiende" lo que es un carácter en sí. Entonces lo que yo pretendo es introducir ese carácter (dentro de mi rutina en el pic) con una función del tipo "fprintf(fichero, "medida: %c", valor_medido)". También me valdría cualquier función similar (write, fwrite...). El PRIMER gran problema es que no conozco ninguna función de este tipo para usar en C con un pic.
También consideré que podría crear una estructura con los campos adecuados y rellenarlos manualmente para que el conjunto de los datos de dicha estructura fuera entendido como un fichero de texto. AQUÍ el problema es como construir dicha estructura. (pues enviarla no sería problema: uso punteros de tipo caracter y lo envío byte a byte, como si fuera una cadena).

Bueno, este es mi problema. Ante todo he de disculparme por tanto texto y tanta suposión, pero la verdad es que estoy bastante ilusionado con el proyecto y parece que este es el único escollo para que funcione.
Una vez realizada, publicaré el código y la memoria del proyecto para futuras consultas.
Gracias a todos.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Problemas con la comunicación SERIE
« Respuesta #1 en: 12 de Diciembre de 2007, 09:31:56 »
Ichigo, el printf y el sprintf son comandos válidos en C para PIC. La mayoría de los ejemplos del foro están en CCS por lo que te recomiendo te hagas con ese compilador.

Desconectado Ichigo

  • PIC10
  • *
  • Mensajes: 5
Re: Problemas con la comunicación SERIE
« Respuesta #2 en: 12 de Diciembre de 2007, 20:57:58 »
Perdona mi ignorancia, pero ¿qué es CCS?, he echado un vistazo antes de responderte y lo que he visto es idéntico a C. Por cierto, por si sirve de algo, yo uso el entorno Mplab y el compilador Hitech. Lo ideal para mí sería poder escribir (y ejecutar) un código en el pic equivalente a este (que sería C estándar):

FILE *fichero;
fopen(fichero, "a");
int valor = ...;  //Este valor supóngase dado

fprintf(fichero, "Medicion: %d\n", valor);  //fprint es distinto de sprintf, porque el segundo es para crear cadenas con
                                                                      //con formato PERO en la memoria interna
fclose(fichero);

serial_sent(fichero);  //Yo esta función la tengo implementada para enviar caracteres (o bytes), y por ende, flujo de
                                        //bytes, con lo que podría hacer el apaño con un bucle.

Te agradezco tu colaboración.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Problemas con la comunicación SERIE
« Respuesta #3 en: 12 de Diciembre de 2007, 21:02:36 »
Hitech es un compilador de C, CCS es otro..

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Problemas con la comunicación SERIE
« Respuesta #4 en: 13 de Diciembre de 2007, 06:03:39 »
Pues no conozco Hitech, pero eso que tú dices en CCS sale así:

// esto al principio del programa
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

// y esto cuando lo necesites
printf ("Medicion: %d\n",valor);

Desconectado Ichigo

  • PIC10
  • *
  • Mensajes: 5
Re: Problemas con la comunicación SERIE
« Respuesta #5 en: 13 de Diciembre de 2007, 12:44:07 »
Sí, la función printf de CCS automáticamente envía la cadena formateada al puerto serie. El problema es que el dispositivo receptor (movil o pda), no entiende esa cadena a no ser que fuera muy avanzado y tuviera algún programa tipo hyperterminal (no es el caso). La función fprintf de C estándar te crea un archivo, esto es un conjunto de datos formado por un cabecera (numero magico, tamaño de archivo, nombre, etc) más los datos en sí (conjunto de bytes que se interpretan como el texto que tu hayas escrito). Es ese archivo que te explico el que yo quiero crear, pues es el que mi dispositivo receptor podrá entender.

De todas formas, pensando en tu respuesta, ¿crees que se podría hacer para que el dispositivo (mi teléfono móvil, que si te sirve de algo te puedo decir la marca y modelo) entienda directamente la cadena que es enviada con el printf que tú me dices?

Gracias por tu paciencia.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Problemas con la comunicación SERIE
« Respuesta #6 en: 13 de Diciembre de 2007, 12:57:41 »
Ese printf que te pongo envía por el puerto serie exactamente los bytes que tú quieras enviar. Una forma de sacar valores en bytes que no tengan correspondencia legible en ascii puede ser la siguiente:

printf ("%c%c%c", 5, 9, 13);

Eso sacaría tres bytes con valores 5, 9 y 13.

Desconectado Ichigo

  • PIC10
  • *
  • Mensajes: 5
Re: Problemas con la comunicación SERIE
« Respuesta #7 en: 15 de Diciembre de 2007, 07:49:20 »
Hola, con respecto a tu respuesta quisiera aclararte algunas cosas.

Yo entiendo la comodidad de esa función printf, pero he de decirte que no me aporta nada ya que yo también tengo una función similar con mis librerías.
Si yo envío una cadena "hola_mundo" con printf, a través del puerto serie se enviarán 1 byte por cada caracter, o sea, 10 bytes (o como mucho 12 si se envía el retorno de carro y una palabra de control, eso depende de la función).
Sin embargo cuando tú haces:

FILE *fichero;
fichero = fopen("salida.txt", "a");
fprintf(fichero, "hola_mundo");
fclose(fichero);

Se te crea una estructura que ocupa bastante más de 10-12 bytes, ya que antes de los datos en sí; contiene metadatos como son: número mágico (entero largo), nombre del fichero (256 bytes), tamaño del archivo (entero largo) y otros que no recuerdo.
Lo bueno de ese conjunto de datos, es que conforma una estructura estándar, conocida por muchas aplicaciones (incluida la mayoría de los teléfonos móviles).

Es como cuando tu cojes un ordenador con un adaptador Bluetooth USB y un móvil, tu siempre envías archivos (fotos, agenda de datos, música, etc), la comunicación ha de entenderse por el sistema operativo como si lo que hubiera conectado al puerto fuera un cable que llega directamente al receptor (y así funciona de hecho).

Entonces, las dos únicas vías de solucionar este embrollo son:
1- Conseguir de alguna forma que el movil funcione como un hyperterminal.
2- Meter la cadena "hola mundo" en un fichero txt y enviar por el puerto serie todo el conjunto de datos que supone dicho fichero.

Con respecto al primer apartado, yo lo investigaré pues si mi móvil no puede cumplir dicho requisito, seguro que encuentro alguno que sí pueda.

En definitiva espero haber sido claro.

Muchas gracias por todo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Problemas con la comunicación SERIE
« Respuesta #8 en: 15 de Diciembre de 2007, 15:33:36 »
Creo que la clave está en conocer exactamente el formato del fichero que has indicado. Yo no lo conozco, es más, me ha sorprendido que un fichero de texto tenga estructura compleja. A ver si algún otro forista sabe ayudarnos.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Problemas con la comunicación SERIE
« Respuesta #9 en: 15 de Diciembre de 2007, 15:57:06 »
Se refiere a la estructura de ficheros de ms-dos. Eso solo es valido para compiladores de "C" bajo ms-dos o windows. Sin embargo en CCS algunas cosas cambian ya que genera código para un PIC y no un sistema operativo. Recordar que los compiladores bajo DOS o WINDOWS realizan llamadas al mismo a bajo nivel (interrupciones, apis, etc).

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Ichigo

  • PIC10
  • *
  • Mensajes: 5
Re: Problemas con la comunicación SERIE
« Respuesta #10 en: 15 de Diciembre de 2007, 21:02:53 »
Tienes razón en cuanto a lo que dices del formato, lo he investigado un poco y es distinto en cada sistema operativo.

He visto un proyecto muy similar al que yo pretendo hacer en un post de un foro de hace unos años, voy a ver si logro contactar con el autor y os mantengo informado.

Gracias por todo.