Autor Tema: Envio variables desde el PIC al PC vía rs232  (Leído 20632 veces)

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

Desconectado ORE

  • PIC10
  • *
  • Mensajes: 43
Envio variables desde el PIC al PC vía rs232
« en: 26 de Junio de 2006, 17:44:47 »
Hola muy buenas,

Ya he comprendido como enviar mensajes desde el PIC al PC vía RS232, con el compilador CCS y un PIC16F877, haciendo uso del MAX232. ¿Pero como envio variables (int, float, etc.) que van variando?

El manual del compilador habla de la instrucción PRINTF([function], string, [values]), pero no se hacer uso de ella para enviar dichas variables.

Un saludo,


Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Envio variables desde el PIC al PC vía rs232
« Respuesta #1 en: 26 de Junio de 2006, 18:33:29 »
El truco esta en convertir la variable numérica a texto, por ejemplo el número 56,43 que esta en la variable nNum la convertimos a texto con: fprint("%05.2f\r\n",nNum); esto envia al puerto rs232 una cadena de caracteres que será "56.43" termianada en un retorno de carro "\r" y un salto de linea "\n" para indicar el final de la cadena. El formato de conversión es: %05.2f" representa un número en coma flotante "f" con 5 caracteres "05" rellenado con ceros y dos dígitos decimales "05.2", repasate la funcion fprint donde aparecen todos los formatos de conversión.

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 RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Envio variables desde el PIC al PC vía rs232
« Respuesta #2 en: 28 de Junio de 2006, 07:11:55 »
Hay que ver ... Redpic te va dar fuerte jejeje, haber para que escribe sus articulos:

http://picmania.garcia-cuervo.com/PICC.htm#RDA1

http://picmania.garcia-cuervo.com/PICC.htm#COMBUF232
Si juegas contra el mejor, pierdes como los demás.

Desconectado ORE

  • PIC10
  • *
  • Mensajes: 43
Re: Envio variables desde el PIC al PC vía rs232
« Respuesta #3 en: 29 de Junio de 2006, 16:56:22 »
Hola,

Gracias a ambos, pero la instrucción fprint, me da un error de compilación, ¿no es printf?

Un saludo,


Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Envio variables desde el PIC al PC vía rs232
« Respuesta #4 en: 29 de Junio de 2006, 17:45:06 »
Ja, ja, ja  :D  :D  :D

Dani: como sigas haciendome esa publicidad se van a creer que yo sé algo de la RS232 y los PIC's ...

ORE:

Hay tres funciones parecidas en cuyo nombre aparece el printf, y que son la printf propiamente dicha, fprintf y sprintf.

La mas usual es printf("Hola mundo"); que escribe un string en el puerto serie del PIC. A esta misma funcion se le pueden "empotrar" el contenido de una o varias variables dentro del string a enviar. Para ello disponemos de la posibilidad de colocarle dentro unos carácteres especiales que van a indicar que allí deseamos mostrar el contenido de cierta variable.

Por ejemplo si deseamos mostrar este mismo texto de "Hola mundo" pero desde una variable y no desde dentro del printf podemos hacerlo así:

char mistring[]="Hola mundo";
printf("Mi frase favorita es %s",mistring);


Esto dará como resultado que se envíe por el puerto serie la cadena "Mi frase favorita es Hola mundo".

Para cada tipo de variable, entera, flotante, con o sin signo, etc. tenemos su propia forma de indicarle la representación en printf anteponiéndole el consabido %:

C Character
S String or character
U Unsigned int
x Hex int (lower case output)
X Hex int (upper case output)
D Signed int
e Float in exp format
f Float
Lx Hex long int (lower case)
LX Hex long int (upper case)
Iu unsigned decimal long
Id signed decimal long
% Just a %

printf asume que la salida del string es la STDOUT o sea el puerto serie.

