Duda entradas analogicas

#1
Hola, estoy haciendo un programa en ccs con el pic16f873 para leer dos potenciómetros, que segun su valor independiente deben encender más o menos su respectiva fila de leds (8 para cada canal)

Funciona todo correctamente, solo me falta que cuando exista una diferencia de 2 leds encendidos, o sea, que en el canal 1 por ejemplo esten 3 leds encendidos y en el canal 2 esten 5, pues me encienda otro led a modo de aviso, tiene que hacerlo en todos los niveles, ejemplo 8 lends encidos en el canal 1 y 6 en el 2. Supongo que hay que comparar los valores de entrada y cuando la diferencia entre ellos sea superior a 2 pues que se encienda el problema es que no se como hacer esto.

Gracias de antemano

PHP:
#include <main2.h>
int16 v1,v2, t1, t2;
void main()
{

   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   

  while(1){
   set_adc_channel(0);
   delay_us(10);
   t1=read_adc();
   v1=t1/127;
   
   set_adc_channel(1);
   delay_us(10);
   t2=read_adc();
   v2=t2/127;
   
  
    switch(v1){
    
    case 0: output_b(0b00000000);
            break;
    case 1: output_b(0b00000001);
            break;
    case 2: output_b(0b00000011);
            break;
    case 3: output_b(0b00000111);
            break;
    case 4: output_b(0b00001111);
            break;
    case 5: output_b(0b00011111);
            break;
    case 6: output_b(0b00111111);
            break;
    case 7: output_b(0b01111111);
            break;
    case 8: output_b(0b11111111);
            break;
    
    
    }
   
   switch(v2){
    
    case 0: output_c(0b00000000);
            break;
    case 1: output_c(0b00000001);
            break;
    case 2: output_c(0b00000011);
            break;
    case 3: output_c(0b00000111);
            break;
    case 4: output_c(0b00001111);
            break;
    case 5: output_c(0b00011111);
            break;
    case 6: output_c(0b00111111);
            break;
    case 7: output_c(0b01111111);
            break;
    case 8: output_c(0b11111111);
            break;
    
    
    }
      
  }
}

Los valores de entrada los divido entre 127 para que den 8 leds justos

Gracias.
 
Última edición:
#2
Umm.. se me ocurre algo como

Código:
int z=0;

if(v1>v2)
{
z=v1-v2;
if(z>2)
{
encender led;
}

}
else
{
z=v2-v1;
if(z>2)
{
encender led;
}
}
 
Arriba