Autor Tema: [Solucionado]Duda de entrada analógica y/o fórmula matemática  (Leído 1970 veces)

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

Desconectado gardelitock

  • PIC10
  • *
  • Mensajes: 6
Hola a todos!

Probando las entradas analógicas del PIC16f887 me salió una duda, que quizá es muy facil resolverla, pero..  ¡la verdad que no me puedo dar cuenta!

La programación es en C con el PIC C. La idea es simple, usar la entrada analógica y que se muestre en una pantalla lcd el valor de 8 bits leido y el voltaje calculado (que acá creo que esta el problema) con la formula.  voltaje= 5 * valor/2^8 = 5 * valor/256 ;
Lo que quiero es que el voltaje mostrado en pantalla sea como el de un voltimetro con 3 decimales. A voltaje lo definí como flotante, pero igual asi no me da ninguna decimal en el lcd.

Quiero saber donde esta error.Si es que definí mal las variables o lo que sea.
Add programa:

Código: [Seleccionar]
#include <16F887.h>


#FUSES NOWDT                  
#FUSES NOBROWNOUT              
#FUSES NOLVP                  
#fuses NOMCLR,INTRC
#use delay(internal=4MHz)


// CAMBIE LOS PINES QUE SIEMPRE USABA EN  EL PUERTO B
#define LCD_DB4   PIN_D4
#define LCD_DB5   PIN_D5
#define LCD_DB6   PIN_D6
#define LCD_DB7   PIN_D7
#define LCD_RS    PIN_D1
#define LCD_E     PIN_D0
#include <lcdazul.c>




void main()
{

long valor;
float voltaje;
setup_comparator(NC_NC_NC_NC);
setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc(ADC_CLOCK_DIV_32);

set_adc_channel(0);
delay_ms(20);
lcd_init();
lcd_putc("\f ");

   while(TRUE)
   {
      valor=read_adc();
      delay_ms(20);
      voltaje= 5 * valor/256 ;

      printf(lcd_putc,"\f Volt:%0.3f \n Valor:%Lu", voltaje,valor);
     output_b(0b00000000);
     if(voltaje>=0 && voltaje<1)
         {
         Output_High (PIN_B0);      
         }
      if(voltaje>=1 && voltaje<2)
         {
         Output_High (PIN_B1);
        
         }
      if(voltaje>=2 && voltaje<3)
         {
         Output_High (PIN_B2);  
         }
      if(voltaje>=3 && voltaje<=4)
         {
         Output_High (PIN_B3);
         }
       if(voltaje>4)
         {
         output_d(0b00001111);      
         }
      
   }

}

Tambien quería saber como puedo configurar el conversor ad a 10 bits, ya que programandolo como #device adc= valor  (8 o 10) me sale error.



Espero su ayuda, gracias!
« Última modificación: 06 de Enero de 2015, 12:18:17 por gardelitock »
Miedo tengo que esta vida un día, venga a cobrarse lo buena que fue!

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Duda de entrada analógica y/o fórmula matemática
« Respuesta #1 en: 04 de Enero de 2015, 12:16:02 »
Prueba
voltaje= 5.0 * valor/256.0 ;

o

voltaje=(float) (5.0 * (valor/256.0)) ;
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado gardelitock

  • PIC10
  • *
  • Mensajes: 6
Re: Duda de entrada analógica y/o fórmula matemática
« Respuesta #2 en: 05 de Enero de 2015, 11:48:16 »
Prueba
voltaje= 5.0 * valor/256.0 ;

o

voltaje=(float) (5.0 * (valor/256.0)) ;
Gracias por tu respuesta! Funciona. Surge un problema cuando la medicion pasa los 4.0 V la pantalla se descontrola y empieza a pasar simbolos raros, hasta que se llega al voltaje máximo y se estabiliza.
Miedo tengo que esta vida un día, venga a cobrarse lo buena que fue!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Duda de entrada analógica y/o fórmula matemática
« Respuesta #3 en: 05 de Enero de 2015, 12:35:42 »
Sino proba asi

voltaje=(float) ((5.0 * valor)/256.0) ;

Si dividiera por 256 primero a valor quedaria muy chiquito xD, Probar no cuesta nada. Y todo parece ser problema del printf

PD, tengo la cabeza tan podrida que cuando veo en la pagina principal te encontras con esto:

Citar
Último mensaje Hoy a las 11:48:16
en Re: Duda de entrada anal... por gardelitock

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Duda de entrada analógica y/o fórmula matemática
« Respuesta #4 en: 05 de Enero de 2015, 16:27:10 »
La sentencia para setear el ADC es:


Código: C
  1. #device ADC=10

Y si funciona con esa, que debe estar ubicada después del procesador, deberías dividir tu valor en 1024, ya que te devolverá un valor de conversión de 10 bits.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado gardelitock

  • PIC10
  • *
  • Mensajes: 6
Re: Duda de entrada analógica y/o fórmula matemática
« Respuesta #5 en: 06 de Enero de 2015, 12:19:50 »
La sentencia para setear el ADC es:


Código: C
  1. #device ADC=10

Y si funciona con esa, que debe estar ubicada después del procesador, deberías dividir tu valor en 1024, ya que te devolverá un valor de conversión de 10 bits.

Buenísimo, gracias! Siempre la ponía despues de los fuses, por eso el error.
Miedo tengo que esta vida un día, venga a cobrarse lo buena que fue!


 

anything