Newsgrupos.com  

Retroceder   Newsgrupos.com > Forum > Newsgroup es.comp.lenguajes.* Foro > Newsgroup es.comp.lenguajes.c
Registrarse Preguntas Frecuentes Lista de Foreros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




Respuesta
 
LinkBack Herramientas Desplegado
  #1 (permalink)  
Antiguo 06-04-2007, 08:09:43
jgenicio@gmail.com
 
Mensajes: n/a
Predeterminado Sobre calculos.

Hola:

Estoy programando un microcontrolador atmel atmega32 y atraves del
"puerto" i2c tengo conectado un termometro DS1631 que me da la
temperatura en 2 palabrase de 8 bits. Lo que hago para pasar eso a
grados centigrados es:

unsigned char MSB;
unsigned char LSB;
float temp_c;

temp_c = (float)((MSB<<8 + LSB) - 65536) * 0.0625;

Es correcto, ya que no me da lectura ninguna. ¿?

S2.

Responder Con Cita
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Newsgrupos.com
Standard Sponsored Links

  #2 (permalink)  
Antiguo 06-04-2007, 10:35:04
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobre calculos.

Primero comprueba que en MSB y LSB tienes valores. Suponiendo que tengan
valores, ya que no se cómo ni cuando cambia los unsigned char a int, lo
haría yo explicitamente así:

temp_c = (float)((((unsigned int)MSB)<<8u + (unsigned int)LSB) - 65536u) *
0.0625;

O si tienes int de 16 bits, te podrías ahorrar el desplazamiento y la suma
con un union de un int con dos unsigned char.

<jgenicio***gmail.com> escribió en el mensaje
news:1175846983.935227.103210***o5g2000hsb.googlegro ups.com...
Hola:

Estoy programando un microcontrolador atmel atmega32 y atraves del
"puerto" i2c tengo conectado un termometro DS1631 que me da la
temperatura en 2 palabrase de 8 bits. Lo que hago para pasar eso a
grados centigrados es:

unsigned char MSB;
unsigned char LSB;
float temp_c;

temp_c = (float)((MSB<<8 + LSB) - 65536) * 0.0625;

Es correcto, ya que no me da lectura ninguna. ¿?

S2.


Responder Con Cita
  #3 (permalink)  
Antiguo 06-04-2007, 10:35:04
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobre calculos.

Primero comprueba que en MSB y LSB tienes valores. Suponiendo que tengan
valores, ya que no se cómo ni cuando cambia los unsigned char a int, lo
haría yo explicitamente así:

temp_c = (float)((((unsigned int)MSB)<<8u + (unsigned int)LSB) - 65536u) *
0.0625;

O si tienes int de 16 bits, te podrías ahorrar el desplazamiento y la suma
con un union de un int con dos unsigned char.

<jgenicio***gmail.com> escribió en el mensaje
news:1175846983.935227.103210***o5g2000hsb.googlegro ups.com...
Hola:

Estoy programando un microcontrolador atmel atmega32 y atraves del
"puerto" i2c tengo conectado un termometro DS1631 que me da la
temperatura en 2 palabrase de 8 bits. Lo que hago para pasar eso a
grados centigrados es:

unsigned char MSB;
unsigned char LSB;
float temp_c;

temp_c = (float)((MSB<<8 + LSB) - 65536) * 0.0625;

Es correcto, ya que no me da lectura ninguna. ¿?

S2.


Responder Con Cita
  #4 (permalink)  
Antiguo 06-04-2007, 10:35:04
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobre calculos.

Primero comprueba que en MSB y LSB tienes valores. Suponiendo que tengan
valores, ya que no se cómo ni cuando cambia los unsigned char a int, lo
haría yo explicitamente así:

temp_c = (float)((((unsigned int)MSB)<<8u + (unsigned int)LSB) - 65536u) *
0.0625;

O si tienes int de 16 bits, te podrías ahorrar el desplazamiento y la suma
con un union de un int con dos unsigned char.

<jgenicio***gmail.com> escribió en el mensaje
news:1175846983.935227.103210***o5g2000hsb.googlegro ups.com...
Hola:

Estoy programando un microcontrolador atmel atmega32 y atraves del
"puerto" i2c tengo conectado un termometro DS1631 que me da la
temperatura en 2 palabrase de 8 bits. Lo que hago para pasar eso a
grados centigrados es:

unsigned char MSB;
unsigned char LSB;
float temp_c;

