Autor Tema: Calcular un float en un PIC y en un PC  (Leído 3105 veces)

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

Desconectado jnavarro

  • PIC10
  • *
  • Mensajes: 33
Calcular un float en un PIC y en un PC
« en: 27 de Octubre de 2008, 14:58:36 »
Hola!

Estoy trabajando con el USB transmitiendo datos del pic al ordenador. En el pic hago unos calculos donde el resultado lo almaceno en un float. El caso es que necesto enviar ese float a un ordenador por USB.

Trabajando con el USB he de enviar los datos en arrays de bytes, por lo que tengo que descomponer el float en 4 bytes y enviarlos.

Lo hago de la siguiente forma:

Código: [Seleccionar]
   
union dato {
      char array[4];
      float valorcito;
   }convertor;

convertor.valorcito = 187.51;

printf(lcd_putc,"\f%f\n%x %x %x %x",convertor.valorcito,convertor.array[0],convertor.array[1],convertor.array[2],convertor.array[3]);

Antes de enviarlo lo muestgro en un display, obteniendo en el display:

187.51
86 3b 82 8f

Hasta aqui todo correcto.

En el ordenador estoy programando con Borland c++ una pequeña aplicacion, en la cual recibo los 4 bytes correctamente, pero el float no lo formaba bien aun haciendo lo mismo y me he dado cuenta de esta pequeña cosa. Si en el odenador hago lo mismo:

Código: [Seleccionar]
   
union dato {
      char array[4];
      float valorcito;
   }convertor;

convertor.valorcito = 187.51;

printf("\f%f\n%x %x %x %x",convertor.valorcito,convertor.array[0],convertor.array[1],convertor.array[2],convertor.array[3]);


Por consola obtengo lo siguiente:

187.51
8f 82 3b 43

La representacion es al reves, cosa logica si indagais un poco ya que en un ordenador se hace al reves. Pero lo curioso es que el ultimo numero no es igual, y eso varia mucho, ya que al pasarlo a float, cuando recibo el que me envia el PIC difiere mucho del que interpreta el ordenador, ¿Alguien sabe a que es debido?

Saludos, Juan
__El conocimiento humano pertenece al mundo__

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Calcular un float en un PIC y en un PC
« Respuesta #1 en: 27 de Octubre de 2008, 15:03:08 »
El formato float que usa CCS es el de microchip... que es distinto al que usa la computadora (que es el IEEE blabla xD). Tambien tuve problemas con eso.. y mi solucion fue convertir ese float de mchip a float IEEE con la libreria "ieeefloat.c" y luego enviarla y al convertirlo si sera igual que al que muestra el pic.

Un saludo.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Calcular un float en un PIC y en un PC
« Respuesta #2 en: 27 de Octubre de 2008, 15:08:16 »
Puede serivirt ESTOesto:

salu2