Autor Tema: Probador de bateria  (Leído 1871 veces)

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

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Probador de bateria
« en: 30 de Enero de 2017, 19:39:13 »
Hola a todos, estoy tratando de hacer un probador de baterias con un pic, que encienda luces de acuerdo al voltaje, roja 0 a 9 amarillo de 9 a 11 y verde mas de 11 volts pero no me funciona, cual sera el problema? el voltaje lo mido en AN3
Código: [Seleccionar]
#include <12F675.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES PUT                      //Power Up Timer
#FUSES PROTECT                  //Code protected from reads
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOCPD                    //No EE protection
#device adc=8//La resolución del módulo A/D es de 8 bits.
#use delay(int=4000000)
float Voltaje=0;
int8 X=0;
void main()
{
   setup_adc_ports(sAN3|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(3);
   delay_ms(5);
   setup_comparator(NC_NC);
   set_tris_a(0x10);
   while(1){
            set_adc_channel(3);
            delay_ms(5);
            X=read_adc();
            delay_ms(30);
            Voltaje=(X/255.0)*13.0;
            if(0<=Voltaje<=9.0)
            {
            output_high(PIN_A0);
            output_Low(PIN_A1);
            output_Low(PIN_A2);
            }
            if(9.0<Voltaje<=11.0)
            {
            output_high(PIN_A1);
            output_Low(PIN_A0);
            output_Low(PIN_A2);
            }
            if(Voltaje>11.0)
            {
            output_high(PIN_A2);
            output_Low(PIN_A0);
            output_Low(PIN_A1);
            }
           
            }
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Probador de bateria
« Respuesta #1 en: 30 de Enero de 2017, 19:55:27 »
Primero espero que poseas un divisor resistivo que pase de 13V a 5V, mas un seguidor de emisor, por que las resistencias van a ser grandes.
Y el problema en el software esta en tus condiciones de los ifs

            if(0<=Voltaje<=9.0)

estos se evaluarian asi:

Primero 0<= Voltaje , lo cual es True
Segundo True <= 9.0, lo cual imagino que debe ser True tambien.

Te das cuenta cual es el problema?

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re:Probador de bateria
« Respuesta #2 en: 30 de Enero de 2017, 20:19:44 »
gracias por responder, la verdad no se cual es el problema, como lo soluciono?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Probador de bateria
« Respuesta #3 en: 30 de Enero de 2017, 20:46:30 »
Esto:

Código: C
  1. if(0<=Voltaje<=9.0)
  2.             {
  3.             output_high(PIN_A0);
  4.             output_Low(PIN_A1);
  5.             output_Low(PIN_A2);
  6.             }
  7.             if(9.0<Voltaje<=11.0)
  8.             {
  9.             output_high(PIN_A1);
  10.             output_Low(PIN_A0);
  11.             output_Low(PIN_A2);
  12.             }
  13.             if(Voltaje>11.0)
  14.             {
  15.             output_high(PIN_A2);
  16.             output_Low(PIN_A0);
  17.             output_Low(PIN_A1);
  18.             }

Por esto:

Código: C
  1. if( Voltaje <= 9.0 )
  2. {
  3.         output_high(PIN_A0);
  4.         output_Low(PIN_A1);
  5.         output_Low(PIN_A2);
  6. }
  7. else if( Voltaje <= 11.0)
  8. {
  9.         output_high(PIN_A1);
  10.         output_Low(PIN_A0);
  11.         output_Low(PIN_A2);
  12. }
  13. else
  14. {
  15.         output_high(PIN_A2);
  16.         output_Low(PIN_A0);
  17.         output_Low(PIN_A1);
  18. }

Tu problema que para hacer esto:
Código: C
  1. if(0<=Voltaje<=9.0)

en realidad deberias hacer esto:

Código: C
  1. if( (0<=Voltaje) && (Voltaje<=9.0) )

No hay necesidad de comprobar si es menor a 0. Por que el valor de salida del ADC es de 0 a 255 en 8 bits.
Tampoco hay necesidad de preguntar si es menor a 11 y mayor a 9, si es que antes ya deduciste que NO es menor a 9, por eso lo cambie por else if.
Y el ultimo no hay necesidad de preguntar por el valor, a no ser que quieras agregar un nivel mas, por si se pasa de voltaje.
« Última modificación: 30 de Enero de 2017, 21:14:27 por KILLERJC »

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re:Probador de bateria
« Respuesta #4 en: 30 de Enero de 2017, 21:18:01 »
Gracias por la ayuda, ahora si anda.


 

anything