TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: PAOLA09 en 12 de Abril de 2007, 12:15:36
-
Hola
últimamente como que pregunto mucho :D. Necesito una ayudita quisiera saber como hacer para pasar una variable tipo word a float para poder operar con ellas adecuadamente.
La cosa es así: recibo un valor por el conversor análogo que es tipo word pero a la hora de hacer los cálculos con esta variable se debe hacer con valores que son de coma flotante y serán almacenados en una variable mas que es flotante, pero al hacer esto me da errores con respecto a las variables word.
Cualquier ayuda bien recibida sea, ya me he peleado mucho con el Proton últimamente :D.
Gracias
-
Hola pau el motivo de tu error de ve venir en otra parte de tu código ya que no tienes que convertir la variable tipo word en float te pongo un ejemplito te aseguro que funciona porque ahora mismo estoy trabajando con el.
Dim raw as word
Dim volts as float
Raw=adin 0
Volts= raw * 5/1024
Print at 1,1 dec volts
-
Hola
Gracias por tu ayuda, pero el problema esta en que al hacer la operación que tienes el proton convierte la variable word a float por lo que cualquier operación tipo bitwise sera un conflicto, en tu caso como solo operas no lo notas pero en lo que deseo hacer si. Lo note ya que al agregar la línea de operación con un float note el problema si la quito todo sigue bien. Esto es lo que hago:
Temp0 = (((Temp0 >> 1) * 100)- 25 ) + (((CPerD2 - C2) * 100) / CPerD2) esta es la operación bitwise
y esta la línea de conflicto muybaja = (temp0 - sen123mb1)/ (sen123mb2-sen123mb1).
muy baja es una variable tipo float y los valores sen123 son constantes ya definidas también flotantes pero al aplicar esto anula la primera línea diciendo que no puedo hacer shift con una variable tipo float.
Hice el intento de generar un variable tipo float a base de la word pero no me funciono. EScribi asi
Dim temp01 as temp0.float no se si esa conversión la otme mal.
-
Pues abra que mirar bien por donde van los tiros estoy teniendo los mismos problemas que tu. yo también estoy trabajando con el código para leer el ds1820 lo curioso es que si compilo únicamente la sección del código que lee el ds1820 todo funciona muy bien el problema es cuando incluyo esta parte en un programa mas grande me marca error en la misma Linea
Temp0 = (((Temp0 >> 1) * 100)- 25 ) + (((CPerD2 - C2) * 100) / CPerD2)
Error float tipe variables not supported in mult-part expressions
-
Hola Sandra
pues has tenido el mismo problema que yo :D. La cosa esta en que los float no admiten operación bitwise esto es operaciones que afecten bit a bit. Veo que andas haciendo el mismo código que yo.
La solución si no puedes con el enemigo unetele, asi que el shift es lo mismo que dividir por dos y el not en caso de que necesites tambien negativos es 255- lo que lees. asi lo he dejado yo y como veo estas haciendo lo mismo te quedara apenas preciso.
OWRITE DQ0, 1, [$CC, $44] ' Send Calculate Temperature command
REPEAT
DELAYMS 25 ' Wait until conversion is complete
OREAD DQ0, 4, [C0] ' Keep reading low pulses until
UNTIL C0 <> 0 ' the DS1820 is finished.
OWRITE DQ0, 1, [$CC, $BE] ' Send Read ScratchPad command
OREAD DQ0, 2,[Temp0L,Temp0H, C0, C0, C0, C0, C0, CPerD0]
if temp0l.0=1 then 'revisa si se tiene el valor adicional de 0.5 grados dado por s^-1
temp=0.5
else
temp = 0
endif
if temp0H = 0 then
' Calculate the temperature in degrees Centigrade
Temp0L = (temp0l/2)+ temp
temp0l = temp0l -0.25
temp = (CPerD0 - C0)
temp = temp/CPerD0
temp0l = temp0l + temp
PRINT AT 1,1, "+",DEC2 Temp0l , AT 1,8,"C"
else
temp0l = (255-temp0l)+1
' Calculate the temperature in degrees Centigrade
Temp0L = (temp0l/2) +temp
temp0l = temp0l -0.25
temp = (CPerD0 - C0)
temp = temp/CPerD0
temp0l = temp0l + temp
PRINT AT 1,1, "-",DEC2 Temp0l , AT 1,8,"C"
endif
lo hice separado porque el float exige que sea asi de ponerlo todo en una sola línea también tendrás error. ESpero te sirva y le sirva a los demás.
PD: esto fue para protón. Temp es una variable temporal adicional, para las operaciones intermedias.
-
Hola pau como decimos aquí en mi país mientras yo apenas voy por la leche tu ya bienes de regreso con el queso. 8)
Lo as resuelto muy bien te agradezco que lo compartas sobre todo te lo agrádese mi hígado :mrgreen: