Mikrocontroller - Ein Anfängerleitfaden - Eine Taste zum Mikrocontroller hinzufügen und sie etwas tun lassen

Mikrocontroller - Ein Anfängerleitfaden - Hinzufügen einer Taste zum Mikrocontroller und ihn etwas tun lassen

Eine sehr einfache Möglichkeit, die Interaktion des Menschen mit dem Mikrocontroller zu ermöglichen, ist das Einfügen einer Taste in den Schaltkreis. Wir kommunizieren mit Computern mit zwei wichtigen Eingabegeräten: der Maus und der Tastatur. Eine Tastatur ist nichts weiter als eine Ansammlung von Tasten, die so angeordnet sind, dass der Benutzer (ASCII-) Zeichen in den Computer eingeben kann. Wenn Sie sich am Kopf kratzen wegen des ASCII-Teils, machen Sie sich keine Sorgen – es repräsentiert lediglich den Code für jedes Zeichen.

Zu diesem Zeitpunkt unserer Reise sollten Sie bereits Ihren Computer mit WINAVR eingerichtet (oder AVR-GCC für Linux) und in der Lage sein, Ihren Mikrocontroller zu programmieren. Sie sollten auch eine Schaltung aufgebaut haben mit einer LED, die an den Mikrocontroller angeschlossen ist. Sie haben auch die LED blinken lassen im vorherigen Tutorial.

Das Hinzufügen einer Taste oder eines Schalters zum Schaltkreis ermöglicht dem Mikrocontroller, menschliche Eingaben zu empfangen. Andere Formen der Eingabe für Mikrocontroller umfassen (sind aber nicht beschränkt auf) eine Tastatur oder eine Maus, Tasten, Schalter, Audio (über Mikrofone), Touchscreen-Displays und Digitalisierer. Es gibt natürlich viele andere Geräte, die Eingaben an einen Mikrocontroller liefern können, aber diese werden möglicherweise nicht alle durch freiwillige menschliche Handlungen aktiviert. Ich ordne diese anderen Geräte der Kategorie "Sensing" zu, da diese Geräte typischerweise Zustände oder Ereignisse erfassen und entsprechend reagieren. Einige solcher Beispiele sind Sensoren für Neigung (Beschleunigungssensoren), das Erkennen von Infrarotenergie oder die Überwachung der Temperatur.

Also, hier ist das Wesentliche zu Tasten und mechanischen Schaltern: Sie sind unvollkommen! Die beiden Familien Mechanik und Elektronik passen zusammen wie die Montagues und Capulets. Das heißt, sie passen nicht! Wenn Sie einen Knopf drücken, erwarten Sie vielleicht eine saubere elektronische Reaktion. Nun, es tut mir leid, Ihnen die schlechte Nachricht überbringen zu müssen, aber das Signal prellt oft ziemlich stark, bevor es sich auf seinen korrekten Spannungspegel einpendelt. In diesem Bild zeige ich dieses Phänomen. Wenn die Spannung vor dem Drücken der Taste auf 5 Volt eingestellt ist und dann auf Null Volt geht, wenn die Taste gedrückt wird, wird es einen "Prell"-Effekt der Spannung zwischen diesen beiden Werten geben. Warum zeigen dann nicht alle unsere Küchengeräte oder unsere Autos dieses Problem?

Wie Sie auf dem Bild sehen sollten, habe ich einen Kondensator zwischen den beiden Pins eingefügt. Dies glättet das Signal. Die Wirkung dieses Kondensators kann auf einem Oszilloskop beobachtet werden, wie im Video gezeigt. Aber wenn Sie kein eigenes Oszilloskop besitzen, müssen Sie mir einfach vertrauen. Eine andere Möglichkeit, dieses Problem zu lindern, wäre, eine Zeitverzögerung in das Programm einzufügen, unmittelbar nachdem der Mikrocontroller das erste Tastenereignis erkannt hat. Das Hinzufügen einer diskreten Komponente zu einer Schaltung zur Lösung eines solchen Elektronikproblems ist jedoch oft besser, als Code hinzuzufügen, um eine Verzögerung zu verursachen – da dieser Code eine weitere potenzielle Fehlerquelle in das Programm einführen und auch mehr Prozessorzeit zur Ausführung erfordern würde. Außerdem kann dieser Code auch zur Entwicklung anderer Probleme führen, während der Rest des Codes weiter ausgeführt wird.

Aber welchen Kondensatorwert sollten wir wählen? Dies hängt letztendlich davon ab, wie schlecht die Taste in Bezug auf dieses spezielle Problem funktioniert. Einige Tasten können ein enormes Prellverhalten zeigen, während andere nur sehr wenig aufweisen. Ein niedriger Kondensatorwert wie 1,0 nF (Nanofarad) reagiert sehr schnell, mit geringem oder gar keinem Einfluss auf das Prellen. Umgekehrt bewirkt ein höherer Kondensatorwert wie 220 nF (der immer noch ziemlich klein ist, was Kondensatoren betrifft) einen langsamen Übergang von der Start- zur Endspannung (d. h. 5 V zu 0 V). Der Übergang, der mit einer Kapazität von 220 nF zu beobachten ist, ist jedoch in der realen Welt immer noch ziemlich schnell und kann daher bei schlecht funktionierenden Tasten verwendet werden.

