Autor Tema: Enviar numeros largos por puerto serie  (Leído 5994 veces)

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

Desconectado rashii

  • PIC10
  • *
  • Mensajes: 39
Enviar numeros largos por puerto serie
« en: 13 de Febrero de 2008, 06:15:34 »
Hola, actualmente uso el css y tengo el siguiente problema. Tengo que enviar un numero de 4 bytes por el puerto serie, es decir 0045 por ejemplo con el formato siempre xxxx. Tengo 2 problemas a la hora de recibirlos en el receptor. Por un lado, al ser caracteres, tendría que convertirlos a número ¿Cómo haria esto? Y por otro, tendría que juntar esos números y tomarlos como uno solo de manera que si me llega el 0 el 0 el 4 y el 5 el resultado sea un numero con el 45...Gracias de antemano. Un saludo.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Enviar numeros largos por puerto serie
« Respuesta #1 en: 13 de Febrero de 2008, 06:49:25 »
Si recibes todos los números como una cadena, solo tienes que utilizar la función:

atoi

que convierte de ascii a decimal.

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 pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Enviar numeros largos por puerto serie
« Respuesta #2 en: 13 de Febrero de 2008, 08:32:37 »
Para juntarlos creo recordar que era con make

Un saludo

Desconectado juanelete

  • PIC12
  • **
  • Mensajes: 74
Re: Enviar numeros largos por puerto serie
« Respuesta #3 en: 13 de Febrero de 2008, 09:09:32 »
Hola

Puedes utilizar atoi(), atol(), o atoi32(), segun el tamaño del entero de 8, 16 o 32 bits.

Tendras que incluir la libreria stdlib.h

En C "normal", existen tambien las funcion inversa itoa(), pero no se si el compilador CCS la contempla...

Tambien puedes utilizar las caracteristicas de formateo de datos de printf()

Saludos a tod@s

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Enviar numeros largos por puerto serie
« Respuesta #4 en: 13 de Febrero de 2008, 12:34:59 »
Yo usuaria sprtinf de la sgte manera, pero nose si CSS lo soporta...
sprintf( StringOut, "%04u", Numero );
o presentacion en Hexa
sprintf( StringOut, "%04X", Numero );

Donde StringOut queda el numero formateado y convertido, ahora si el standart output corresponde al serie directamente usa printf con el mismo formato.
Salu2!

Desconectado rashii

  • PIC10
  • *
  • Mensajes: 39
Re: Enviar numeros largos por puerto serie
« Respuesta #5 en: 13 de Febrero de 2008, 20:13:35 »
Gracias a todos! Lo que no me ha quedado claro es como se juntarian..hablais de make pero como funciona? Un saludo

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Enviar numeros largos por puerto serie
« Respuesta #6 en: 13 de Febrero de 2008, 21:48:20 »
Como bien te ha dicho RICHI777 tienes que obtener una cadena en ascii del número a enviar. Para ello puedes usar directamente printf o pasarlo a una variable que guarde la cadena con sprintf.

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 rashii

  • PIC10
  • *
  • Mensajes: 39
Re: Enviar numeros largos por puerto serie
« Respuesta #7 en: 13 de Febrero de 2008, 22:36:12 »
la cadena ya la tengo y la transmito como 0051 por ejemplo...pero el problema es a la hora de recibirla que no se muy bien como juntar esos numeros, gracias, un saludo.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Enviar numeros largos por puerto serie
« Respuesta #8 en: 13 de Febrero de 2008, 23:54:06 »
Como recibis el numero, en binario o ascii ?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Enviar numeros largos por puerto serie
« Respuesta #9 en: 14 de Febrero de 2008, 04:14:41 »
Olvídate del make, precisamente hace todo lo contrario: a partir de por ejemplo un in16 lo separa en dos variables de 8 bits (parte alta y parte baja).

Para juntar se me ocurre lo siguiente: fusiona las 4 cadenas de los 4 caracteres recibidos en una sola y luego con la función atoi32() la pasas a entero.


CORRECCION:

- El make8 extrae bytes individuales de un int16 ó un int32

- El make16 une dos int8 para formar un int16

- El make32:

   - Une cuatro int8 para formar un int32

   - Une dos int16 para formar un int32

   - Une un int8 + un int16 para formar un int32 (añade además 00 a la izquierda)

   - etc
 
« Última modificación: 14 de Febrero de 2008, 15:51:23 por pocher »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Enviar numeros largos por puerto serie
« Respuesta #10 en: 14 de Febrero de 2008, 08:32:25 »
El make sí Pocher, pero el make16 obtiene un word a partir de dos bytes, y el make32 obtiene un long word a partir de 2 words.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Enviar numeros largos por puerto serie
« Respuesta #11 en: 14 de Febrero de 2008, 15:42:18 »
Cierto y mirándome el manual me he dado cuenta que el make32 también es capaz de unir 4 int8 para formar un int32 que es la solución que buscaba nuestro amigo.

Puedes probar las 2 soluciones que te he comentado, a ver que tal.

Un saludo

Desconectado rashii

  • PIC10
  • *
  • Mensajes: 39
Re: Enviar numeros largos por puerto serie
« Respuesta #12 en: 14 de Febrero de 2008, 16:58:41 »
Claro, exacto, ya lo tengo entonces, muchas gracias a todos que me sirvio de mucho..Un saludo amigos

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Re: Enviar numeros largos por puerto serie
« Respuesta #13 en: 15 de Febrero de 2008, 01:22:36 »
Hola Rashii.

Entiendo que quieres mandar un número desde el PIC por puerto serie hacia la PC o a otro PIC?  Si es hacia la en que lenguaje estas programando el receptor?

Saludos y espero poder ayudarte.

Ganbatte kudasai.

Desconectado rashii

  • PIC10
  • *
  • Mensajes: 39
Re: Enviar numeros largos por puerto serie
« Respuesta #14 en: 15 de Febrero de 2008, 15:53:19 »
Es de un pic hacia un pic. Os cuento lo que quiero hacer. Tengo 2 modulos zigbee cada uno gobernado por un microcontrolador. Lo que quiero hacer es mandar un numero compuesto por 4 bytes...por ejemplo el 1245 y recibirlo en el otro microcontrolador para procesarlo como un entero y trabajar con el. Pero como me habeis dicho usando atoi y pasandole los 4 bytes ya lo tendria solucionado...Gracias por la ayuda :)

Un saludo.