Lectura de potenciometro y displays

Buenas, amigos. ¿Alguien me puede ayudar?
Quiero programar enPBPun potenciómetro y que se muestre en 2 displays del 0 al diez conforme va aumentando el control, pero que sea fijo el número que muestras.

Lo que pasa es que me hice uno y queda prendido 1, le voy moviendo el potenciómetro y hay momentos que se queda entre mostrar 1 o 2, y se ve feo.
¿Hay alguna manera de dejar un número fijo?

Gracias por su ayuda.
 
Última edición por un moderador:
Me imagino que estaras usando la entrada analogica de algun microcontrolador para leer el valor del potenciometro. Esos valores oscilantes en la lectura seran debidos al ruido electrico que provoca pequeñas variaciones de tensiones en el circuito que tienes conectado a la entrada analogica.

Para eliminar el ruido electrico tienes que filtrarlo, el filtro mas sencillo es colocar un capacitor de 100nF conectado entre la entrada analogica y tierra. Cuanto mas cerca de la entrada analogica, mejor.

Tambien puedes hacerlo por software, tomas una serie de valores y calculas la media de esos valores, y ese valor lo envias al display.
 
Hola, amigos. Este es mi programa, muestra en los displays del cero al diez y varía la intensidad de un LED, conforme va variando el potenciómetro.

Mi pregunta es. ¿Habrá una manera de evitar que salten los displays?
Por ejemplo, la lectura de displays 1 al 2, variando el potenciómetro.
Ahí es donde queda indeciso sin quedarse en uno o dos.
¿Cómo puedo arreglar eso, si se puede?
PHP:
DEFINE OSC 4
; PARÁMETROS DEL ADC
DEFINE ADC_BITS 10 ; NÚMERO DE BITS
DEFINE ADC_CLOCK 3 ; USAR CLOCK RC DEL AD
DEFINE ADC_SAMPLEUS 50 ; TIEMPO DE MUESTREO EN 50US
; VARIABLES
RES VAR word; VARIAVLE PARA EL RESULTADO DE LA CONVERSIÓN
VAL var word ;VARIABLE PARA LA SALIDA

TRISA=1
TRISA.0 = 1 ; RA0 (AN0) COMO ENTRADA
TRISB = 0 ; PORTB SALIDA (ADC)
portc=0
trisc=0
luz var portc.1
aran var portc.0
 x var byte

ADCON0 = %11000001 ; RELOJ DEL A/D, SELECCIONA AN0
ADCON1 = %10001110 ; ESTABLECER SOLO UN CANAL COMO ANALÓGICO
                   ; VOLTAJE DE REFERENCIA ES VDD
low aran

PORTB = 0







 PORTB = %00010011; MUESTRA 1 EN EL DISPLAY
 for x= 1 to 5
 high luz 
 pause 100
 low luz 
 pause 100
 next
 PORTB = %00010010; MUESTRA 1 EN EL DISPLAY
 for x= 1 to 5
 high luz 
 pause 100
 low luz 
 pause 100
 next


  PORTB = %00010001; MUESTRA 1 EN EL DISPLAY
 for x= 1 to 5
 high luz 
 pause 100
 low luz 
 pause 100
 next





INICIO: ; INICIAR CONVERSIÓN
  ADCIN 0, RES ; LEER LA ENTRADA ANALOGICA
  VAL = res/102
    ; DIVIDIMOS ENTRE 113 YA QUE 1023/9  = 113.6
                 ; TAL VES SE PUEDE UTILIZAR 110 PARA UN RANGO CONSIDERABLE 
  SELECT CASE VAL 
    CASE 0
     
        PORTB = %01000000; MUESTRA 0 EN EL DISPLAY
        pause 1
        PORTB = %00010000; MUESTRA 0 EN EL DISPLAY
       
        high aran
        low luz
    GOTO INICIO
    
    
    
    
    
    
    
    
    
    
    
    CASE 1
     
        PORTB = %01000001; MUESTRA 1 EN EL DISPLAY
        pause 1
        PORTB = %00010000; MUESTRA 0 EN EL DISPLAY
        
        pwm luz,10,1
        high aran
    GOTO INICIO
    
    
    
    
    
    
    
    
    CASE 2
     
        PORTB = %01000010; MUESTRA 2 EN EL DISPLAY
        pause 1
        PORTB = %00010000; MUESTRA 0 EN EL DISPLAY
      
        pwm luz,28,1
        high aran
   
    
    
    
    
    
    
    
    CASE 3
  
        PORTB = %01000011; MUESTRA 3 EN EL DISPLAY
        pause 1
        PORTB = %00010000; MUESTRA 0 EN EL DISPLAY
    
         pwm luz,51,1
        high aran
    GOTO INICIO
   
    
    
    
    
    
    
    CASE 4
    
        PORTB = %01000100; MUESTRA 4 EN EL DISPLAY
        pause 1
        PORTB = %00010000; MUESTRA 0 EN EL DISPLAY
        
        pwm luz,74,1
        high aran
    GOTO INICIO
    
     
    
    
    
    
    
    
 
        CASE 5
        
        PORTB = %01000101; MUESTRA 5 EN EL DISPLAY
        pause 1
        PORTB = %00010000; MUESTRA 0 EN EL DISPLAY
        
        pwm luz,97,1
        high aran
        GOTO INICIO
        
        
        
        
        
  
    CASE 6
     
        PORTB = %01000110; MUESTRA  6 EN EL DISPLAY
        pause 1
        PORTB = %00010000; MUESTRA 0 EN EL DISPLAY
        
        pwm luz,100,1
        high aran
    GOTO INICIO
    
       
    
    
    
    
    
    
    
  
  
    CASE 7
    
        PORTB = %01000111; MUESTRA  7 EN EL DISPLAY
        pause 1
        PORTB = %00010000; MUESTRA 0 EN EL DISPLAY
        
        pwm luz,123,1
        high aran
    GOTO INICIO
    
    
    
    
    
    
    
    
    
    
    
  
   
        
  
    
    CASE 8
     pause 1
        
        PORTB = %01001000; MUESTRA  8 EN EL DISPLAY
        pause 1
        PORTB = %00010000; MUESTRA 0 EN EL DISPLAY
     
        pwm luz,146,1
        high aran
        
  
    GOTO INICIO
    
    
    
    
    
    
    
    
    
    
    
    
  

    
    CASE 9
    
        PORTB = %01001001; MUESTRA  9 EN EL DISPLAY
        pause 1
        PORTB = %00010000; MUESTRA 0 EN EL DISPLAY
       
        pwm luz,169,1
        high aran
    GOTO INICIO
    
    
    
    
    
    
    
    
    
    
    
    
    
       CASE 10
      
        PORTB = %01000000; MUESTRA  0 EN EL DISPLAY
          pause 1
        PORTB = %00010001; MUESTRA 1 EN EL DISPLAY
        
       
        pwm luz,255,1
        high aran
    GOTO INICIO
   
    
    

    END SELECT 
GOTO INICIO 
END

¿Se podrá modificar algo en este programa para evitar que salten los displays, o es por otro lado la solución?
Gracias por su ayuda.
 
Última edición por un moderador:
Hola, el compañero printido, comentó una posible solución a tu consulta sobre cómo mediante software, lograr una lectura estable.
Otra opción puede ser la sig. : comparas el valor anterior con el nuevo valor, si ambos valores difieren en una cuenta, entonces NO actualizas el display. Caso contrario, si son identicos ambos valores o difieren a más de una cuenta, pues debe actualizarse el display.
 
Última edición:
Atrás
Arriba