| Lerneinheit 1: Ansprechen von LEDs auf dem PicKit1 |
| Sonntag, den 07. März 2010 um 15:10 Uhr | |||||||||||||||||||||||||||||||||||
1 EinleitungMit dem Mikrokontroller können direkt auf dem Board 8 Leuchtdioden (LED's) angesprochen werden. Außerdem kann ein Taster ausgewertet werden und ein AnalogDigitalWandler-Eingang (ADC). Der Spannungswert am Wandlereingang kann durch einen Regelwiderstand manuell verändert werden. Es werden alle Mikrocontroller-Pins über eine Buchsenleiste nach außen geführt. 1.1 Strukturplan
1.2 Genaueres zum Anschluss der Dioden auf dem PICkit™1 Entwicklerboard
Eine LED leuchtet, wenn eine geeignete Spannung (bspw. 1,73V) anliegt, hierbei muss auf die Polung geachtet werden. Bei richtiger Polung fließt ein Strom und die LED leuchtet, bei falscher Polung fließt kein Strom. Die LED leuchtet in diesem Falle nicht. Die Widerstände sind so gewählt, dass an den LED's eine geeignete Spannung anliegt. GP1, GP2, GP4 und GP5 repräsentieren jeweils Bit 1, 2, 4 und 5 im Register GPIO was auch noch einmal in der unten gezeigten Registertabelle deutlich wird. Soll beispielsweise die LED D0 leuchten, dann müssen am Ausgang GP4 5V (logisch 1) anstehen und der Pin GP5 muss auf logisch 0 gesetzt werden, alle anderen relevanten Pins müssen hochohmig sein. Für die PIC™ Programmierung ist der jeweilige Schaltplan (siehe Abbildung rechts) der zu programmierenden Steuerung unabdingbar und sollte zumindest bei Anfängern immer griffbereit liegen.
2 Programmierung des PIC™2.1 Programm 0 (Das Grundprogramm)Das Grundprogramm besteht nur aus wenigen Zeilen und dient als Grundpfeiler der eigentlichen Anwendung. In ihm wird das CONFIG-Register initialisiert. Die Einstellungen sollen hier nicht weiter problematisiert werden. Nähere Angaben lassen sich dem Datenblatt vom PIC™ entnehmen. Beispielsweise wird der interne Oszillator ausgewählt usw. Mit einem Semikolon wird ein Kommentar eingeleitet. Die Assembleranweisung #include bindet ein weiteres Assemblerprogramm ein. In dieser Datei p12f675.inc werden eine Reihe von Definitionen gegeben, so dass wir Register unter ihrem Namen einfügen können. Quelltext:
2.2 Ansprechen der Leuchtdioden auf dem PICkit™12.2.1 EinleitungDas Programm wird schrittweise entwickelt. Es wird auf die Informationen und Abbildung aus 1.2 (LED-Netz) und Artikel "PIC™ 12F675- > 2. Die Speicherverteilung" zurückgegriffen. Außerdem werden die genutzten Assembleranweisungen näher erläutert. Um LED D0 auf dem Board ansprechen zu können, müssen die Pins GP1, GP2, GP4 und GP5 geeignet konfiguriert werden. GP4 und GP5 werden als digitale Ausgangspins konfiguriert, GP1 und GP2 müssen hochohmig sein, d.h. diese Pins werden als Eingabepins konfiguriert. Programmtechnisch heißt dies, dass entsprechende Konfigurationsspeicher verändert werden. AN0 ist (s. Strukturbild) auf dem PICkit™1 der analoge Eingang, also ist hier GP0 nicht verfügbar, GP3 ist für den Taster vorgesehen, Dieses PIN ist fest als Eingabepin voreingestellt. Speicherbereiche werden häufig auch als Register bezeichnet. In der folgenden Darstellung wird i. d. R. die Bezeichnung Register verwendet. 2.2.2 Konfiguration der Pins2.2.2.1 VorüberlegungenDas Ein- bzw. Ausgabewort wird mit Hilfe von Register GPIO bestimmt. 2.2.2.2 Betroffene Register
2.2.2.3 Welche Assembleranweisungen benötigen wir für das erste Programm?Alle Anweisungen, welche in dem ersten Programm (ansprechen einer LED) benötigt werden, sind in der nachfolgenden Tabelle nocheinmal veranschaulicht. Das Simikolon ';' leitet einen Kommentar ein, d.h. alles was nach ihm in der selben Zeile steht wird von dem Compiler nicht mit interpretiert. Anmerkung: Es ist sehr hilfreich wenn alle Programme schon bei der Entwicklung vernünftig kommentiert werden bzw. der Sinn der einzelnen Anweisungen kurz erläutert wird. Bei nicht gut kommentierten Programmen, gerade in Sprachen mit einer niedrigeren Abstraktionsstufe (wie Assembler), wird es zu einem späteren Zeitpunkt sehr schwer nachzuvollziehen was man sich ursprünglich dabei gedacht hat!
2.2.3 Quellcode (Programm1_1: Ansprechen einer LED auf dem PICkit™1)
2.2.4 Übungsaufgabe
2.2.5 Weitere Allgemeine AnmerkungenJeder Prozessor verfügt über einen Programmschrittzähler. Die Programmschritte werden nacheinander abgearbeitet, d.h., dass der Programmschrittzähler abhängig vom Taktgeber jeweils um 1 erhöht wird, es sei denn, dass wir gezielt den Programmschrittzähler verändern. Hierfür gibt es ebenfalls Assembleranweisungen. Im Programm 1 wird dieser Zähler nicht von uns beeinflusst. Der Zähler zählt als bis zum 1024 Speicherplatz und fängt anschließend wieder bei 0 an. Die Assemblerbefehle werden also immer wieder bei jedem Durchlauf erneut durchgeführt. Wer sich dies verdeulichen will, sollte mal das Simulationstool MPLAB SIM ausprobieren (s. unter Menüeintrag „Debugger“ in MPLAB). Wollen wir vermeiden, dass immer wieder erneut die Befehle durchgeführt werden, können wir eine Leerschleife (s.u.) einfügen. Es sind hierzu folgende Schritte nötig:
Das für uns sichtbare Ergebnis ist immer noch dasselbe. Sehen wir mit dem Debugger die Programmabarbeitung an, so stellen wir fest, dass der Programmzeiger von goto zur Marke ab_hier springt. NOP steht für No Operation. Es handelt sich hier um eine Leeranweisung. Diese muss im Beispiel hier nicht unbedingt stehen. Allerdings würden wir dann im Simulationsprogramm nicht sehen, dass der Programmzeiger immer hin- und herspringt. Beispiel:
Wird „Reset“ gedrückt, so geht das Simulationsprogramm zum Anfang des Assemblerprogrammes. Dies wird durch den grünen Pfeil deutlich, er zeigt dann auf den Befehl bcf ....
|



