TODOPIC

Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: jeremylf en 21 de Septiembre de 2008, 17:58:49

Título: Float's iguales del CCS y C#
Publicado por: jeremylf en 21 de Septiembre de 2008, 17:58:49
Buenas.

Veran, tengo un problema. Y esq porejemplo para:

(En CCS 4.023)
float VarCCS= 1.4925;

Sus 4 bytes internos son: 127, 63, 10, 62.

Estos bytes yo los envio satisfactoriamente a la PC donde, con Visual C# 2008, tengo que tener una variable de igual valor a la del ccs (VarCCS).

La pregunta entonces seria: ¿Como puedo convertir, mediante estos 4 bytes, el valor que tengo en CCS para tenerlo tambien en C#?

Espero se entiendo lo que necesito y puedan ayudarme.
Un saludo.
Título: Re: Float's iguales del CCS y C#
Publicado por: jeremylf en 21 de Septiembre de 2008, 18:09:57
Haciendo unas pruebas...

VC#:
float VarVC = 1.4925F;

Los valores que obtengo al leerlo asi:
Código: [Seleccionar]
                                    MessageBox.Show((*(((byte*)&DistRecor_DistanciaRecorrida) )).ToString());
                                    MessageBox.Show((*(((byte*)&DistRecor_DistanciaRecorrida) + 1)).ToString());
                                    MessageBox.Show((*(((byte*)&DistRecor_DistanciaRecorrida) + 2)).ToString());
                                    MessageBox.Show((*(((byte*)&DistRecor_DistanciaRecorrida) + 3)).ToString());

Son:  61, 10, 191 y 63. Que son distintos a los del CCS... lo que me lleva a concluir que los formatos al guardar son diferentes (creo que el VC# usa IEEE y CCS el de microchip, no estoy muy enterado de esto).

Entonces habria alguna forma para que el 'float' del VC# se compatibilice con el del CCS o algo ?  :?


Gracias.
Título: Re: Float's iguales del CCS y C#
Publicado por: MLO__ en 21 de Septiembre de 2008, 19:43:03
Hola.

Y porque no enviar el string del float mejor? es decir enviar
Código: [Seleccionar]
{'1','.','4','9','2','5'} y luego usar la funcion atof().

Lo unico que debes hacer para relacionar un formato con el otro es tener en cuenta el orden de los bytes. El CCS tiene el siguiente orden:

Saludos
Título: Re: Float's iguales del CCS y C#
Publicado por: jeremylf en 21 de Septiembre de 2008, 21:47:24
Hola.

No envia con strings porq el valor puede ser cual sea, no solo 1.4925.

Por lo otro, creo haber leido que el ccs usa el formato de microchip que es diferente a un tal IEEE, que es el que usa el VC# y por esto no le encuentro relacion a los valores que obtengo en cada byte en los dos compiladores.

O quiza mi forma de dirigirme a ellos sea lo erroneo que hasta al mostrarlos cada uno por un mensaje me este mostrando mal.... sabrias como hacerlo por vc# ?

Gracias por tu respuesta.
Un saludo.
Título: Re: Float's iguales del CCS y C#
Publicado por: MLO__ en 22 de Septiembre de 2008, 11:02:53
Hola.

Cuando me refiero a enviarlo como string, puede ser cualquier valor tambien, hay que pasar el valor del float a string y listo (con la funcion sprintf() ) :mrgreen:.

El formato del float de la IEEE pude trabajarse como single o double, lo que cambia es el numero de bytes, creo que tu lo trabajas single no?

La relacion entre los formatos es la siguiente:

(http://img89.imageshack.us/img89/695/ieeepi1.png)

Hay que tener cuidado es en el bit del signo.

Saludos
Título: Re: Float's iguales del CCS y C#
Publicado por: jeremylf en 22 de Septiembre de 2008, 11:29:43
Entonces al guardarlo (porq lo guardo en una memoria que luego es bolcada a la PC), antes, lo convierto de mchip a IEE para que VC# lo pueda leer igual ??

Gracias por la ayuda.
Un saludo.
Título: Re: Float's iguales del CCS y C#
Publicado por: MLO__ en 22 de Septiembre de 2008, 12:29:55
Hola.

Si, la idea es que si vc# lee los float como IEEE y el valor del float que lees viene de un float tipo microchip, hay que dejarlo en un mismo formato, en este caso el del IEEE.

Lo "unico" que debes hacer es cambiar el bit del signo.

Mira este link: Conversor IEEE 754 (http://www.h-schmidt.net/FloatApplet/IEEE754.html)

Saludos
Título: Re: Float's iguales del CCS y C#
Publicado por: jeremylf en 22 de Septiembre de 2008, 13:25:42
Bueno, ahora lo tengo asi:

write_ext_eeprom_int32(Direcion, (f_PICtoIEEE(DatoFloat)));

Esta bien asi entonces?

Ahora, la forma que escribo cada byte del float desde el VC# esta bien?  :?ç


Gracias MLO_.
Un saludo.
Título: Re: Float's iguales del CCS y C#
Publicado por: MLO__ en 22 de Septiembre de 2008, 14:30:22
Hola.

A ver, primero aclaremos bien las cosas  :-).

Tu calculas algo en el PC y te da un float, el cual tiene un formato IEEE 754, ese valor tu lo quieres guardar en una memoria externa pero ahora en el formato de microchip cierto?

o:  calculas algo en el PIC y el resutado es un float, el cual lo quieres guardar en la memoria, pero en un formato IEEE 754 para despues pasar ese valor por medio del PIC al PC y hacer lo que tengas que hacer en el PC?

Saludos
Título: Re: Float's iguales del CCS y C#
Publicado por: jeremylf en 22 de Septiembre de 2008, 23:05:33
Hola MLO__.

Ya todo funciona. Lo que necesitaba era leer correctamente un valor float (de mchip) desde VC#. Ocea, yo guardaba en una memoria externa un valor float (4 bytes), luego los mandaba a la PC y queria leerlos tal y como eran en el CCS, pero tuve problemas con eso de que CCS usa el formate de mchip q es distinto al que usa VC# que es el IEEE 754.

Pero la salucion, gracias a ti, fue convertir mi valor float de mchip a IEEE ANTES de guardarlo en la memoria externa, cosa que luego al pasar los 4 bytes a la PC les asignara, a cada byte del float del VC#, este valor y automaticamente se conviertiera en lo mismo que guarde. Esto lo hice con la funcion de CCS f_PICtoIEEE.

Y para guardar cada byte use:
void write_ext_eeprom_ieee(int16 Address, int32 Data)
{
  /* Se instancia un buffer de igual tamaño del tipo da dato, no me debe importar el tamaño, el compilador lo resolvera en tiempo de compilacion */
  int8 Buffer[4]; 
  int8 Index;

  /* Copio el Dato al buffer */
  memcpy(Buffer, &Data, 4);

  /* Salvo en EEPROM */
  for (Index = 0; Index < 4; Index ++ )
  {
      write_ext_eeprom(Address ++, Buffer[Index]);
  }
}

Con ayuda de RICHI777 hace un tiempo, solo que modificada para el IEEE.

Bueno, hasta ahora todo va de lujo, cualquier problema lo comento  :mrgreen:

Gracias nuevamente hombre   :P
Un saludo.
Título: Re: Float's iguales del CCS y C#
Publicado por: MLO__ en 22 de Septiembre de 2008, 23:09:24
Me alegro que ya todo este full!!!!  :-/ :-/

Saludos
Título: Re: Float's iguales del CCS y C#
Publicado por: pajaro128 en 01 de Enero de 2009, 19:36:19
hola... perdon ,,por que en este foro  no va mi pregunta ...pero no sabia a donde hacerla.....estoy empezando con el CCS para pic ..uso el PCW
y en  mi primer programa ,me da un error  que dice asi =
   
                                               Error 18 "lavatic.txt.c"Line0(0,1):file can not be opened
                                               File: lavatic.txt.c
                                               1 error, 0 warnings

 por que no se puede abrir ??? el programa lo edite con el NOTEPAD y despues lo copie  a otros editores ..y siempre el mismo error ..tiene q ser un error muy sencillo ,,,pero como es nuevo el compilador para mi ,no lo encuentro ...desde muchas gracias ,,y disculpen las molestias .....
Título: Re: Float's iguales del CCS y C#
Publicado por: MLO__ en 02 de Enero de 2009, 17:39:33
Hola.

Es por la extension de archivo ... tienes 2!!! .txt y .c, para que lo abra correctamente debe ser .c unicamente. Cuando vayas a guardar el archivo desde el notepad, debes seleccionar en la parte de tipo de archivo: todos los archivos, y colocar en el nombre la extension.

saludos
Título: Re: Float's iguales del CCS y C#
Publicado por: pajaro128 en 03 de Enero de 2009, 20:12:46
Hola ... MLO  ...agracezco tu pronta respuesta   
                       uno de los errores solucionado ....pero el error18 sigue alli....
                 
                        Error 18 "lavatic.txt.c"Line0(26,1):file can not be opened
                               
     el  error 18 sigue estando y apunta a la linea ..26 ..     linea 26 =  #include <16f877a.h>
     yo pienso que no encuentra la libreria de dicho pic ....(mi humilde opinion,,,,jajaja)
                       
 fui a OPTIONS y hice los siguientes cambios   ...en target =pic16f877a......en INCLUDE FILES = inclui varios de los directorios  del                     compilador ........
las librerias de dicho pic no vienen con el compilador ????..
                                                                        desde ya muy agradecido .....                 

Título: Re: Float's iguales del CCS y C#
Publicado por: MLO__ en 07 de Enero de 2009, 18:10:40
Hola.

Estas en lo cierto ... no esta el archivo .h del pic.

Podrias postear algo de codigo para ayudarte un poco mas.

Saludos
Título: Re: Float's iguales del CCS y C#
Publicado por: pajaro128 en 08 de Enero de 2009, 02:02:28
hola MLO_ por suerte lo solucione .....ahora mi problema son las interrupciones en el puertob  (en CCS)...tengo 2 mensaje en los foros del C ..si podes echarle una mirada ...y decirme cual es tu opinion ?? ...desde ya muchas gracias ...salu2