- Erforderliches Material:
- Schaltplan:
- Programmiererklärung:
- Hardware-Setup für blinkende LED-Sequenz:
- Hochladen und Arbeiten:
Dies ist das zweite Tutorial einer Sequenz von Tutorials, in denen wir das MSP430G2 LaunchPad von Texas Instruments mithilfe der Energia IDE lernen. Im letzten Blinky LED-Tutorial haben wir uns mit dem LaunchPad Development Board und der Energia IDE vertraut gemacht. Außerdem haben wir unser erstes Programm hochgeladen, bei dem die integrierte LED in regelmäßigen Abständen blinkt.
In diesem Tutorial erfahren Sie, wie Sie mit der Option Digitales Lesen und Digitales Schreiben den Status eines Eingabegeräts wie eines Schalters lesen und mehrere Ausgänge wie LEDs steuern können. Am Ende dieses Tutorials hätten Sie gelernt, mit digitalen Ein- und Ausgängen zu arbeiten, mit denen viele digitale Sensoren wie IR-Sensor, PIR-Sensor usw. verbunden und Ausgänge wie LED, Summer usw. ein- oder ausgeschaltet werden können. Klingt interessant Recht!!? Lass uns anfangen.
Erforderliches Material:
- MSP430G2 LaunchPad
- LED beliebiger Farbe - 8
- Schalter - 2
- 1k Widerstand - 8
- Kabel anschließen
Schaltplan:
In unserem vorherigen Tutorial haben wir festgestellt, dass die Startrampe selbst mit zwei LEDs und einem Schalter auf der Platine ausgestattet ist. In diesem Tutorial benötigen wir jedoch mehr als das, da wir planen, acht LED-Lichter nacheinander zu leuchten, wenn eine Taste gedrückt wird. Wir werden auch die Reihenfolge ändern, wenn eine andere Taste gedrückt wird, um sie interessant zu machen. Wir müssen also eine Schaltung mit 8 LED-Leuchten und zwei Schaltern bauen, den vollständigen Schaltplan finden Sie unten.
Hier sind die 8 LEDs die Ausgänge und die beiden Schalter sind die Eingänge. Wir können diese an jeden E / A-Pin auf der Platine anschließen, aber ich habe die LRDs von Pin P1.0 an P2.1 angeschlossen und 1 und 2 wie oben gezeigt an Pin P2.4 bzw. P2.3 geschaltet.
Alle Kathodenstifte der LED sind mit Masse verbunden, und der Anodenstift ist über einen Widerstand mit den E / A-Stiften verbunden. Dieser Widerstand wird als Strombegrenzungswiderstand bezeichnet. Dieser Widerstand ist für einen MSP430 nicht obligatorisch, da der maximale Strom, den der E / A-Pin liefern kann, nur 6 mA beträgt und die Spannung am Pin nur 3,6 V beträgt. Es ist jedoch eine gute Praxis, sie zu verwenden. Wenn einer dieser digitalen Pins hoch geht, leuchtet die entsprechende LED auf. Wenn Sie sich an das LED-Programm der letzten Tutorials erinnern können, werden Sie sich daran erinnern, dass digitalWrite (LED_pin_name, HIGH) die LED zum Leuchten bringt und digitalWrite (LED_pin_name, LOW) die LED ausschaltet .
Die Schalter sind das Eingabegerät, ein Ende des Schalters ist mit der Erdungsklemme verbunden und das andere Ende ist mit den digitalen Pins P2.3 und P2.4 verbunden. Dies bedeutet, dass bei jedem Drücken des Schalters der E / A-Pin (2.3 oder 2.4) geerdet wird und frei bleibt, wenn die Taste nicht gedrückt wird. Lassen Sie uns sehen, wie wir diese Anordnung beim Programmieren verwenden können.
Programmiererklärung:
Das Programm muss so geschrieben werden, dass die 8-LED nacheinander gesteuert wird, wenn der Schalter 1 gedrückt wird, und wenn der Schalter 2 gedrückt wird, muss die Reihenfolge geändert werden. Das vollständige Programm und das Demonstrationsvideo finden Sie unten auf dieser Seite. Weiter unten werde ich das Programm Zeile für Zeile erklären, damit Sie es leicht verstehen können.
Wie immer sollten wir mit der Funktion void setup () beginnen , in der wir die von uns verwendeten Pins als Eingangs- oder Ausgangspin deklarieren würden. In unserem Programm werden die 8 LED-Pins ausgegeben und die 2 Schalter sind Eingänge. Diese 8 LEDs sind von P1.0 bis P2.1 angeschlossen, was Pin 2 bis 9 auf der Platine ist. Dann werden die Schalter mit Pin P2.3 und Pin 2.4 verbunden, die Pin Nummer 11 bzw. 12 sind. Deshalb haben wir Folgendes in void setup () deklariert
void setup () {for (int i = 2; i <= 9; i ++) {pinMode (i, OUTPUT); } for (int i = 2; i <= 9; i ++) {digitalWrite (i, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }}
Wie wir wissen, deklariert die Funktion pinMode () den Pin als ausgegeben oder eingegeben, und die Funktion digitalWrite () macht ihn hoch (EIN) oder niedrig (AUS). Wir haben eine for- Schleife verwendet, um diese Deklaration zu erstellen und die Anzahl der Zeilen zu verringern. Die Variable "i" wird in der for- Schleife von 2 auf 9 erhöht, und für jedes Inkrement wird die darin enthaltene Funktion ausgeführt. Eine andere Sache, die Sie verwirren könnte, ist der Begriff " INPUT_PULLUP ". Ein Pin kann durch einfaches Aufrufen der Funktion pinMode (Pin_name, INPUT) als Eingabe deklariert werden. Hier haben wir jedoch ein INPUT_PULLUP anstelle eines INPUT verwendet und beide haben eine merkliche Änderung.
Wenn wir Mikrocontroller-Pins verwenden, sollte der Pin entweder mit Low oder High verbunden sein. In diesem Fall sind die Stifte 11 und 12 mit dem Schalter verbunden, der beim Drücken mit Masse verbunden wird. Wenn der Schalter jedoch nicht gedrückt wird, ist der Pin mit nichts verbunden. Dieser Zustand wird als schwebender Pin bezeichnet und ist für Mikrocontroller schlecht. Um dies zu vermeiden, verwenden wir entweder einen Pull-Up- oder Pull-Down-Widerstand, um den Pin in einem Zustand zu halten, in dem er schwebt. Im MSP430G2553-Mikrocontroller verfügen die E / A-Pins über einen eingebauten Pull-up-Widerstand. Um dies zu nutzen, müssen wir während der Deklaration nur INPUT_PULLUP anstelle von INPUT aufrufen, wie wir es oben getan haben.
Lassen Sie uns nun in die Funktion void loop () eintreten. Was auch immer in dieser Funktion geschrieben ist, wird für immer ausgeführt. Der erste Schritt in unserem Programm besteht darin, zu überprüfen, ob der Schalter gedrückt ist, und wenn gedrückt, sollten wir die LEDs nacheinander blinken lassen. Um zu überprüfen, ob die Taste gedrückt wurde, wird die folgende Zeile verwendet
if (digitalRead (12) == LOW)
Hier ist die neue Funktion die Funktion digitalRead () . Diese Funktion liest den Status eines digitalen Pins und gibt HIGH (1) zurück, wenn der Pin Spannung erhält, und gibt Low LOW (0) zurück, wenn der Pin geerdet ist. In unserer Hardware wird der Pin nur geerdet, wenn wir den Knopf drücken, andernfalls ist er hoch, da wir einen Pull-up-Widerstand verwendet haben. Wir verwenden also die if- Anweisung, um zu überprüfen, ob die Schaltfläche gedrückt wurde.
Sobald der Knopf gedrückt wird, gelangen wir in die Endlosschleife while (1) . Hier fangen wir an, die LEDs nacheinander zu blinken. Eine Endlos-while-Schleife wird unten gezeigt, und alles, was in der Schleife geschrieben ist, läuft für immer bis zu einer Pause. Anweisung wird verwendet.
whiel (1) {}
Im Unendlichen prüfen wir den Status des zweiten Schalters, der an Pin 11 angeschlossen ist.
Wenn dieser Schalter gedrückt wird, blinken wir die LED in einer bestimmten Reihenfolge, andernfalls blinken wir sie in einer anderen Reihenfolge.
if (digitalRead (11) == LOW) {für (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); Verzögerung (100); } für (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }}
Um die LED nacheinander zu blinken, verwenden wir erneut die for- Schleife. Diesmal verwenden wir jedoch eine kleine Verzögerung von 100 Millisekunden mit der Funktion delay (100) , damit wir feststellen können, dass die LED hoch wird. Um jeweils nur eine LED zum Leuchten zu bringen, verwenden wir auch eine andere for- Schleife, um alle LEDs auszuschalten. Also schalten wir eine LED-Wartezeit für einige Zeit ein und dann alle LEDs aus, erhöhen dann den Zählwert, schalten die LED für einige Zeit ein und der Zyklus wird fortgesetzt. Dies alles geschieht jedoch, solange der zweite Schalter nicht gedrückt wird.
Wenn der zweite Schalter gedrückt wird, ändern wir die Reihenfolge. Das Programm entspricht in etwa der Reihenfolge, in der die LED eingeschaltet ist. Die folgenden Linien versuchen, einen Blick darauf zu werfen und herauszufinden, was geändert wurde.
sonst {für (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); Verzögerung (100); } für (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }}
Ja, die for- Schleife wurde geändert. Früher haben wir die LED von Nummer 2 bis 9 aufleuchten lassen. Jetzt beginnen wir bei Nummer 9 und verringern sie bis auf 2. Auf diese Weise können wir feststellen, ob der Schalter gedrückt ist oder nicht.
Hardware-Setup für blinkende LED-Sequenz:
Okay genug von all dem Theorie- und Softwareteil. Lassen Sie uns einige Komponenten besorgen und sehen, wie dieses Programm in Aktion aussieht. Die Schaltung ist sehr einfach und kann daher leicht auf einem Steckbrett aufgebaut werden. Aber ich habe die LED gelötet und die Perf-Platine eingeschaltet, damit sie ordentlich aussieht. Die Perf-Platine, die ich gelötet habe, ist unten abgebildet.
Wie Sie sehen können, sind die Ausgangspins der LED und der Schalter als Anschlussstifte herausgenommen. Jetzt verwenden wir die Buchsen von Buchse zu Buchse, um die LEDs und Schalter an die MSP430 LaunchPad-Karte anzuschließen, wie in der folgenden Abbildung gezeigt.
Hochladen und Arbeiten:
Wenn Sie mit der Hardware fertig sind, schließen Sie einfach Ihre MSP430-Karte an Ihren Computer an, öffnen Sie die Energia IDE und verwenden Sie das am Ende dieser Seite angegebene Programm. Stellen Sie sicher, dass die richtige Karte und der richtige COM-Anschluss in der Energia IDE ausgewählt sind, und klicken Sie auf die Schaltfläche Hochladen. Das Programm sollte erfolgreich kompiliert werden und nach dem Hochladen wird "Done Uploading" angezeigt.
Drücken Sie nun die Taste 1 auf der Platine und die LED sollte wie unten gezeigt nacheinander aufleuchten
Sie können auch die zweite Taste gedrückt halten, um zu überprüfen, ob die Reihenfolge geändert wird. Die vollständige Arbeitsweise des Projekts ist im folgenden Video dargestellt. Wenn Sie mit den Ergebnissen zufrieden sind, können Sie versuchen, einige Änderungen am Code vorzunehmen, z. B. die Verzögerungszeit zu ändern, die Reihenfolge zu ändern usw. Dies hilft Ihnen, besser zu lernen und zu verstehen.
Ich hoffe, Sie haben das Tutorial verstanden und etwas Nützliches damit gelernt. Wenn Sie auf ein Problem gestoßen sind, können Sie die Frage gerne im Kommentarbereich posten oder die Foren nutzen. Treffen wir uns in einem anderen Tutorial, in dem wir lernen, wie man analoge Spannungen mit unserer MSP30-Startrampe liest.