Was muss ich tun, um einen Digitaleingang (Taster) am ATmega16 auszulesen ? Muss ich Pullup-Widerstände aktivieren oder kann ich einen 10-kOhm-Widerstand verwenden? Was wäre ein einfacher Code? Nur ein einfaches "Schalten Sie die LED ein, wenn sie gedrückt wird".
Gibt es ein Anfänger-Tutorial? Ich habe versucht zu googeln und AVR Freaks , aber alles entwickelt sich zu einem Kampf und ich bekomme keine Antwort. Ich habe wirklich keine Tutorials zu diesem Thema gefunden. Tonnenweise spezifische Dinge, aber nichts einfaches an meinem AVR- Mikrocontroller ...
Antworten:
Brasilianische Grüße!
Zunächst einmal danke Joby für dein Beispiel. Zweitens hat sein Beispiel nur einen kleinen Fehler. Die Nummer 0x20 ist nicht korrekt. Es sollte 0x04 sein. Außerdem würde ich nur als Vorschlag keine hexadezimalen Zahlen wie 0xFB, 0x20 oder 0x04 im Code verwenden. Ich würde vorschlagen, die PIN-Port-Definitionen in der Datei io.h und andere zu verwenden, auf die in der Header-Datei verwiesen wird. Ich habe das Beispiel von Joby unten mit einigen Kommentaren für die Anfänger umgeschrieben.
/ *
Kommentare für Anfänger
Kommentar Nr. 1: (1 << PD2) erzeugt die Binärzahl 00000100. Die Operation "~" kippt alle Ziffern, dh die Binärzahl ist jetzt 11111011. Schließlich wendet das & = das logische "AND" zwischen DDRD und 11111011 an und das Ergebnis wird erneut platziert im DDRD-Speicher. Hinweis: Der Operator "AND" vergleicht jedes Bit im DDRD-Speicher mit der obigen Binärzahl. Wenn das Bit in DDRD 0 ist und das Bit in der Binärdatei an derselben Bite-Position 1 ist, ist das resultierende Bit 0, wenn die DDRD 1 ist und das Bit in der Binärdatei 1 ist, ist das resultierende Bit 1, und wenn das Bit in der DDRD ist 1 oder 0 und das Bit in der Binärdatei ist 0, dann ist das resultierende Bit immer 0. Zusammenfassend ändert der Befehl DDRD & = ~ (1 << PD2) nur das Bit PD2 auf Null und lässt die anderen Einsen (Nullen oder Einsen) unberührt. Es scheint ein bisschen kompliziert zu sein, aber nachdem Sie sich daran gewöhnt haben, ist es die beste Möglichkeit, ein bisschen in einem Biss zu ändern, ohne die anderen Teile zu ändern.
Kommentar Nr. 2 : (1 << PD2) erzeugt die Binärdatei 00000100. Mit dem Befehl "PIND & 0000100" wird unter Verwendung der in Kommentar Nr. 1 beschriebenen Logik "AND" nur geprüft, ob die PIND2 (unser Eingangs-Pin, an dem der Taster angeschlossen ist) zu) ist auf hoch gesetzt oder nicht. Alle anderen Pins sind FALSE, da die Binärbits auf 0 gesetzt sind, und da das Binärbit # 2 auf 1 gesetzt ist, ist die IF-Anweisung nur dann TRUE, wenn der PD2-Eingang auf High gesetzt ist, oder FALSE, wenn der PD2-Eingang auf 0 gesetzt ist auf niedrig setzen.
Kommentar Nr. 3 : Gemäß der in Kommentar Nr. 1 erläuterten Logik setzt dieser Befehl den Ausgangspin PINB2 in Port PORTB auf Hochspannung. Wenn Ihre LED korrekt mit einem Widerstand von ~ 300 Ohm an diesen Pin-Port angeschlossen ist und dieser Widerstand mit Masse verbunden ist, sollte die LED aufleuchten.
Kommentar Nr. 4 : Die LED sollte aus den gleichen Gründen, die in den vorherigen Kommentaren erläutert wurden, erlöschen.
Schlussbetrachtungen:
a) Um Spannungsschwankungen im Eingangspin PD2 zu vermeiden, wenn der Druckknopf nicht gedrückt wird (offener Stromkreis), empfehle ich dringend, einen Pull-Down-Widerstand (1 kOhm oder höher) anzubringen, damit die LED nicht versehentlich aufleuchtet zu dieser zufälligen Spannungsschwingung.
b) Hinweis zum Haftungsausschluss: Die hier beschriebenen Ideen dienen nur zu Informationszwecken und sollten NICHT in realen Systemen verwendet werden, bevor Sie einen Experten für Elektronik konsultiert haben.
* /
quelle
https://www.mainframe.cx/~ckuethe/avr-c-tutorial/
https://www.mainframe.cx/~ckuethe/avr-c-tutorial/#digital-in
quelle
Hackaday hatte ein großartiges Schreiben für die AVR-Programmierung, es hat viele großartige Informationen, die Ihnen helfen könnten
http://hackaday.com/2010/11/19/avr-programming-04-writing-code-etc/
http://hackaday.com/2010/11/05/avr-programming-03-reading-and-compiling-code/
http://hackaday.com/2010/10/25/avr-programming-02-the-hardware/
http://hackaday.com/2010/10/23/avr-programming-introduction/
quelle
Nun, das ist für den AT90Usb1287, einen Geldautomaten, aber die grundlegenden Tasten sollten mehr oder weniger gleich sein. Ändern Sie einfach die E / A-Namen.
quelle
Wenn Sie mit einem digitalen Eingang eines mechanischen Schalters arbeiten, sollten Sie auch berücksichtigen, dass die Kontakte springen und sich so ändern, dass ein Tastendruck in einen mehrfachen Tastendruck umgewandelt wird.
Wenn Sie beispielsweise eine LED einschalten, während Sie die Taste gedrückt halten, müssen Sie sich wahrscheinlich nicht um das Entprellen kümmern. Für etwas komplizierteres (wie das Umschalten der LED beim Drücken einer Taste) ist das Entprellen ein Muss.
Jack Ganssle hat einen guten Leitfaden zum Entprellen
quelle