Eine einzige Taste ...



Folgendes Problem war zu lösen:
Nur eine Taste soll das Blinken einer LED starten und nach einer Weile auch wieder beenden können.

Wir benutzen unser Attiny2313-Experimentierboard oder stecken die kleine Schaltung auf einem Steckbrett auf.
Taste an PD0 und LED an PD7.

Schau Dir den Programm-Quelltext an:


#include <avr/io.h>

#define F_CPU 1000000UL 
#include <util/delay.h>



//Funktion ledblinken
void ledblinken(void){
    PORTB |= _BV(PB7);   _delay_ms(100);
    PORTB &= ~_BV(PB7);  _delay_ms(100);
   
}


int main(void){
    DDRB |= _BV(PB7); //LED
    DDRD &= ~_BV(PD0); //Taste
    PORTD |= _BV(PD0); //Pull Up Widerstand
      
       int modus = 0; // modus=1->blinken und modus=0->kein_blinken
  
       while(1){
        if ( bit_is_clear(PIND,0) && (modus==0) )     {ledblinken(); modus=1;}
        if ( bit_is_set(PIND,0) && (modus==1)     )     {ledblinken();}
        if ( bit_is_clear(PIND,0) && (modus==1) )     {modus=0; _delay_ms(250);_delay_ms(250);}
    }
   
   
    return 0;
}



Hier gibt's den Quelltexte-Ordner zum Programmieren des Attiny2313.


Anmerkungen:

  • Wenn Du hier irgendwas nicht verstehst, solltest Du Dir unbedingt das Projekt Hello World - Attiny2313  ganz durchlesen.
  • Der Quelltexte-Ordner ist für die Benutzung des USB-Programmieradapters der Mikrocontrollerspielwiese vorgesehen. Man kann allerdings ganz leicht im dort vorhandenen Makefile auf den parallelen Programmieradapter umstellen. Wie es geht, wurde im Wechselblinker bereits beschrieben.



Aufgaben:

  • Versuch doch mal mit einer Taste mehrere Leuchtdioden einzeln blinken zu lassen!

  • Versuch doch mal mit mehreren Tasten eine Leuchtdiode mit unterschiedlichen Frequenzen blinken zu lassen!