Ampelmodell und Lauflicht in C mit ATtiny13


von Hermann Nieder
Elektronik-Labor   Projekte   AVR 




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