Ampelmodell und Lauflicht in C mit ATtiny13
Angeregt wurde ich zu dem hier vorzustellenden kleinen Projekt u. a. auch durch zwei Artikel im ELO-Magazin,
in denen eine Fußgängerampel von einem Attiny2313
angesteuert wird. Ich überlegte mir, ob es auch möglich
ist, auf einem kleinen Steckboard die folgende abgebildete
Schaltung eines Fußgängerampel-Modells einschließlich
der Taster für die Ansteuerung unterzubringen, und dieses dann mit
dem Attiny13 aus dem Lernpaket Mikrocontroller anzusteuern. Dies ist
sehr wohl möglich, wie dies im Schaltbild zu sehen ist.
Im
Bild oben „wartet das Programm gerade“ auf die
Betätigung einer der beiden Taster. Es wird ähnlich wie in
einem anderen ELO-Beitrag die Spannung am Eingang ADC0/RESET-Eingang
des Attiny13 abgefragt. Die Werte von R1 und P1 sind so gewählt,
dass die Spannung an Pin1 stets mindestens so groß ist wie
der halbe Wert von Vcc des Mikrocontrollers, also für
diesen kein Reset ausgelöst wird.
Das Programm für das Ampelmodell und für das Lauflicht kann man in
Anlehnung an den oben erwähnten ELO-Beitrag in Assembler, in BASCOM AVR
oder mit in Win AVR in C programmieren. Ich habe für beide Programme in
Anlehnung an das Franzis-Fachbuch AVR-RISC Embedded Software selbst
entwickeln von Roman Mittermayr die zuletzt genannte Möglichkeit
genutzt und beide Programme in C entworfen, wie dies aus den Auszügen
der beiden Programmlistings hervorgeht.
Betätigt
man einen der beiden Taster, wird der an ADC0 eingelesene Wert
größer als derjenige, der zuvor per Programm
festgelegt worden ist, und schon laufen die Ampelphasen ab,
während denen es für den Fußgänger auch eine
Grünphase zum Überqueren der Straße gibt. Dies hier ist
ein Auszug aus dem Programmlisting in C
...
if (adwert > 210) // wenn Taste gedrückt und adwert größer als 210,
// dann Ampelsteuerung für Fußgänger
{
_delay_ms(2000);
PORTB =10; // Auto gelb, Fußgänger rot
_delay_ms(2000);
PORTB =9;
_delay_ms(2000); // Auto rot, Fußgänger rot
PORTB =17;
_delay_ms(4000); //lange Grünphase für Fußgänger
PORTB =9;
_delay_ms(2000); //Auto rot, Fußgänger rot
PORTB =11;
_delay_ms(2000); // Auto rot-gelb, Fußgänger rot
PORTB =12;
_delay_ms(2000); //Auto grün, Fußgänger rot
...
Den
Mikrocontroller in der oben abgebildeten Schaltung kann man auch so
programmieren, dass sich ein Lauflicht mit Leuchtdioden ergibt. Die
Taktfrequenz wird mit dem Trimm-Potenziometer P1 eingestellt.
Dies hier ist ein Auszug aus dem Programmlisting in C:
...
ADMUX = (1<<ADLAR); // 8-Bit-Messung, ADC0, RES
ADCSRA =(1<<ADEN)| (1<<ADPS2); // ADC ein, Clock/ 16
ADCSRA |= (1<<ADSC);
adwert= ADCH;
adwert=adwert-128; // da AD-Wandler per Programm zuvor auf 8-Bit-Modus eingestellt
// und Wert an ADC0 mindestens etwa 128 bzw. größer ist
for(n=1;n<6;n++)
{
switch (n)
{
case 1:
PORTB=4;
break;
case 2:
PORTB=2;
break;
...
for(w=0;w<adwert;w++) // Größe von adwert als Faktor für Wartezeit
{
_delay_ms(2); // von je 2 ms
}
...
Die Programmlistings zum Beitrag hier herunterladen und für eigene Zwecke umgestalten:
FG_Ampl1.zip
Lauf_L_8Bit.zip
Elektronik-Labor Projekte AVR