Autor Tema: División C18  (Leído 1626 veces)

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

Desconectado sowilosol

  • PIC10
  • *
  • Mensajes: 7
División C18
« en: 26 de Julio de 2010, 09:28:49 »
Hola a todos, cómo puedo realizar la siguiente operación en el compilador C18:

unsigned char va,adc; // adc viene del convertidor analógico digital
va=(adc/255)*5;
PORTB=va;


solamente necesito el número de 8 bits que está a la izquierda del .

muchas gracias por su atención

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: División C18
« Respuesta #1 en: 26 de Julio de 2010, 11:44:51 »
Código: [Seleccionar]
va=((float)(adc/255.0)*5.0);


saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: División C18
« Respuesta #2 en: 26 de Julio de 2010, 13:04:03 »
generalmente no uso las librerias del A/D en C18, sino que lo hago directamente configurando bits de los registros de configuración, de todas formas estuve viendo la documentacion del C18 y las librerias y puedo hacerte estos comentarios.

lo que te dice Suky esta bien, es para que puedas manejar valores con decimales, porque al realizar la división adc/255 seguramente te dará un valor no entero. Lo mismo con la multiplicación. Para eso tendrás que definir a va tipo float.

Lo que no entiendo bien es si este ejemplo te está funcionando, porque si el conversor que tienes es de 10bits (ejemplo 18F2455), y utilizas la función ReadADC() para obtener el valor de adc, este valor lo tendrías truncado, ya que ReadADC() te retorna un valor de 16bits y adc la has definido de 8bits.

No se bien como hace la división el C18, pero la divisíon por 255 que haces podrías hacerla mas eficiente si usas una rotación o shift.
Entonces te quedaría así
Código: [Seleccionar]
va = (adc >> 8) * 5;
Tambien, si solo te interesa el valor alto puedes usar directamente el valor del registro ADRESH
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.


 

anything