Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

31/10/2009 #1


Concatenar valor de SPI
No se si esa es la palabra, pero acá va mi descripción del problema:

Me llega información por un el protocolo SPI (serial peripheral interfase), este protocolo envia información de 8 bit cada vez, para obtener los 24 bit tengo que leer tres veces la información que llega.

La duda y por lo cual no he podido avanzar es la siguiente. ¿Cómo convertir esa información a un numero decimal?

Por ejemplo. el SPI me envia primero un valor 0x8A despues 0xFF y finalmente un 0xFE.

Lo que necesito es convertir esa información a 0x8AFFFE todo en una variable y posteriormente convertir ese valor a decimal.

Trabajo con un PIC 18F4520 y el compilador CCS, he probado rutinas de mover a la izquierda, pero no logro el resultado que quiero, además esa información necesito enviarla por un puerto serial hacia el PC utilizando RS232 o a otro micro usando un módulo XBEE.

Alguna idea de como hacer esa rutina.

Saludos y de antemano gracias.
31/10/2009 #2
Moderador

Avatar de Chico3001

Respuesta: Concatenar valor de SPI
Me imagino que debe haber un comando en C para manejar las concatenaciones... pero no recuerdo cual es...

De todos modos la otra manera es ir haciendo rotaciones a la izquierda y ANDs logicas hasta completar los 4 bytes
01/11/2009 #3


Respuesta: Concatenar valor de SPI
resultado = dato0*65536 + dato1*256 + dato2

un ejemplo.. en hexadecimal

resultado = 0x8A*0x010000 + 0xFF*0x000100 + 0xFE

resultado = 0x8A0000 + 0x00FF00 + 0x0000FE

resultado = 0x8AFFFE

en decimal...

resultado = (0x8A * 65536) + (0xFF * 256) + 0xFE

la comprobacion...

resultado = (138 * 65,536) + (255 * 256) + 254

resultado = (9,043,968) + (65,280) + (254)

resultado = 9,109,502

resultado en hex... 0x8AFFFE

facilmente implementable en lenguaje C, sale en una instruccion... espero te sirva.

El chiste solo es multiplicar el dato por su valor posicional.

tenemos otra opcion con sprintf.....

sprintf(buffer,"%02X%02X%02X,dato0,dato1,dato2);

luego en buffer tendras ... 8AFFFE.... el cual tendrias que convertir a entero...

con atoi por ejemplo... si es que existe esa funcion en tu compilador..

a mi me gusta mas la primera opción...
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.