Eine sehr einfach und leicht für menschliche Interaktion mit dem Mikrocontroller bieten lässt sich auf Tastendruck in den Stromkreis einfügen. Wir kommunizieren mit Computern über zwei wichtigsten Eingabegeräte: Maus und Tastatur. Eine Tastatur ist nichts anderes als eine Reihe von Tasten gelegt, um dem Benutzer erlauben, Eingabezeichen (ASCII) an den Computer. Wenn Sie sind auf dem ASCII-Teil am Kopf kratzen, keine Sorge – stellt nur den Code für jeden Charakter dar.
Zu diesem Zeitpunkt auf unserer Reise sollten Sie schon Setup Ihren Computer mit WINAVR (oder AVR-GCC für Linux) und in der Lage, Ihre Mikrocontroller zu programmieren. Sie sollten auch eine Schaltung aufgebaut mit einer LED an den Mikrocontroller angeschlossen haben. Sie haben auch die LED blinkt im vorherigen Tutorial.
Hinzufügen eine Schaltfläche oder einen Schalter, um die Schaltung ermöglicht den Mikrocontroller menschliches Zutun zu erhalten. Andere Formen der Eingabe für Mikrocontroller umfassen (sind aber sind nicht beschränkt auf) eine Tastatur oder eine Maus, Taster, Schalter, audio (über Mikrofon), Touch-Screen-Displays und Digitizer. Natürlich gibt es viele andere Geräte, die Beiträge zu einem Mikrocontroller liefern können, aber diese können nicht alle menschlichen Freiwilligkeit aktiviert werden. Ich legen diese andere Geräte in Kategorie "Fernerkundung", wie diese Geräte in der Regel Bedingungen oder Ereignisse Sinn und entsprechend zu reagieren. Ein paar solcher Beispiele umfassen Sensoren für Tilt (Beschleunigungssensoren), Erkennung von Infrarotenergie oder Temperaturüberwachung.
So, hier ist das dünne auf Tasten und mechanische Schalter: sie sind unvollkommen! Die beiden Familien von Mechanik und Elektronik gehören zusammen wie die Montagues und Capulets. Das heißt, sie nicht! Wenn du eine Taste drückst, erwarten Sie eine saubere Antwort elektronisch. Gut, springt tut mir leid, Überbringer von schlechten Nachrichten, aber das Signal oft einiges bevor es auf die richtige Spannung Stufe erledigt. In diesem Bild zeige ich dieses Phänomen. Wenn die Spannung auf 5 Volt eingestellt ist, bevor die Taste gedrückt wird und geht dann auf Null Volt, wenn die Taste gedrückt wird, werden eine "springenden" Wirkung der Spannung zwischen diesen beiden Werten. Also warum werden nicht alle unsere Küchengeräte oder weisen unsere Autos dieses Problem?
Wie Sie im Bild sehen können, habe ich einen Kondensator zwischen die beiden Bolzen eingefügt. Dies wird das Signal zu glätten. Die Wirkung dieser Kondensator kann auf einem Oszilloskop gesehen werden, wie im Video gezeigt. Aber wenn du ein Oszilloskop eigene hast, dann werden nur musst du mir vertrauen. Anders könnten wir dieses Problem beheben ist das Hinzufügen eine zeitlichen Verzögerung in das Programm kurz nach der Mikrocontroller das ersten Knopf-Presse-Event spürt. Aber das Hinzufügen einer diskreten Komponente an einen Stromkreis, so eine Elektronik-Problem zu lösen ist oft ein besseres als das Hinzufügen von Code zu verzögern – wie dieser Code eine weitere mögliche Quelle eines Fehlers ins Programm führt und auch mehr Prozessorzeit erfordert ausführen. Kann zusätzliche, diesen Code auch in der Entwicklung von anderen Problemen führen wie der Rest des Codes wird weiterhin ausgeführt.
Aber welchen Wert Kondensator sollten wir wählen? Dies hängt letztlich wie schlecht die Schaltfläche bezüglich dieses Problems führt. Einige Tasten können eine enorme springende Verhalten anzeigen, aber andere haben sehr wenig. Ein niedrigen Kondensator Wert wie 1.0nF (Nanofarads) reagiert sehr schnell, mit wenig oder keinen Effekt auf das Prellen. Dagegen ein höhere Kondensator Wert wie 220nF (die immer noch ziemlich klein in Bezug auf Kondensatoren) einen langsamen Übergang vom Ausgangspunkt der Endung Spannung bieten wird (d.h. 5v auf 0v). Der Übergang mit einer Kapazität 220nF gesehen ist aber immer noch ziemlich schnell im realen Sinn und kann somit auf leistungsschwachen Schaltflächen verwendet werden.
Sie könnte durch bemerkt haben, nun da das Steckbrett etwas, um der Schaltung ein sauberer aussehen geändert hat. Die bisherigen Kabel waren zu lang, und die Buildumgebung gestartet immer unordentlich, wie ich die Schaltung weitere Komponenten hinzugefügt. Daher war ein Re-design von dem Steckbrett in Ordnung, so dass ich eine zweite Steckbrett bis zum Ende der ersten schnappte. Aber Sie könnten fragen--warum ich das gäbe es ausreichende Bindungen an das andere Ende? Nun, ich tat es für Sauberkeit, und ich mochte auch, wo der Mikrocontroller positioniert wurde. Sie möglicherweise in der Lage zu sagen, dass ich es mit den Zahlen so ausgerichtet habe, dass brauche ich nicht zu Pins aller Zeiten--zählen lasse ich einfach die Steckbrett-Nummerierung, die mir sagen, wo jeder Pin auf der MCU. Ich auch all die positiven (+) Schienen auf beiden Boards zusammengebunden, und Tat das gleiche für alle der Schienen sowie Negative (-). Dies ermöglicht mir, VCC oder GND schließen, überall auf dem Steckbrett zu haben.
Also dann, wie programmieren wir den ATmega32 Mikrocontroller (oder anderen MCU, die Sie zu diesem Experiment anwenden können) zu verwenden der Schaltfläche neu? Nun ist es wirklich ganz einfach! Wir haben nur zwei Initialisierung Zeilen kurz vor der Endlosschleife und eine einzelne Bedingung Block innerhalb der Schleife hinzufügen. Die beiden Initialisierung Zeilen hinzugefügt, bevor die Schleife gehören eine Anweisung zur PINB1 für die Eingabe festlegen, indem sie eine "0" zugewiesen wie folgt:
DDRB &= ~(1 << PINB1);
Wir setzen auch Pin B1 "hoch", was bedeutet, dass die Pin 5 Volt gelesen wird, bis die Taste gedrückt wird; zu welchem Zeitpunkt wird die Pin Null Volt lesen. Um den Stift auf eine hohe Spannung von 5 Volt einzustellen, fügen wir diese Codezeile:
PORTB |= 1 << PINB1;
Im Rahmen des Programms muss eine Entscheidung: eine Entscheidung zur Code ausgeführt, wenn die Taste gedrückt wird, oder einige andere Code ausführen, wenn die Taste nicht gedrückt ist. Diese Aufgabe wird in Form von einer bedingten Anweisung bezeichnet eine "Wenn andere" Erklärung. Doch was genau sagt. Genau wie das englische Äquivalent... wenn (die Taste gedrückt wird), rauf und runter springen, sonst stehen auf dem Kopf. die Aktion "springen" rauf und runter"geschieht, solange die Taste gedrückt wird. Aber solange die Taste nicht gedrückt ist, wird die andere Aktion "Stand auf dem Kopf" geschehen. If Anweisung Code:
if (bit_is_clear(PINB, 1))
gibt einen Test für eine Bedingung in der Klammer angegeben. Der Name "Bit_is_clear" ist eine Funktion, die zwei Argumente akzeptiert. In diesem Fall ist das erste Argument PINB, beschreibt den Satz von Pins, die wir angeben. Das zweite Argument ist die Pin, die wir prüfen und in diesem Fall befassen wir uns mit Pin #1 in der Gruppe.
Sie Fragen sich vielleicht, welche Art von Dingen, die wir in den Codeblock gesteuert durch die "if" Bedingung umsetzen können? Das hängt alles was Sie wollen Ihr Programm (und -Schaltung) zu tun. In diesem Fall als eine Möglichkeit zu zeigen, dass diese Taste etwas tut und arbeitet, habe ich die LED blinkt langsam (alle 100 ms), während die Taste nicht gedrückt ist, und blinkt schneller (alle 10ms) gedrückt.
Hier sind die Änderungen zum vorherigen blinkenden LED-Programm:
< avr/io.h > #include #include < util/delay.h > Int main(void) {DDRB | = 1 << PINB0; DDRB & = ~ (1 << PINB1); PORTB | = 1 << PINB1; während (1) {PORTB ^ = 1 << PINB0; #include <avr/io.h>#include <util/delay.h> 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); //Fast} else { _delay_ms(100); //Slow, from previous } }}
Das ist es! Es gibt sehr wenig Programmierung erforderlich, um eine Schaltfläche zu verwenden, blinken der LED und machen Dinge!