Sie haben vielleicht inzwischen bemerkt, dass das Breadboard etwas verändert wurde, um dem Schaltkreis ein saubereres Aussehen zu verleihen. Die vorherigen Drähte waren zu lang, und die Aufbauumgebung wurde unübersichtlich, als ich weitere Komponenten zum Schaltkreis hinzufügte. Deshalb war eine Neugestaltung des Breadboards angebracht, also habe ich ein zweites Breadboard an das Ende des ersten geklemmt. Aber Sie fragen sich vielleicht – warum habe ich das getan, wenn am anderen Ende noch genügend Verbindungen vorhanden waren? Nun, ich habe es aus Gründen der Sauberkeit getan, und mir gefiel auch, wo der Mikrocontroller positioniert war. Sie können vielleicht erkennen, dass ich ihn mit den Zahlen ausgerichtet habe, so dass ich nicht ständig Pins zählen muss – ich lasse mir einfach die Breadboard-Nummerierung anzeigen, wo sich jeder Pin am MCU befindet. Ich habe auch alle positiven (+) Schienen auf beiden Platinen miteinander verbunden und dasselbe mit allen negativen (-) Schienen getan. Dadurch habe ich VCC oder GND überall auf dem Breadboard in der Nähe.

Wie programmieren wir also den ATmega32 Mikrocontroller (oder einen anderen MCU, den Sie für dieses Experiment verwenden), um den neuen Knopf zu nutzen? Nun, das ist wirklich ganz einfach! Wir müssen nur zwei Initialisierungszeilen direkt vor der Endlosschleife und einen einzelnen Bedingungsblock innerhalb der Schleife hinzufügen. Die beiden Initialisierungszeilen, die vor der Schleife hinzugefügt werden, enthalten eine Anweisung, um PINB1 für die Eingabe einzustellen, indem ihm eine "0" zugewiesen wird, wie folgt:

DDRB &= ~(1 << PINB1);

Wir werden auch Pin B1 auf "high" setzen, was bedeutet, dass der Pin 5 Volt anzeigt, bis die Taste gedrückt wird; zu diesem Zeitpunkt zeigt der Pin null Volt an. Um den Pin auf eine hohe Spannung von 5 Volt zu setzen, fügen wir diese Codezeile hinzu:

PORTB |= 1 << PINB1;

Innerhalb des Programms muss eine Entscheidung getroffen werden: eine Entscheidung, ob ein Code ausgeführt werden soll, wenn die Taste gedrückt wird, oder ein anderer Code ausgeführt werden soll, wenn die Taste nicht gedrückt wird. Diese Aufgabe hat die Form einer Bedingungsanweisung namens "if else"-Anweisung. Sie tut GENAU das, was sie sagt. Genau wie das englische Äquivalent... if (die Taste ist gedrückt), springe auf und ab, else stehe auf dem Kopf. Die Aktion "springe auf und ab" findet statt, während die Taste gedrückt wird. Aber während die Taste nicht gedrückt wird, findet die andere Aktion "stehe auf dem Kopf" statt. Der if-Anweisungs-Code:

if (bit_is_clear(PINB, 1))

spezifiziert einen Test für eine Bedingung, die innerhalb der Klammern angegeben ist. Der Name "bit_is_clear" repräsentiert eine Funktion, die zwei Argumente entgegennimmt. In diesem Fall ist das erste Argument PINB, welches den Satz von Pins beschreibt, den wir spezifizieren. Das zweite Argument repräsentiert, welchen Pin wir überprüfen, und in diesem Fall geht es um Pin #1 in der Menge.

Sie fragen sich vielleicht, welche Art von Dingen wir in den Codeblock einfügen können, der von der "if"-Bedingung gesteuert wird? Das hängt alles davon ab, was Ihr Programm (und die Schaltung) tun soll. In diesem Fall, um zu zeigen, dass dieser Knopf etwas bewirkt und funktioniert, lasse ich die LED langsam (alle 100 ms) blinken, wenn der Knopf nicht gedrückt ist, und schneller (alle 10 ms) blinken, wenn er gedrückt ist.

Hier sind die Änderungen, die am vorherigen LED-Blinkprogramm vorgenommen wurden:

#include
#include

int main(void)
{
DDRB |= 1 << PINB0;
DDRB &= ~(1 << PINB1);
PORTB |= 1 << PINB1;


while (1)
{
PORTB ^= 1 << PINB0;
if (bit_is_clear(PINB, 1))
{
_delay_ms(10); //Schnell
}
else
{

_delay_ms(100); //Langsam, von vorher
}
}
}

Das war's! Es ist sehr wenig Programmierung erforderlich, um einen Taster und eine LED zu verwenden und Dinge blinken zu lassen!

Zurück zum Blog

Hinterlasse einen Kommentar

Bitte beachte, dass Kommentare vor der Veröffentlichung freigegeben werden müssen.