Soy un principiante del microcontrolador y tengo el kit para AVR. Actualmente estoy usando un ATMega16 para aprender lo básico. He intentado algunos experimentos sencillos con este microcontrolador utilizando LED. Ahora quería hacer una interfaz de hardware y encontré un proyecto interesante.
Quiero usar 6 botones pulsadores para contar hasta 2500 y mostrarlos en los LED de siete segmentos multiplexados. 3 botones para contar hacia arriba, es decir, (100, 10 y 1). Por ejemplo, si tengo que mostrar 1532, presionaré el botón 100 15 veces, el botón 10 3 veces y el botón 1 dos veces. Del mismo modo, para la cuenta regresiva, quiero usar 3 botones. He intentado algún código que utiliza declaraciones condicionales para verificar el estado del pin, pero ninguno de ellos parece funcionar.
Por favor, ayúdame con esto, ya que he estado atascado en esto durante bastante tiempo. Parece ser el problema con el "debouncing" pero no estoy completamente seguro de ese concepto.
Estoy tratando de contar la cantidad de veces que se presionó el interruptor (PB0) y cuando llega a 5, quiero encender un LED (PD0). El siguiente código no funciona.
int main(void)
{
unsigned char count=0;
TCCR0 = (1<<WGM01)|(1<<CS02)|(1<<CS00); // Timer0 Mode 2: CTC-Prescaler 1024
TCNT0 = 0;
OCR0 = (((XTAL / 1024.0)*10e-3)-1); // For 10ms
TIMSK = 1<<OCIE0; // enable T0 interrupt
DDRB = 0x00; // PB0 input
PORTB = 0x00; // external pullup
DDRD = 0x01; // PD0 LED output
PORTD = 0x00; // LEDs off
sei();
while(1)
{ // main loop
if(!(PINB & _BV(PB0)))
{
count++;
if(count>=5)
{
PORTD|= (1<<PD0); // SET LED on keypress
_delay_ms(10);
count = 0;
}
}
}
}