Inhalt
Als kleines Nachmittagsprojekt habe ich mir heute ein kleines Lauflicht ausgedacht. Ein Lauflicht mit acht LEDs, die direkt an einen ATtiny13 angeschlossen werden. Mein Ziel war es, mit sehr wenigen Bauteilen auszukommen. Um dieses Ziel zu erreichen, muss man mit der Einschränkung leben, dass immer nur eine LED leuchten darf.
Der ATtiny13 hat fünf Pins übrig (VCC, GND und Reset fallen weg), an denen man etwas anschließen kann. Jeder dieser fünf Pins kann drei Zustände einnehmen. Wenn der Pin in den INPUT-Modus geschaltet wird, dann ist der Pin hochohmig (falls man nicht den internen PullUp-Widerstand aktiviert). Wenn der Pin in den OUTPUT-Modus geschaltet wird, dann kann der Pin entweder nach GND (=LOW) oder nach VCC (=HIGH) ziehen.
Eine LED leuchtet nur dann, wenn die Anode nach + und die Kathode nach - zeigt. Genau diesen Effekt möchte ich ausnutzen und je eine der beiden angeschlossenen LEDs leuchten lassen. Durch umpolen der Anschlüsse leuchtet entweder die eine oder die andere LED.
Wenn man einen Pin des ATtiny13 gleichzeitig an alle LEDs anschließt, dann kann man mit fünf Pins bis zu acht LEDs ansteuern. Um die LEDs auszuschalten, stellt man die zugehörigen Pins in den INPUT-Modus, damit diese hochohmig werden.
Der ATtiny13 ist ein sehr kleiner Mikrocontroller mit nur acht Beinchen (Pins). Zwei der Pins fallen für die Stromversorgung (5 Volt und GND) weg und ein Pin ist für den Reset reserviert. Dann bleiben noch fünf Pins übrig, mit denen wir arbeiten können.
Wie man hier im Anschlussplan gut sehen kann, sind das die Pins PB0...PB4.
Der ATtiny13 kann in der fertigen Schaltung programmiert werden. Dafür muss man den Programmer an die Pins RESET, VCC, GND, MOSI, MISO und SCK anschließen.
Der Schaltplan kann mit dem sPlan-Viewer in hoher Qualität betrachtet und gedruckt werden.
Wenn der ATtiny13 einmal fertig programmiert ist, dann kann man auf den Reset-Widerstand und die ISP-Anschlüsse verzichten. Der endgültige Aufbau sieht dann so aus:
Wie bei mir üblich, programmiere ich den ATtiny13 mit Bascom. Zuerst ein einfaches Lauflicht. Dann kommt noch ein einfaches "Knight Rider"-Lauflicht mit dazu.
Im Quellcode verwende ich so kryptische Zeilen wie z.B. DDRB = &B00000000
. Was das zu bedeuten hat wird im "Kleinen Bascom AVR Kurs - Hallo Welt" erklärt.
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 16
$swstack = 5
$framesize = 16
Macro Leds_off
Ddrb = &B00000000
Portb = &B00000000
End Macro
Macro Led1
Ddrb = &B00010001
Portb = &B00000001
End Macro
Macro Led2
Ddrb = &B00010001
Portb = &B00010000
End Macro
Macro Led3
Ddrb = &B00010010
Portb = &B00000010
End Macro
Macro Led4
Ddrb = &B00010010
Portb = &B00010000
End Macro
Macro Led5
Ddrb = &B00010100
Portb = &B00000100
End Macro
Macro Led6
Ddrb = &B00010100
Portb = &B00010000
End Macro
Macro Led7
Ddrb = &B00011000
Portb = &B00001000
End Macro
Macro Led8
Ddrb = &B00011000
Portb = &B00010000
End Macro
Do
Led1 : Waitms 100
Led2 : Waitms 100
Led3 : Waitms 100
Led4 : Waitms 100
Led5 : Waitms 100
Led6 : Waitms 100
Led7 : Waitms 100
Led8 : Waitms 100
Loop
End
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 16
$swstack = 5
$framesize = 16
Dim I As Byte
Macro Leds_off
Ddrb = &B00000000
Portb = &B00000000
End Macro
Macro Led1
Ddrb = &B00010001
Portb = &B00000001
End Macro
Macro Led2
Ddrb = &B00010001
Portb = &B00010000
End Macro
Macro Led3
Ddrb = &B00010010
Portb = &B00000010
End Macro
Macro Led4
Ddrb = &B00010010
Portb = &B00010000
End Macro
Macro Led5
Ddrb = &B00010100
Portb = &B00000100
End Macro
Macro Led6
Ddrb = &B00010100
Portb = &B00010000
End Macro
Macro Led7
Ddrb = &B00011000
Portb = &B00001000
End Macro
Macro Led8
Ddrb = &B00011000
Portb = &B00010000
End Macro
Macro Einfaches_lauflicht
Led1 : Waitms 100
Led2 : Waitms 100
Led3 : Waitms 100
Led4 : Waitms 100
Led5 : Waitms 100
Led6 : Waitms 100
Led7 : Waitms 100
Led8 : Waitms 100
End Macro
Macro Knight_rider
Led1 : Waitms 100
Led2 : Waitms 100
Led3 : Waitms 100
Led4 : Waitms 100
Led5 : Waitms 100
Led6 : Waitms 100
Led7 : Waitms 100
Led8 : Waitms 100
Led7 : Waitms 100
Led6 : Waitms 100
Led5 : Waitms 100
Led4 : Waitms 100
Led3 : Waitms 100
Led2 : Waitms 100
End Macro
Do
For I = 1 To 2
Einfaches_lauflicht
Next I
For I = 1 To 2
Knight_rider
Next I
Loop
End
Bei diesem Programm sieht es so aus, als ob zwei LEDs gleichzeitig hin und her laufen würden.
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 16
$swstack = 5
$framesize = 16
Dim Bt As Byte
Macro Leds_off
Ddrb = &B00000000
Portb = &B00000000
End Macro
Macro Led1
Ddrb = &B00010001
Portb = &B00000001
End Macro
Macro Led2
Ddrb = &B00010001
Portb = &B00010000
End Macro
Macro Led3
Ddrb = &B00010010
Portb = &B00000010
End Macro
Macro Led4
Ddrb = &B00010010
Portb = &B00010000
End Macro
Macro Led5
Ddrb = &B00010100
Portb = &B00000100
End Macro
Macro Led6
Ddrb = &B00010100
Portb = &B00010000
End Macro
Macro Led7
Ddrb = &B00011000
Portb = &B00001000
End Macro
Macro Led8
Ddrb = &B00011000
Portb = &B00010000
End Macro
Const Loopsize = 50
Do
For Bt = 0 To Loopsize
Led1 : Waitms 1
Led2 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led2 : Waitms 1
Led3 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led3 : Waitms 1
Led4 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led4 : Waitms 1
Led5 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led5 : Waitms 1
Led6 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led6 : Waitms 1
Led7 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led7 : Waitms 1
Led8 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led6 : Waitms 1
Led7 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led5 : Waitms 1
Led6 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led4 : Waitms 1
Led5 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led3 : Waitms 1
Led4 : Waitms 1
Next Bt
For Bt = 0 To Loopsize
Led2 : Waitms 1
Led3 : Waitms 1
Next Bt
Loop
End
Anstatt der üblichen stabilisierten Stromversorgung kann man für dieses Lauflicht problemlos einen 4,5 Volt Batterieblock oder drei kleine Mignonbatterien (AA) verwenden. Da immer nur eine LED leuchtet, ist die durchschnittliche Stromaufnahme dieser Schaltung 20 mA. Die Schaltung funktioniert in einem Spannungsbereich zwischen 2,8 und 5 Volt. Höher als 5 Volt darf die Spannung niemals sein, da ansonsten die LEDs Schaden nehmen würden.
Das Feine an so einem Mikrocontroller wie dem ATtiny13 ist, dass man ohne viel Aufwand das Programm ändern kann. Wenn du also ein anderes Lauflicht damit machen möchtest -- gerne, nur zu. :-) Wenn du zu dieser Schaltung einen interessanten Bascom-Quellcode hast -- schreibe mir ein Email. Die Emailadresse findest du im Impressum. Ich werde deinen Quellcode hier anhängen. Wenn du auch noch ein Foto von deiner Testschaltung hättest, dann wäre das sogar perfekt -- muss aber nicht unbedingt sein.
Das war es -- mein kleines Nachmittagsprojekt. Ich musste einfach mal wieder ein kleines Projekt starten, damit ich nicht einroste. ;-)
lg Gerold :-)
dm09 hat mich per Email und im Strippenstrolch-Forum darauf aufmerksam gemacht, dass man bis zu 12 LEDs an den ATtiny13 anschließen kann. Vielen Dank dafür! :-) Da sieht man erst, dass man auch mit so einem kleinen Ding, wie dem ATtiny13, viel anfangen kann, wenn man sich etwas einfallen lässt. :D*
Hier ist die Nachricht von dm09:
Wie schon besprochen, stelle ich hier den Schaltplan und den Bascom Code zur Verfügung. Die Idee beruht auf deiner Idee und deinem AVR Kurs. Meine Modfikation beruht auf der Überlegung an einer LED-Matrix die ich mit antiparallen Dioden ausgestatte habe. Somit kann ich statt 8 LEDs, 12 LED
s ansteuern. Hier nun der Bascom Code::
$regfile = "attiny13.dat"
$crystal = 4800000
$hwstack = 16
$swstack = 5
$framesize = 16
Macro Leds_off
Ddrb = &B00000000
Portb = &B00000000
End Macro
Macro Led1
Ddrb = &B00010001
Portb = &B00000001
End Macro
Macro Led2
Ddrb = &B00010001
Portb = &B00010000
End Macro
Macro Led3
Ddrb = &B00010010
Portb = &B00000010
End Macro
Macro Led4
Ddrb = &B00010010
Portb = &B00010000
End Macro
Macro Led5
Ddrb = &B00010100
Portb = &B00000100
End Macro
Macro Led6
Ddrb = &B00010100
Portb = &B00010000
End Macro
Macro Led7
Ddrb = &B00001001
Portb = &B00000001
End Macro
Macro Led8
Ddrb = &B00001001
Portb = &B00001000
End Macro
Macro Led9
Ddrb = &B00001010
Portb = &B00000010
End Macro
Macro Led10
Ddrb = &B00001010
Portb = &B00001000
End Macro
Macro Led11
Ddrb = &B00001100
Portb = &B00000100
End Macro
Macro Led12
Ddrb = &B00001100
Portb = &B00001000
End Macro
Do
Led1 : Waitms 500
Led2 : Waitms 500
Led3 : Waitms 500
Led4 : Waitms 500
Led5 : Waitms 500
Led6 : Waitms 500
Led7 : Waitms 500
Led8 : Waitms 500
Led9 : Waitms 500
Led10 : Waitms 500
Led11 : Waitms 500
Led12 : Waitms 500
Loop
End
Hier der Schaltplan des 12 Led Lauflichtes:
Und hier noch ein Bild vom fertigen Aufbau:
Ich programmiere Progressive Web Applications, Mobile Apps, Desktop-Programme und noch vieles mehr. Falls es dich interessiert, findest du mehr Informationen darüber auf meiner Business-Website.