Blinklicht
Die LED an PB0 des ATtiny2313 @1MHz soll im Sekundentakt blinken (500ms an, 500ms aus).
Die Zeit soll mit der Verzögerungsfunktion _delay_ms() realisiert werden.
Quellcode [Blinklicht.c ] // *** Blinklicht 1.2 (c) Oliver Mezger 19.02.2016
#include <avr/io.h> // Definitionen laden
#include <util/delay.h> // Delay-Bibliothek laden
// Blinklicht mit STK 200 (LED neg. Logik) und ATtiny2313 @1MHz
int main( ) { // Hauptprogramm
PORTB= 1 ; // L0 aus
DDRB= 1 ; // PB0 als Ausgang
while ( 1 ) { // Endlosschleife
PORTB &= ~1 ; // PB0<-0 L0 an
_delay_ms( 500 ) ; // warte 500ms
PORTB |= 1 ; // PB0<-1 L0 aus
_delay_ms( 500 ) ; // warte 500ms
}
return 0 ;
}
Die Taktfrequenz des µC im Projekt einstellen, damit _delay_ms() richtig übersetzt wird.
In _delay_ms() nur konstante Zahlen (keine Variablen) verwenden, sonst "explodiert" der Code. Für variable Wartezeiten _delay_ms() einfach in for-Schleife verpacken.
Lauflicht [Demo ]
Lösung anzeigen..
Quellcode [Lauflicht.c ]// *** Lauflicht 1.0 (c) Oliver Mezger 5.3.2010
#include <avr/io.h> // Definitionen laden
#include <util/delay.h> // Delay-Bibliothek laden
// Lauflicht mit STK 200 (LED neg. Logik) und AT90S2313
int main( ) {
PORTB= 0xff ; // alle LED aus
DDRB= 0xff ; // PB als Ausgang
while ( 1 ) { // Endlosschleife
if ( PORTB == 0xff ) // wenn alle LED aus
PORTB = 0xfe ; // LED0 an
else
PORTB = PORTB * 2 + 1 ; // naechste LED
_delay_ms( 100 ) ; // warte 100ms
}
return 0 ;
} Knight Rider [Demo ]
Lösung anzeigen..
Quellcode [Knightrider.c ]// *** Knightrider 1.0 (c) Oliver Mezger 9.3.2010
#include <avr/io.h> // Definitionen laden
#include <util/delay.h> // Delay-Bibliothek laden
// Lauflicht mit STK 200 (LED neg. Logik) und AT90S2313
int main( ) {
unsigned char rauf = 1 ;
DDRB= 0xff ; // PB als Ausgang
PORTB = 0xfe ; // LED0 an
while ( 1 ) { // Endlosschleife
if ( rauf) {
if ( PORTB == 0x7f ) // wenn LED7 an
rauf= 0 ;
else
PORTB = PORTB * 2 + 1 ; // naechste LED
}
else {
if ( PORTB == 0xfe ) // wenn LED0 an
rauf= 1 ;
else
PORTB = PORTB / 2 + 128 ; // naechste LED
}
_delay_ms( 100 ) ; // warte 100ms
}
return 0 ;
} Umschaltbares Blinklicht
Entwickeln Sie ein Programm bei dem durch die Taster S0 und S1 soll die Blinkfrequenz umgeschaltet werden kann:
Nach dem Start oder nach Betätigen von S0 ist die Blinkfrequenz 1Hz.
Nach Betätigen von S1 ist die Blinkfrequenz 2Hz.
S0 hat die höhere Priorität bei gleichzeitigem Drücken von S0 und S1.
Lösung anzeigen..
Quellcode [blinklicht_u.c ]// *** Blinklicht umschaltbar 1.0 (c) Oliver Mezger 19.02.2016
#include <avr/io.h> // Definitionen laden
#include <util/delay.h> // Delay-Bibliothek laden
void my_delay( unsigned char n) { // Hilfsfunktion
unsigned char i;
for ( i= 0 ; i< n; i++ ) {
_delay_ms( 10 ) ;
}
}
int main( ) { // Hauptprogramm
PORTB= 1 ; // L0 aus
DDRB= 1 ; // PB0 als Ausgang
unsigned char delay = 50 ; // 500 ms warten
while ( 1 ) { // Endlosschleife
PORTB &= ~1 ; // PB0<-0 L0 an
my_delay( delay) ; // warte delay * 10 ms
PORTB |= 1 ; // PB0<-1 L0 aus
my_delay( delay) ; // warte delay * 10 ms
if ( ! ( PIND& 1 ) ) { // S0 gedrueckt?
delay = 50 ;
}
else if ( ! ( PIND& 2 ) ) { // S1 gedrueckt?
delay = 25 ;
}
}
return 0 ;
} Erweitern Sie das Progamm um ein 5Hz blinken bei Drücken von S2.
SOS morsen
Entwickeln Sie ein Programm, dass SOS blinkt: ... - - - ...