Autor Tema: Variables proton  (Leído 2892 veces)

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

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Variables proton
« 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

Desconectado sandra

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 374
Re: Variables proton
« Respuesta #1 en: 12 de Abril de 2007, 19:23:12 »
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

El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Variables proton
« Respuesta #2 en: 12 de Abril de 2007, 19:54:08 »
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.

« Última modificación: 12 de Abril de 2007, 20:10:15 por PAOLA09 »

Desconectado sandra

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 374
Re: Variables proton
« Respuesta #3 en: 15 de Abril de 2007, 18:26:01 »
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


El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
Re: Variables proton
« Respuesta #4 en: 16 de Abril de 2007, 11:30:42 »
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.

Código: [Seleccionar]
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.

Desconectado sandra

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 374
Re: Variables proton
« Respuesta #5 en: 16 de Abril de 2007, 15:49:15 »
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:
El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas


 

anything