temp_c = (float)((MSB<<8 + LSB) - 65536) * 0.0625;

Es correcto, ya que no me da lectura ninguna. ¿?

S2.


Responder Con Cita
  #5 (permalink)  
Antiguo 06-04-2007, 10:35:04
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobre calculos.

Primero comprueba que en MSB y LSB tienes valores. Suponiendo que tengan
valores, ya que no se cómo ni cuando cambia los unsigned char a int, lo
haría yo explicitamente así:

temp_c = (float)((((unsigned int)MSB)<<8u + (unsigned int)LSB) - 65536u) *
0.0625;

O si tienes int de 16 bits, te podrías ahorrar el desplazamiento y la suma
con un union de un int con dos unsigned char.

<jgenicio***gmail.com> escribió en el mensaje
news:1175846983.935227.103210***o5g2000hsb.googlegro ups.com...
Hola:

Estoy programando un microcontrolador atmel atmega32 y atraves del
"puerto" i2c tengo conectado un termometro DS1631 que me da la
temperatura en 2 palabrase de 8 bits. Lo que hago para pasar eso a
grados centigrados es:

unsigned char MSB;
unsigned char LSB;
float temp_c;

temp_c = (float)((MSB<<8 + LSB) - 65536) * 0.0625;

Es correcto, ya que no me da lectura ninguna. ¿?

S2.


Responder Con Cita
  #6 (permalink)  
Antiguo 06-04-2007, 10:35:04
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobre calculos.

Primero comprueba que en MSB y LSB tienes valores. Suponiendo que tengan
valores, ya que no se cómo ni cuando cambia los unsigned char a int, lo
haría yo explicitamente así:

temp_c = (float)((((unsigned int)MSB)<<8u + (unsigned int)LSB) - 65536u) *
0.0625;

O si tienes int de 16 bits, te podrías ahorrar el desplazamiento y la suma
con un union de un int con dos unsigned char.

<jgenicio***gmail.com> escribió en el mensaje
news:1175846983.935227.103210***o5g2000hsb.googlegro ups.com...
Hola:

Estoy programando un microcontrolador atmel atmega32 y atraves del
"puerto" i2c tengo conectado un termometro DS1631 que me da la
temperatura en 2 palabrase de 8 bits. Lo que hago para pasar eso a
grados centigrados es:

unsigned char MSB;
unsigned char LSB;
float temp_c;

temp_c = (float)((MSB<<8 + LSB) - 65536) * 0.0625;

Es correcto, ya que no me da lectura ninguna. ¿?

S2.


Responder Con Cita
  #7 (permalink)  
Antiguo 06-04-2007, 16:42:24
Pedro Maicas
 
Mensajes: n/a
Predeterminado Re: Sobre calculos.

On 6 Apr 2007 01:09:43 -0700, "jgenicio***gmail.com" <jgenicio***gmail.com> wrote:

>temp_c = (float)((MSB<<8 + LSB) - 65536) * 0.0625;
>
>Es correcto, ya que no me da lectura ninguna. ¿?


Eso es matar moscas a cañonazos, en un micro
sin unidad de coma flotante, sin apenas memoria
de programa ni ram, y sobre todo sin ninguna necesidad,
no deberías usar float, aunque el compilador lo soporte
seguro que te mete ahí un motón de código.

Por otro lado el msb<<8 es sopechoso de que te va a perder
su contenido, como al compilador le de por no convertirlo
a entero (y supuesto un entero de 16 bits, que habría que verlo,
igual el entero es de 8 bits en este caso). Aún con 16 bits,
la operacion -65536 no parece tener mucho sentido, puesto
que con dos bytes nunca vas a tener una lectura 65536,
¿ entonces el 'cero' cual seria ?

Y para colmo, multiplicar por 0.0625 es lo mimso que
dividir por 16, es decir lo mismo que hacer un desplazamiento
de cuatro bits, ... todo bastante absurdo.


Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Responder Con Cita
  #8 (permalink)  
Antiguo 06-04-2007, 16:42:24
Pedro Maicas
 
Mensajes: n/a
Predeterminado Re: Sobre calculos.

On 6 Apr 2007 01:09:43 -0700, "jgenicio***gmail.com" <jgenicio***gmail.com> wrote:

>temp_c = (float)((MSB<<8 + LSB) - 65536) * 0.0625;
>
>Es correcto, ya que no me da lectura ninguna. ¿?


Eso es matar moscas a cañonazos, en un micro
sin unidad de coma flotante, sin apenas memoria
de programa ni ram, y sobre todo sin ninguna necesidad,
no deberías usar float, aunque el compilador lo soporte
seguro que te mete ahí un motón de código.

Por otro lado el msb<<8 es sopechoso de que te va a perder
su contenido, como al compilador le de por no convertirlo
a entero (y supuesto un entero de 16 bits, que habría que verlo,
igual el entero es de 8 bits en este caso). Aún con 16 bits,
la operacion -65536 no parece tener mucho sentido, puesto
que con dos bytes nunca vas a tener una lectura 65536,
¿ entonces el 'cero' cual seria ?

Y para colmo, multiplicar por 0.0625 es lo mimso que
dividir por 16, es decir lo mismo que hacer un desplazamiento
de cuatro bits, ... todo bastante absurdo.


Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Responder Con Cita
  #9 (permalink)  
Antiguo 06-04-2007, 16:42:24
Pedro Maicas
 
Mensajes: n/a
Predeterminado Re: Sobre calculos.

On 6 Apr 2007 01:09:43 -0700, "jgenicio***gmail.com" <jgenicio***gmail.com> wrote:

>temp_c = (float)((MSB<<8 + LSB) - 65536) * 0.0625;
>
>Es correcto, ya que no me da lectura ninguna. ¿?


Eso es matar moscas a cañonazos, en un micro
sin unidad de coma flotante, sin apenas memoria
de programa ni ram, y sobre todo sin ninguna necesidad,
no deberías usar float, aunque el compilador lo soporte
seguro que te mete ahí un motón de código.

Por otro lado el msb<<8 es sopechoso de que te va a perder
su contenido, como al compilador le de por no convertirlo
a entero (y supuesto un entero de 16 bits, que habría que verlo,
igual el entero es de 8 bits en este caso). Aún con 16 bits,
la operacion -65536 no parece tener mucho sentido, puesto
que con dos bytes nunca vas a tener una lectura 65536,
¿ entonces el 'cero' cual seria ?

Y para colmo, multiplicar por 0.0625 es lo mimso que
dividir por 16, es decir lo mismo que hacer un desplazamiento
de cuatro bits, ... todo bastante absurdo.


Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Responder Con Cita
  #10 (permalink)  
Antiguo 06-04-2007, 16:42:24
Pedro Maicas
 
Mensajes: n/a
Predeterminado Re: Sobre calculos.

On 6 Apr 2007 01:09:43 -0700, "jgenicio***gmail.com" <jgenicio***gmail.com> wrote:

>temp_c = (float)((MSB<<8 + LSB) - 65536) * 0.0625;
>
>Es correcto, ya que no me da lectura ninguna. ¿?


Eso es matar moscas a cañonazos, en un micro
sin unidad de coma flotante, sin apenas memoria
de programa ni ram, y sobre todo sin ninguna necesidad,
no deberías usar float, aunque el compilador lo soporte
seguro que te mete ahí un motón de código.

Por otro lado el msb<<8 es sopechoso de que te va a perder
su contenido, como al compilador le de por no convertirlo
a entero (y supuesto un entero de 16 bits, que habría que verlo,
igual el entero es de 8 bits en este caso). Aún con 16 bits,
la operacion -65536 no parece tener mucho sentido, puesto
que con dos bytes nunca vas a tener una lectura 65536,
¿ entonces el 'cero' cual seria ?

Y para colmo, multiplicar por 0.0625 es lo mimso que
dividir por 16, es decir lo mismo que hacer un desplazamiento
de cuatro bits, ... todo bastante absurdo.


Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Responder Con Cita
 
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último mensaje
Calculos en informe Pancho Newsgroup microsoft.public.es.access 4 24-03-2008 16:13:55
Excel Calculos Carlos González Newsgroup microsoft.public.es.excel 1 11-01-2008 16:16:29
Cálculos en LaTeX Pelines Newsgroup es.comp.lenguajes.tex 48 27-03-2007 20:20:02
Hojas de Calculos y Graficos Carlos Newsgroup microsoft.public.es.frontpage 6 15-01-2007 01:43:38
calculos Mg Newsgroup es.tecnica.arquitectura 18 17-02-2005 08:21:11





Powered by: vBulletin, Versión 3.6.8
Derechos de Autor ©2000 - 2008, Jelsoft Enterprises Ltd.

LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc.