Botón para encender el LED, suelte el botón saltar nuevamente

0

Estoy tratando de hacer el siguiente proyecto pequeño:

La MCU maestra tiene 2 botones: PINC0 y PINC1

PINC0 contará los clics

PINC1 parpadeará el LED n veces (n = contador) y enviará n a la MCU ESCLAVO

El MCU esclavo obtendrá la n y parpadeará el LED de su lado.

Estoy usando ATmega8

Ver código MASTER:

#ifndef F_CPU 
#define F_CPU 1000000UL 
#endif 

#include <avr/io.h> 
#include <util/delay.h> 
#include <avr/interrupt.h> 

#define ACK 0x7E 

void spi_init_master (void) 
{ 
   DDRB = (1<<5)|(1<<3); 
   SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); 
} 

unsigned char spi_tranceiver (unsigned char data) 
{ 
   SPDR = data; 
   while(!((SPSR)&(1<<SPIF))); 
   return SPDR; 
} 

void led_blink(int x) 
{ 
   for (int i=0; i<x ; i++) 
   { 
      PORTD|=(1<<7); 
      _delay_ms(150); 
      PORTD^=(1<<7); 
      _delay_ms(70); 
   } 
} 

int main(void) 
{ 
   spi_init_master(); 
   DDRD=0xff; 
   DDRC=0; 
   PORTC|=(1<<0)|(1<<1); 
   int counter = 0; 
   int flag = 0; 
   unsigned char data; 

   while(1) 
   { 
      unsigned char pressed = ~PINC; 
      if (PINC & 0x01) { 
         flag=1; 
      } 

      if ((pressed & 0x01) && (flag == 1)) { 
         flag=0; 
         counter++; 
         PORTD|=(1<<PD7); 
         _delay_ms(20); 
      } 
      PORTD=0; 

      if (pressed & 0x02) { 
         led_blink(counter); 
         data = spi_tranceiver(counter); 
         counter=0; 
      } 
   } 
} 

Lo que estoy tratando de hacer aquí es contar los clics de PINC0 (el contador aumenta cada clic), y los "parpadeos" del LED parpadeantes en el clic del botón PINC1.

También, en el botón PINC1, haga clic en Deseo comunicarme con MCU SLAVE SPI, que también parpadea su LED "contador" veces.

Las conexiones de hardware son:

  1. Vcc, GND a fuente externa
  2. LED positivo llevado a PD7, negativo a resistencia conectada a GND
  3. Botones, PC0, PC1 conectados a una pata de cada botón, y la otra pata conectada a GND.

Los problemas son:

  1. El botón es pull up activo bajo. el botón conectado por 1 pata al pin IO y la otra pata a GND. Funciona, pero la mitad del tiempo el LED parpadea también en el lanzamiento.
  2. El SPI no funciona, ¿me perdí algo?

¿Por qué ocurren esos 2 problemas?

    
pregunta gabi

1 respuesta

0

utilicé software de rebote.
gracias a todos.
Incremento el contador dentro de la sentencia Click If, solo si es más de 100 que estoy haciendo mis cosas ... de lo contrario, si es probable, la rebota     

respondido por el gabi

Lea otras preguntas en las etiquetas