Autor Tema: Float's iguales del CCS y C#  (Leído 10323 veces)

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

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Float's iguales del CCS y C#
« 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.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Float's iguales del CCS y C#
« Respuesta #1 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.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Float's iguales del CCS y C#
« Respuesta #2 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:
  • BYTE 1: exponente con una desviacion de valor 0x7F, es decir, cuando el exponente es 0, el valor es 0x7F, con excepcion del cero que es 0x00
  • BYTE 2: Bit de signo + 7bits de la mantisa MSB
  • BYTE 3: 8bits de la mantisa
  • BYTE 4: 8bits de la mantisa LSB

Saludos
El papel lo aguanta todo

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Float's iguales del CCS y C#
« Respuesta #3 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.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Float's iguales del CCS y C#
« Respuesta #4 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:



Hay que tener cuidado es en el bit del signo.

Saludos
El papel lo aguanta todo

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Float's iguales del CCS y C#
« Respuesta #5 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.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Float's iguales del CCS y C#
« Respuesta #6 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

Saludos
El papel lo aguanta todo

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Float's iguales del CCS y C#
« Respuesta #7 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.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Float's iguales del CCS y C#
« Respuesta #8 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
El papel lo aguanta todo

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Float's iguales del CCS y C#
« Respuesta #9 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.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Float's iguales del CCS y C#
« Respuesta #10 en: 22 de Septiembre de 2008, 23:09:24 »
Me alegro que ya todo este full!!!!  :-/ :-/

Saludos
El papel lo aguanta todo

Desconectado pajaro128

  • PIC10
  • *
  • Mensajes: 11
Re: Float's iguales del CCS y C#
« Respuesta #11 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 .....

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Float's iguales del CCS y C#
« Respuesta #12 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
El papel lo aguanta todo

Desconectado pajaro128

  • PIC10
  • *
  • Mensajes: 11
Re: Float's iguales del CCS y C#
« Respuesta #13 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 .....                 


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Float's iguales del CCS y C#
« Respuesta #14 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
El papel lo aguanta todo


 

anything