Autor Tema: Voltimetro  (Leído 288 veces)

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

Desconectado xabc2007

  • PIC12
  • **
  • Mensajes: 62
Voltimetro
« en: 14 de Septiembre de 2020, 13:28:48 »

Hola a todo el foro, estoy haciendo un voltimetro y me visualiza el valor del ADC pero no el voltaje, sale 0 voltios, y no se que puede ser.

Este es el programa.


//                                      VOLTIMETRO                           //
//
//               

//
//
//          ////////////////////////////////////////////////////////////////////



#include <16F876a.h>
#device adc =10
#use delay (clock=4000000)
#fuses XT, NOWDT


#define use_portb_lcd TRUE
#include <lcd.c>
 

#include <math.h>


/////////////////////////////////////////////////////////////////
//                   DECLARAMOS LAS VARIABLES
/////////////////////////////////////////////////////////////////



   float v;          // variable para calcular el voltage del ADC
   int16 q;//
   

void main()

 {


  setup_adc_ports(RA0_RA1_RA3_ANALOG); //RA0 y RA1 analógica
  setup_adc(ADC_CLOCK_INTERNAL);    //Fuente de reloj RC
 
   
  lcd_init();
 
   
while (1) //bucle infinito
{
   
   
   set_adc_channel(0);          //Habilitación canal0
      delay_us(20);              //Retardo
      q = read_adc();    //Lectura canal0
     
 
                           
   v=5.0*q/1024.0; // leemos el voltage del ADC.

      printf(lcd_putc, "\fADC: %4ld", q);
      printf(lcd_putc, "\nV: %01.2f V", v);
     
      delay_ms(1000);
   
   
     
      }
}

 

Agradezco toda la ayuda. Gracias


Desconectado remi04

  • PIC18
  • ****
  • Mensajes: 450
Re:Voltimetro
« Respuesta #1 en: 14 de Septiembre de 2020, 14:51:11 »
Prueba con un cast:

Código: C
  1. v=(5.0*(float)q)/1024.0; // leemos el voltage del ADC.
  2.  


Desconectado xabc2007

  • PIC12
  • **
  • Mensajes: 62
Re:Voltimetro
« Respuesta #2 en: 14 de Septiembre de 2020, 14:54:35 »
Probamos.

Gracias.

Desconectado xabc2007

  • PIC12
  • **
  • Mensajes: 62
Re:Voltimetro
« Respuesta #3 en: 14 de Septiembre de 2020, 15:07:48 »
Lo he probado.

Compila pero da el mismo resultado. El voltaje da 0

Desconectado remi04

  • PIC18
  • ****
  • Mensajes: 450
Re:Voltimetro
« Respuesta #4 en: 14 de Septiembre de 2020, 17:26:21 »
Mañana lo pruebo y te digo algo.

 ¿Lo estas probando en la vida real o en un simulador?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7863
Re:Voltimetro
« Respuesta #5 en: 14 de Septiembre de 2020, 19:09:55 »
De paso te pregunto...

¿Cuanto lee el ADC?

Desconectado xabc2007

  • PIC12
  • **
  • Mensajes: 62
Re:Voltimetro
« Respuesta #6 en: 15 de Septiembre de 2020, 01:34:05 »
Lo estoy probando en el proteus y en placa en real.

El ADC da 512.

Desconectado xabc2007

  • PIC12
  • **
  • Mensajes: 62
Re:Voltimetro
« Respuesta #7 en: 16 de Septiembre de 2020, 11:34:31 »
Adjunto el código modificado.

¿Alguien podría probarlo y ver si el ADC y el valor del voltaje se corresponden? A mi el ADC va bien pero el voltaje da 0.

Muchas gracias.



//                                      VOLTIMETRO                           //
//
//               

//
//
//          ////////////////////////////////////////////////////////////////////



#include <16F876a.h>
#device adc =10
#use delay (clock=4000000)
#fuses XT, NOWDT


#define use_portb_lcd TRUE
#include <lcd.c>
 

#include <math.h>


/////////////////////////////////////////////////////////////////
//                   DECLARAMOS LAS VARIABLES
/////////////////////////////////////////////////////////////////



   float v;          // variable para calcular el voltage del ADC
   int16 q;//
   

void main()

 {


  setup_adc_ports(RA0_RA1_RA3_ANALOG); //RA0 y RA1 analógica
  setup_adc(ADC_CLOCK_INTERNAL);    //Fuente de reloj RC
 
   
  lcd_init();
 
   
while (1) //bucle infinito
{
   
   
   set_adc_channel(0);          //Habilitación canal0
      delay_us(20);              //Retardo
      q = read_adc();    //Lectura canal0
     

v=(5.0*(float)q)/1024.0; // leemos el voltage del ADC.


      printf(lcd_putc, "\fADC: %4ld", q);
      printf(lcd_putc, "\nV: %01.2f V", v);
     
      delay_ms(1000);
   
   
     
      }
}

 


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7863
Re:Voltimetro
« Respuesta #8 en: 16 de Septiembre de 2020, 12:13:31 »
No tengo CCS como para probarlo, y mucho menos algun simulador.

Te diria que pruebes lo siguiente para determinar donde esta el error.

En ves de guardarlo en un float, guardalo en un entero, los valores que vas a tener van de 0 al 5.

Asi sin tocar la parte de la formula, y cambiando la muestra:

Código: C
  1. int8 v;
  2. v=(5.0*(float)q)/1024.0; // leemos el voltage del ADC.
  3.  
  4.  
  5.       printf(lcd_putc, "\fADC: %4ld", q);
  6.       printf(lcd_putc, "\nV: %u V", v);


Si esta bien la formula de arriba te va a dar entre 0 y 4, correctamente con 512, te deberia dar 2.
Si lo muestra correctamente al 2, entonces iria pensando que es tema del printf. Y si es tema del prinf, espero que sea el formato que le diste, sino usa %f, y proba.

Si no es asi entonces sera la formula. algun problema de casteo de que los trnasforma a enteros etc.. Si es la formula podes probar con otros:

Código: C
  1. v=((float)(5.0*q))/1024.0;
  2. v=(float)(5.0*q)/1024.0;
  3. v=(float)q*0.004882812;
  4. v=(float)(q*0.004882812);

Desconectado xabc2007

  • PIC12
  • **
  • Mensajes: 62
Re:Voltimetro
« Respuesta #9 en: 16 de Septiembre de 2020, 12:37:36 »
Yo también pienso que es del print, hay muchos ejemplos en internet que funcionan. No se porque a mi no.

Lo pruebo

Desconectado Eduardo2

  • PIC18
  • ****
  • Mensajes: 375
Re:Voltimetro
« Respuesta #10 en: 16 de Septiembre de 2020, 14:18:06 »
..

¿Alguien podría probarlo y ver si el ADC y el valor del voltaje se corresponden? A mi el ADC va bien pero el voltaje da 0.

...

Te faltó adjuntar el archivo en Proteus.

Desconectado Eduardo2

  • PIC18
  • ****
  • Mensajes: 375
Re:Voltimetro
« Respuesta #11 en: 16 de Septiembre de 2020, 14:36:56 »
Por otro lado, eso funciona bien; no es necesario el cast (float).

 

* Test_float.jpg
(24.85 kB, 480x326 - visto 36 veces)


El error está en la implementación en Proteus.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7863
Re:Voltimetro
« Respuesta #12 en: 16 de Septiembre de 2020, 15:47:53 »
El error está en la implementación en Proteus.

Pero segun el:

Lo estoy probando en el proteus y en placa en real.

Desconectado Eduardo2

  • PIC18
  • ****
  • Mensajes: 375
Re:Voltimetro
« Respuesta #13 en: 16 de Septiembre de 2020, 16:04:00 »
El error está en la implementación en Proteus.

Pero segun el:

Lo estoy probando en el proteus y en placa en real.

 :oops:  Eso no lo había visto.   

Pero entonces... anda en Proteus y no anda en la placa?   Si es así no se para que muestra solamente el programa.

Desconectado xabc2007

  • PIC12
  • **
  • Mensajes: 62
Re:Voltimetro
« Respuesta #14 en: 16 de Septiembre de 2020, 16:17:24 »
No me funciona ni en proteus ni en real. Adc=512. V=0

Entonces, ¿El programa es correcto?



 

anything