Pero fprintf es igual salvo que podemos indicarle cuál va a ser la salida donde deseamos que nos vuelque el resultado. Al declarar #use_rs232 podemos indicarle un "canal" o nombre de esa salida serie, fprintf puede decirle qué canal en concreto es el que vamos a utilizar.

#use rs232(baud=9600, xmit=PIN_B1,rcv=PIN_B2, stream=CANAL1)
#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3, stream=CANAL2)
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7, stream=CANAL3)

fprintf(CANAL2,"Hola mundo");


enviaría nuestro texto al canal CANAL2 definido en la segunda de nuestras declaraciones.

Y por último:

Vemos que con el uso de los "%" podemos "representar las mismas variables de distinta forma.

char mivar='K';    

es una variable de tipo char de un solo byte cuyo contenido lo hemos inicializado con el caracter ASCII K, si ahora jugamos con él dentro de printf podemos obtener resultados muy curiosos:

printf("%c %U %H %h",mivar,mivar,mivar,mivar);

enviará al puerto serie el string "K 75 4B 4b"

Como podeís ver printf muestra distintas representaciones de un mismo contenido "formateado".

Esto nos lleva a la última de las funciones que es sprintf.

sprintf es identica a printf salvo que el resultado en vez de lanzarlo por el puerto serie lo guarda en una variable de tipo string que le indiquemos.

char miascii = 'K';
char mistring[3];
mistring = sprintf("%H",miascii);


¿Cuanto vale mistring? Pues "4B\0" (Un asccii '4', un ascii 'B' y un ascii 0) o sea que hemos hecho una conversión de ASCII a integer y de éste a un string hexadecimal de un solo salto.  :mrgreen:  :mrgreen:  :mrgreen:

(Como siempre. Me ha salido otra novela  :D  :D  :D)

Un saludo per tutti.

Edito: Este post me lo copio y lo pongo en Mis Funciones favoritas en CCS C

« Última modificación: 29 de Junio de 2006, 17:54:15 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Envio variables desde el PIC al PC vía rs232
« Respuesta #5 en: 29 de Junio de 2006, 20:20:24 »
Joer, si es que te ha salido todo un tutorial cojonudo.

Saludos.
* 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 ORE

  • PIC10
  • *
  • Mensajes: 43
Re: Envio variables desde el PIC al PC vía rs232
« Respuesta #6 en: 30 de Junio de 2006, 16:39:29 »
Hola Red PIC,

Tomaré muy buena nota de este post.

Sois unos fenómenos del arte del microcontrolador y ccs.

Un saludo,

fixxxyto

  • Visitante
Re: Envio variables desde el PIC al PC vía rs232
« Respuesta #7 en: 12 de Julio de 2006, 21:47:08 »
Como puedo hacer si quiero enviar un numero de 8 bits desde Visual basic al PIC? si quiero enviar 255 me envia el 2 luego 5 y 5. del PIC a Visual Basic es mas simple ya que voy concatenando. Igual si tienes sugerencias para ambos casos, bienvenida sea.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Envio variables desde el PIC al PC vía rs232
« Respuesta #8 en: 13 de Julio de 2006, 16:18:19 »
Tal vez esta pregunta deberias hacerla en el foro de VB.

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 JavisusII

  • PIC12
  • **
  • Mensajes: 79
Re: Envio variables desde el PIC al PC vía rs232
« Respuesta #9 en: 13 de Julio de 2006, 18:20:15 »
Buenas Fixxxyto,

es muy simple:

la información se establece bajo el formato ASCII
tenemos...

1-Enviar 255 al pic
com1.Output=chr$(255) 
Esta forma de envío es típica para formalizar la trama de error (norm. +XOR)

2-El pic envía 100 al pc (de golpe)
TXREG1=.100 

 el pc recibe en una variable string (varstring)

varstring=com1.Input  ------> varstring=d
varstring=asc(com1.input) --> varstring=100


saludos


Xavi (Barcelona)