Upload
hoangnhu
View
220
Download
4
Embed Size (px)
Citation preview
Mikrocomputertechnik I & II
Laborübungen
Ausgabe 0.2, 15.03.2014Autoren: David Grafberger, Michael Buchalik, Johannes Huning, Stephan Rupp
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 1/21
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 2/21
Inhaltsverzeichnis1. Einführung! 4
2. Einarbeitung als Hausaufgabe! 4
2.1. Grundlagen! 4
2.2. Atmel Studio und Testboard! 6
3. Testboard aufbauen und programmieren! 13
3.1. Programmierbeispiel: LED blinken lassen! 13
3.2. Programmieraufgabe: Lauflicht! 14
3.3. Programmieraufgabe: Alle LED´s leuchten lassen! 14
4. Lichtwürfel aufbauen und programmieren! 15
4.1. Einführung und Bauanleitung! 15
4.2. Programmbeispiel: “Rahmen Ebene 1 blinken lassen”! 19
4.3. Programmieraufgabe (Hochzählen)! 19
4.4. Programmieraufgabe (Schleifendurchläufe)! 19
4.5. Programmieraufgabe (Speicher füllen)! 20
4.6. Freiwillige Programmieraufgabe (Abstraktion)! 20
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 3/21
1. EinführungIm folgenden Laborversuch geht es darum, ein Verständnis für die Handhabung und die
Funktionsweise von Mikrocontrollern zu erlernen. Ziel ist es, einen dreidimensionalen Würfel aus LEDs zu entwerfen und diesen mit Hilfe eines Mikrocontrollers anzusteuern. Zu Beginn des Laborversuchs werden die nötigen Grundlagen im Umgang mit Mikrocontrollern und mit der Laborumgebung geschaffen. Es wird der verwendete Mikrocontroller und der Aufbau des Schaltplans für die Steuerplatine vorgestellt.
Um ein erstes Gefühl dafür zu bekommen wie man mit einem Mikrocontroller arbeitet, steht ein Testboard zur Verfügung, mit dem sich kleine Programmieraufgaben lösen und testen lassen. Im Anschluss werden ein eigener LED-Würfel und eine passende Steuerplatine aufgebaut. Mit Hilfe von vorgegebenen Programmbeispielen können eigene Programme geschrieben und der LED-Würfel individuell angesteuert werden.
Voraussetzung für diesen Laborversuch sind Kenntnisse der Programmierung mit C++ oder C, der Umgang mit elektronischen Bauteilen, das binäre Rechensystem und der richtige Umgang mit Laborutensilien wie Lötkolben, Messgeräten etc.
Der Versuch gliedert sich in drei Teile. Der erste Teil betrifft die Einarbeitung. Dieses Kapitel enthält alle wichtigen Informationen die für die Durchführung des Laborversuches benötigt werden. Die Einarbeitung ist als Hausaufgabe vorzubereiten.
Die Teile zwei und drei sind Versuchsteile, von denen der erste der beiden mit dem Testboard durchgeführt wird. Im letzten Teil des Laborversuchs soll ein LED-Cube gelötet werden und dieser anschließend mit Programmen bespielt werden.
2. Einarbeitung als Hausaufgabe
2.1. GrundlagenDas Herzstück des Laborversuchs ist der Mikrocontroller. Mit diesem ist es möglich, den LED-
Cube anzusteuern. Ein weit verbreiteter Mikrocontroller für kleinere Anwendungen ist der ATtiny2313 von Atmel. Er verfügt über einen 2k Speicher und 18 IO´s. Der Speicher dient im Laborversuch ausschließlich als Programmspeicher. Über die IO´s kann der Mikrocontroller angesprochen werden und nach außen kommunizieren. Die folgende Abbildung zeigt die Pinbelegung des ATtiny2313.
Da es für den LED- Cube genügt, lediglich alle Pins als Ausgänge zu definieren, wird an dieser Stelle nicht weiter auf die Bezeichnung der einzelnen Pins eingegangen. Bei Interesse können die Bezeichnungen im Datenblatt des ATtiny2313 im Anhang nachgeschlagen werden. Wie die Pins des Mikrocontrollers als Ausgänge definiert werden können, wird in späteren Programmierbeispielen erklärt.
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 4/21
Bild 2.1 Pinbelegung des ATtiny2313
Um eine Verbindung zwischen dem Mikrocontroller und dem Rechner aufzubauen, wird zunächst eine sogenannte ISP-Schnittstelle benötigt. Mit Hilfe eines ISP-Programmers können dann über die ISP-Schnittstelle die Programme vom Rechner auf den Mikrocontroller gespielt werden. Für den Schaltungsentwurf ist es nützlich, immer mit dem Mikrocontroller zu beginnen, da dieser das Zentrum der Schaltung darstellt.
ISP steht für In-System-Programming und ermöglicht das Programmieren einer Schaltung direkt am Einsatzort. Für den Laborversuch bedeutet das, dass der Mikrocontroller fest auf der Leiterplatine platziert wird und dann nachträglich problemlos über die ISP - Schnittstelle und den ISP-Programmer mit Programmen bespielt werden kann. Es ist nicht mehr notwendig, den Mikrocontroller bei jedem Bespiel aus dem System zu nehmen. Dadurch entlastet man den Mikrocontroller und die Schaltung mechanisch. Zudem lassen sich Programme so schneller testen und umändern.
Um die ISP-Schnittstelle nutzen zu können, muss ein sogenannter Programmer zwischen dem PC und der Schnittstelle eine Verbindung herstellen. Folgende Abbildung zeigt die Anordnung.
Bild 2.2 ISP Schematisch dargestellt
Im Laborversuch wird mit dem Programmer “MySmartUSB light” gearbeitet, der über eine USB Schnittstelle am Laptop problemlos den Mikrocontroller bespielen kann.
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 5/21
Bevor es an die Ausarbeitung des LED-Cubes und der Schaltplatine geht, soll zunächst mit Hilfe eines Testboards der Mikrocontroller kennengelernt werden und verstanden werden, wie dieser arbeitet. Außerdem wird die Handhabung mit der ISP-Schnittstelle erklärt, die im späteren Verlauf sehr wichtig ist.
2.2. Atmel Studio und TestboardMit dem AVR Studio können Mikrocontroller in Assembler sowie in C/C++ programmiert werden.
Das AVR Studio bietet einen eigenen Compiler, der den Quellcode in Maschinencode umwandelt. Zu Beginn der Programmierung muss lediglich der verwendete Mikrocontroller ausgewählt werden, bevor es losgehen kann. Anhand eines Beispiels soll der Umgang mit dem AVR Studio erläutert werden.
Erstellen eines Projektes mit dem AVR Studio
Falls das AVR Studio nicht bereits auf dem Rechner installiert ist, kann das Programm kostenlos von der Atmel Webseite heruntergeladen werden. Nach der Installation erscheint nach dem Starten des Programms ein Willkommens-Bildschirm. Um ein neues Projekt anzulegen, wird auf “New Projekt” geklickt. Folgende Bildschirmoberfläche ist zu sehen:
Bild 2.3 Projektbildschirm des Atmel Studios
Es wird nun das Feld “GCC C++ Executable Project” ausgewählt, und dem Projekt ein passender Name gegeben. Nach der Bestätigung des Projektnamens, wird der verwendete Mikrocontroller ausgewählt. In diesem Fall ist das der ATtiny2313.
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 6/21
Bild 2.4 Startbildschirm eines neuen Projekts
Nun kann mit der Programmierung in C oder C++ begonnen werden. Zu den benötigten Befehlen folgen später noch Erläuterungen.
Ein Programm auf den Controller übertragenBevor ein Programm auf den Controller übertragen werden kann, muss der Quellcode zunächst
mit Hilfe des Compilers auf Fehler überprüft werden. Mit der F7 Taste kann dieser ausgeführt werden.
Folgendes Bild erscheint nach dem Ausführen des Compilers:
Bild 2.5 Information des Compilers
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 7/21
Wenn das Programm fehlerfrei ist, wird in der letzten Zeile folgender Text angezeigt:
Build succeeded.===== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ======
Das Programm kann nun mit Hilfe des Programmiertools ,,mySmartAVR Programmer‘‘ auf den Mikrocontroller übertragen werden. Sollte der AVR-Programmer nicht auf dem Rechner zu finden sein, kann dieser auch problemlos im Internet unter www.myavr.de heruntergeladen werden
Um nun das fertige Programm auf den Controller zu übertragen, wird das ProgTool von MyAVR benötigt. Dieses wird unter www.myavr.de zum Download angeboten (Achtung: wird nicht der mySmartAVR Programmer der Hochschule verwendet, wird das Programm benötigt, das der Hersteller der Schnittstelle anbietet).
Wird das ProgTool zum ersten Mal verwendet, muss dieses erst konfiguriert werden. Unter dem Menüpunkt „Hardware“ muss „mySmart AVR light“ sowie der verwendete Controller ausgewählt werden(hier: ATtiny2313). Des Weiteren muss der COM Port herausgefunden werden, an dem der Programmer hängt. Dies geht wie folgt:
1. ! Gerätemanager öffnen
2. ! Den Reiter Anschlüsse öffnen
3. ! “Silicon Labs 210x USB to UART Bridge” suchen
4. ! In der Klammer hinter dem Namen steht der COM Port. Diesen müsst ihr in das vorgegebene Feld eintragen.
Damit ist die Schnittstelle fertig konfiguriert und kann verwendet werden.
Um nun ein Programm auf den Controller zu übertragen, wird der Programmer über das Kabel an die 6-polige ISP Schnittstelle auf der Platine angeschlossen. Anschließend muss im Programmiertool unter dem Menüpunkt “Brennen” das Fenster “Flash Brennen” aktiviert werden.
Das Vorgehen um Programme auf den Controller zu übertragen läuft wie folgt ab:• Kompilieren des Codes im Atmel Studio (dadurch wird die HEX Datei für den Controller
erzeugt und im Projektverzeichnis abgelegt)• HEX Code mit dem ProgTool unter “Flash brennen” auswählen• Auf den Controller brennen
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 8/21
Bild 2.6 Übertragen des Programms in das Flash (Brennen)
Die Übertragung des Programms auf den Mikrocontroller wird gestartet, indem auf den Button „brennen“ geklickt wird. Nach kurzer Zeit kommt die Rückmeldung, dass der Vorgang erfolgreich war.
Das TestboardFolgende Abbildung zeigt den Schaltplan des Testboards.
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 9/21
28.0
2.20
14 1
3:37
:45
f=1.
40 Z
:\DHB
W\S
tudi
enar
beite
n 20
14\A
tiny-
Test
boar
d_V2
\AT-
V13\
AT-V
13.s
ch (S
heet
: 1/1
)
TLLG4400
TLLG4400
TLLG4400
TLLG4400
TLLG4400
TLLG4400
TLLG4400
TLLG4400
IC2
100n
100n
1uF
10k
CON1
CON2
TLLG4400
TLLG4400
TLLG4400
TLLG4400
AB9V
1N41
48
1K5
1K5
1K5
1K5
2K7
1K5
1K5
1K5
1K5
1K5
1K5
1K5
F1
78L0
5
GND
GND
GND
CON4
CON5
CON3
L17
L16
L15
L14
L13
L12
L11
L10
ATTI
NY23
1312345678910
11 12 13 14 15 16 17 18 19 20
C1C2
C3
R1
3PO
L 123IS
P
1 3 5
2 4 6
L20
L21
L22
L23
9VANSCHLUSS+ -
D1VE
RPO
LUNG
SSCH
UTZ
R17
R16
R15
R14
R13
R12
R11
R10
R20
R21
R22
R23
FUSE
-0.2
A
IC1
GND
INO
UT
SV1
1 2 3 4 5 6 7 8 9 10
SV2
1 2 3 4 5 6 7 8 9 10
SV3
1234
Q1
+ -
Bild 2.7 Schaltplan des Testboards
Das Testboard bietet die nötige Hardware für die Programmierung des ATTiny. Es müssen sich zunächst keine Gedanken gemacht werden, wie die LEDs möglichst IO-sparend anzuschließen sind. Die folgenden Abbildung zeigen den Bestückungsplan des Testboards, sowie das Layout der Bestückungsseite.
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 10/21
28.02.2014 13:30:58 f=2.00 Z:\DHBW\Studienarbeiten 2014\Atiny-Testboard_V2\AT-V13\AT-V13.brd
1
6
9V
1
10
1
10
1 4
L17
L16
L15
L14
L13
L12
L11
L10
ATTI
NY23
13
C1C2
C3
R1
ISP
L20
L21
L22
L23
9VANSCHLUSS
D1VE
RPO
LUNG
SSCH
UTZ
R17
R16
R15
R14
R13
R12
R11
R10
R20
R21
R22
R23
FUSE
-0.2
A
IC1
SV1
SV2
SV3
Q1
Bild 2.9 Bestückungsplan des Testboards
28.02.2014 13:36:11 f=2.00 Z:\DHBW\Studienarbeiten 2014\Atiny-Testboard_V2\AT-V13\AT-V13.brd
1
6
9V
1
10
1
10
1 4
Bild 2.9 Layout der Bestückungsseite
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 11/21
Zur Stückliste gehören folgende Komponenten:
Nach dem Aufbau kann das Programmieren und der Mikrocontroller mit den ersten Programm bespielt werden. Dafür bietet Atmel mit dem AVR Studio 6 eine eigene Entwicklungsumgebung an.
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 12/21
3. Testboard aufbauen und programmieren
3.1. Programmierbeispiel: LED blinken lassenIm Folgenden wird ein einfaches Codebeispiel gezeigt, in dem es darum geht, eine LED auf
dem Testboard blinken zu lassen. Das gewonnene Verständnis des Codebeispiels dient als Grundlage für die folgenden Programmieraufgaben.123456789101112131415161718192021222324
#include <avr/io.h> //include beinhaltet //Standardparameter //der Atmel Prozessoren #define F_CPU 8000000UL //Geschwindigkeit des //Prozessors#include <util/delay.h> //Eine Erweiterung um //den Befehl //_delay_us() //nutzen zu können. int main(void){ DDRB = 255; //Port B wird als //Ausgang definiert while(1) { PORTB = 1; //PD0 ist HIGH _delay_us(500); PORTB = 0; //PD0 ist LOW _delay_us(500); } return 0;}
Der Code Schritt für Schritt erklärt:123
#include <avr/io.h> #define F_CPU 8000000UL #include <util/delay.h>
Diese drei Codezeilen sind in nahezu jedem Programm vorhanden, da sie die Standard-definitionen enthalten. “avr/io.h” enthält alle Portnamen und Speicheradressen, die für die Programmierung nötig sind. “define F_CPU” legt fest, wie schnell der CPU laufen soll, was in diesem Fall 8 MHz sind. Die 8 MHz kommen von dem nachfolgendem include “util/delay.h”, welches die Möglichkeit einer „Warten“-Funktion bringt. Damit die angegebenen Zeiten in den Funktionen stimmen, muss der Prozessor auf 8MHz getaktet werden.
1 int main(void){
Hier beginnt die Hauptschleife des Programms1 DDRB = 255;
Dieser Befehlt sorgt dafür, das Port D (oder auch PD0-PD7) als Ausgänge geschaltet sind. Das bedeutet, dass sie vom Programm auf HIGH oder LOW gesetzt werden können. Für die Ports A und B gilt diese Regel übrigens auch.1 while(1)
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 13/21
Diese Schleife sorgt dafür, dass das Programm immer wieder ausgeführt wird. Die Bedingung “while(1)” ist immer erfüllt und somit läuft die Schleife endlos weiter.! ! ! !1 PORTB = 1;
Diese Variablenzuweisung sorgt dafür, dass der Port D neu beschrieben wird. Die Zahl, die dort geschrieben wird, ist jedoch im dezimalen System geschrieben und muss immer ins Binäre umgewandelt werden. Soll beispielsweise PD0 zum Leuchten gebracht werden, ist dies der binäre Wert 1, soll PD1 zum Leuchten gebracht werden, ist dies der binäre Wert 2. Die nachfolgende Tabelle zeigt, welcher Pin bei welchem Dezimalwert angesteuert wird.
PB0 1 00000001
PB1 2 00000010
PB2 4 00000100
PB3 8 00001000
PB4 16 00010000
PB5 32 00100000
PB6 64 01000000
PB7 128 10000000
Tabelle 31: Binäre Umrechnung
Sollen nun mehrere LEDs zum Leuchten gebracht werden, so müssen die dezimalen Werte lediglich addiert werden. Für die Ports A und B gilt diese Regel auch.
3.2. Programmieraufgabe: LauflichtAus dem oben verwendeten Befehlen lässt sich ein Lauflicht ableiten. Programmieren sie ein
Lauflicht, welches den Port D herabläuft und am Ende wieder umkehrt.
Hinweise:• Bedenken sie die binären Eigenschaften von Port D• Es soll immer nur eine LED leuchten• Die Wartezeit zwischen den LED Wechseln können Sie frei wählen
3.3. Programmieraufgabe: Alle LED´s leuchten lassenLassen Sie alle LEDs leuchten. Allerdings soll immer nur eine LED tatsächlich Leuchten. Dies
erreichen Sie durch sehr schnelles hin und her schalten zwischen den LEDs.
Tipp: Ohne _delay_ms() arbeiten! Alle LEDs hintereinander aufleuchten lassen!
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 14/21
4. Lichtwürfel aufbauen und programmieren
4.1. Einführung und Bauanleitung
Einführung
Im zweiten Teil des Laborversuchs geht es um die Zusammenstellung des LED-Cubes und der Steuerplatine. Zunächst wird der Aufbau des LED-Cubes vorgestellt und eine Methode erläutert, mit der man mit nur wenigen IO´s trotzdem jede LED separat ansteuern kann. Anschließend wird der Aufbau der Steuerplatine und die verwendeten Komponenten vorgestellt. Sowohl der LED-Cube als auch die Steuerplatine werden in Eigenarbeit in kleinen Gruppen zusammengesetzt. Es folgt ein Programmbeispiel, welches das Verständnis des LED-Cubes festigt und anschließend die eigenständige Programmierung.
AufbauDer LED-Cube soll aus drei Ebenen zu je 9 LEDs aufgebaut werden. Um jede LED einzeln über
einen eigenen Port anzusteuern, wie es beim Testboard der Fall war, wären folglich 27 IOs nötig. Es gibt Mikrocontroller mit so vielen IO Schnittstellen, jedoch gibt es auch Methoden, durch eine geschickte Verdrahtung der LEDs Anschlussports zu sparen. Eine dieser Methoden ist das Multiplexing.
MultiplexingLED-Multiplexing wird verwendet, um Anschlusspins einzusparen und den Verdrahtungs-
aufwand auf einer Platine so gering wie möglich zu halten. Dabei werden die Anoden einer LED in Zeilen und die Kathoden einer LED in Ebenen verbunden. Durch Ansteuerung jeweils einer Ebene und einer Zeile lässt sich gezielt genau eine LED an bzw. ausschalten. Im Beispiel eines 3x3x3 LED-Würfels, werden nicht mehr 27 sondern nur noch 12 IOs benötigt. Drei IOs für die jeweiligen Ebenen und neun für die Zeilen. Deutlicher wird der Effekt bei größeren Dimensionen. Ein 8x8x8 Cube besteht aus 512 LEDs, über das Multiplexing werden jedoch nur 72 IOs benötigt, um jede LED separat ansteuern zu können. Sollen mehrere LEDs gleichzeitig leuchten, müssen die einzelnen LEDs schnell hintereinander geschaltet werden. Durch die Trägheit des menschlichen Auges ergibt sich für den Beobachter ab einer Frequenz von ungefähr 100 Hz ein einziges, zusammenhängendes Bild. .
Bauanleitung
Um wie beschrieben die Kathoden der LEDs zu Ebenen und die Anoden der LEDs zu Spalten zusammenzufassen, bietet es sich an, vor dem Zusammenlöten die LEDs einheitlich vorzubereiten.
Schritt 1: LEDs vorbereiten
Bereitet alle 27 LEDs wie im Bild gezeigt vor. Die Kathode zeigt nach unten, die Anode wird zweimal geknickt.
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 15/21
Bild 4.1 Vorbereitete LED
Schritt 2: Ebene löten
Nun werden jeweils neun LEDs zu einer Ebene zusammengelötet. Es ist darauf zu achten, die LEDs zügig miteinander zu verlöten, da bei zu langer Hitzebelastung die LEDs zerstört werden können. Die Anoden zeigen nach oben, die Kathoden werden miteinander verbunden. Insgesamt ergeben sich drei Ebenen.
Bild 4.2 Verlötete Ebene
Schritt 3: Ebenen zusammenlöten
Im nächsten Schritt, werden die 3 Ebenen zu einem Würfel zusammengesetzt. Dafür werden die Anoden der einzelnen Ebenen miteinander verlötet. Es empfiehlt sich, die oberste Ebene auf den Tisch zu legen, die zweite Ebene darüber zu halten und mit dem Verlöten einer Eck-LED zu beginnen.
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 16/21
Ist die erste Ecke gelötet, haben die LEDs eine gewisse Stabilität und auch der Rest lässt sich einfach verlöten.
Bild 4.3 Zusammengefügte Ebenen
Schritt 4: Einzelne Ebenen kontaktieren
Die Zeilen des LED-Cubes werden direkt an die IOs des Mikrocontrollers geführt. Um die Ebenen zu kontaktieren, müssen Kontakte von jeder Ebene auf die Platine geführt werden. Es ist von jeder Ebene mit Hilfe eines Drahtes einen Kontakt runter zur Platine zu führen und darauf zu achten, einen Kurzschluss zwischen den Ebenen zu vermeiden.
Bild 4.4 Anschlüsse an den Cube
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 17/21
Schritt 5: Funktion testen
Nachdem der LED-Cube fertig gelötet ist, empfiehlt es sich, zunächst zu testen, ob auch wirklich alle LEDs unbeschädigt sind. Dafür wird jeweils eine Ebene mit dem Minuspol und eine Spalte mit dem Pluspol des Spannungsgenerators verbunden. Um die LEDs zum Leuchten zu bringen, ist eine Spannung von ca. 2V und ein Strom von 20mA notwendig.
Schritt 6: Steuerplatine
Anhand des vorliegenden Schaltplans, soll im nächsten Schritt die Steuerplatine gelötet werden. Es empfiehlt sich zunächst den Sockel für den Mikrocontroller auf der Platine aufzubringen. Hinter die Ports PB0 bis PB7 wird jeweils ein 390 Ohm Widerstand gelötet. Dieser dient als Vorwiderstand für die LEDs. Anschließend werden die Kontakte für die 9 Säulen mit den Widerständen verbunden.
Die Säulen können direkt über die IOs des Mikrocontrollers angesteuert werden. Um die Ebenen anzusprechen, werden drei Transistoren verwendet. Hinter die Ports P4 bis P6 werden jeweils die 2,2 KOhm Vorwiderstände für die Transistoren gelötet. Die Basis wird mit dem Widerstand verbunden, der Emitter auf Masse gelegt und der Kollektor jeweils mit einer Ebene verbunden. Zum Schluss fehlt noch der Spannungsbegrenzer.
Bild 4.5 - Schaltplan für den LED-Würfel
Der 7805 wird auf der Platine befestigt und der mittlere Pin auf Masse gelegt. Links vom 7805 wird ein 100nF Keramikkondensator angebracht, rechts davon ein 1000mF Elektrolytkondensator. Hier ist darauf zu achten, dass der Elko richtig herum angeschlossen wird. Bei Verpolung des Elkos besteht Explosionsgefahr. Die beiden Kondensatoren dienen dazu, die Spannung zu glätten. Es wird ein Vorwiderstand vor den Reset PIN gelötet und die Kontakte für die Batterieclips angebracht.
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 18/21
4.2. Programmbeispiel: “Rahmen Ebene 1 blinken lassen”
1234567891011121314151617181920212223242526272829303132333435363738
#include <avr/io.h>#define F_CPU 8000000UL#include <util/delay.h>int main(void){DDRB = 255; //Die Ports B und D werden //als Ausgänge deklariertDDRD = 127;while(1){for (int i = 30; i >= 0; i--) //das erste bild wird //angezeigt { PORTB = 0; PORTD = 16; _delay_us(500); PORTB = 0; PORTD = 32; _delay_us(500); PORTB = 239; PORTD = 65; _delay_us(500); }for (int i = 30; i >= 0; i--) //das zweite bild wird //angezeigt { PORTB = 0; PORTD = 16; _delay_us(500); PORTB = 0; PORTD = 32; _delay_us(500); PORTB = 0; PORTD = 64; _delay_us(500);}}return 0;}
4.3. Programmieraufgabe (Hochzählen)Programmieren Sie den Cube so, dass jede LED einzeln nacheinander eingeschaltet wird. Die
Reihenfolge ist in diesem Fall egal. Sie werden dafür 28 Bilder benötigen. Zu Beginn sollen alle LEDs ausgeschaltet sein, zum Schluss sollen alle LEDs angeschaltet sein.
4.4. Programmieraufgabe (Schleifendurchläufe)Lassen Sie zwei beliebige Bilder nacheinander anzeigen und variieren Sie die Anzeigedauer.
Hinweis: Die Anzeigedauer hängt von den Schleifendurchläufen ab!
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 19/21
4.5. Programmieraufgabe (Speicher füllen)Probieren Sie aus, wie viele Bilder Sie mit „for“-Schleifen in Ihren Cube einspeichern können.
Überlegen Sie anschließend, wie die Anzahl der Bilder erhöht werden könnte und warum?
4.6. Freiwillige Programmieraufgabe (Abstraktion)Abstrahieren Sie die Anzeigefunktion des Würfels, sodass es nur noch eine Funktionsanzeige
gibt, die aufgerufen werden muss. Implementieren Sie anschließend einige Funktionen, die Figuren anzeigen.
Hinweis:
Für jede LED muss ein Zustand gespeichert werden, der anschließend in binäre Zahlen umgewandelt werden muss. Dies ist Aufgabe der Anzeigefunktion. Die Funktionen mit den Figuren setzen lediglich die Variablen der LEDs auf verschiedene Zustände.
Tipp:
Es reicht, boolsche Variablen zu verwenden, da diese wie die LEDs nur die Zustände „an“ und „aus“ kennen.
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 20/21
Literatur(1) D. Grafberger, M. Buchalik, Konstruktion und Ansteuerung eines LED-Cubes, Studienarbeit an
der DHBW-Stuttgart, Mai 2013
(2) AVR Webseite (MyAVR) mit Informationen zur USB-Programmierumgebung sowie über AVR Mikrocontroller: www.myavr.de
(3) ATMEL Webseite mit Datenblättern zu den Mikrocontrollern: www.atmel.com
(4) Günter Schmitt, Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie: Program-mierung in Assembler und C - Schaltungen und Anwendungen, Oldenbourg Wissen-schaftsverlag, 2010, ISBN-13: 978-3486589887
Mikrocomputertechnik - Laborübungen
D. Grafberger, M. Buchalik, J. Huning, S. Rupp, 2014 T2ELG2006.2 21/21