7 recuento de segmentos salta de 00 a 05

1

Soy nuevo en codificación y necesito algunas respuestas, estoy haciendo un mini proyecto y me atrapan algunos errores, no estoy seguro,

Estoy haciendo una máquina de "fotocopia" y tengo que codificarla en C bajo el IDE de Microchip MPLAB.

así que este es el requisito en mi máquina

  1. Entrada activada y salida no hace nada
  2. Entrada activada y Aumentar (papel) aumentar el conteo de alternancia
  3. Entrada activada y Disminución (en papel) para disminuir el conteo
  4. Entrada activada, Copia de LED encendida y Motor funciona (cuenta atrás de la pantalla de 7 segmentos)

Pero aquí está el problema, logro cumplir con todos los requisitos, pero con el último requisito después de que la cosa tenga cuenta regresiva y 7 segmentos muestren 00, cuando intento aumentar el conteo, el conteo de 7 segmentos aumenta aleatoriamente, por ejemplo, 00 > 5,00 > 18. ¿Qué agrego en la línea de codificación para que aumente en 1?

Mi último código de cuenta actual es este

for(i=paper;i >=0;i--) //for countdown

   {

    while(SW3==1)

    LED1=1;
    Delay1KTCYx(250);
    LED1=0;
    Delay1KTCYx(250);
    M_On=1;

   }

¿qué debo agregar para asegurarme de que el recuento no salte, por ejemplo, 00 > 01

    
pregunta Muhd Syafiq

1 respuesta

2

Su código de control de disminución anterior esencialmente anula la entrada a través de la espera de liberación del interruptor y el bloqueo de los retrasos en bucle.

Debes corregir la línea while: el formato hace que no esté claro ... O bien

while(SW3==1) LED1=1; 

... o use llaves si está en otra línea ..

Una suposición adecuada podría ser que su código de incremento faltante no funciona de esta manera y el rebote del interruptor está causando múltiples incrementos para cada operación del interruptor.

Si no sabe acerca del rebote del interruptor, cuando los contactos se cierran (y hasta cierto punto cuando se abren), la resistencia no desciende repentinamente de extremadamente alta a extremadamente baja como un borde de onda cuadrado limpio. Los contactos son trozos de metal y se golpean entre sí y, literalmente, se abren y cierran unas cuantas veces en la escala de milisegundos.

Cuando se abren, puede haber modos de vibración mecánica en el rango de kHz que causan un borde 'sucio' similar. Si bien no notará que a una escala humana de la percepción, es muy posible que un microcontrolador interprete los bordes como muchas operaciones de conmutación. Las soluciones se han cubierto bien, tanto aquí como en otros lugares, el firmware es mi método preferido, pero también se puede resolver en hardware. Una manera cruda es simplemente ignorar el interruptor durante unas decenas de milisegundos después de que se detecte un cambio.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas