Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
einfache_ein-_und_ausgaben [2012/04/12 08:41] huwaldteinfache_ein-_und_ausgaben [2019/07/27 16:43] (aktuell) huwi
Zeile 2: Zeile 2:
 In diesem Abschnitt soll ebenfalls auf der Basis der myAVR C++ Portdeklarationen die Realisierung von einfachen Eingaben veranschaulicht werden. Zuerst wollen wir kurz die Spezifik der Eingabe über Taster diskutieren. Das Bild verdeutlicht, dass ein Taster solange er nicht gedrückt ist mit seiner Verbindung bis zum Controller eine Antenne darstellt. In diesem Abschnitt soll ebenfalls auf der Basis der myAVR C++ Portdeklarationen die Realisierung von einfachen Eingaben veranschaulicht werden. Zuerst wollen wir kurz die Spezifik der Eingabe über Taster diskutieren. Das Bild verdeutlicht, dass ein Taster solange er nicht gedrückt ist mit seiner Verbindung bis zum Controller eine Antenne darstellt.
  
->>>{{:offenereingang.jpg?300|}} {{:eingangpulllup.jpg?300|}}+>{{:offenereingang.jpg?300|}} {{:eingangpulllup.jpg?300|}}
  
 Offene Eingänge sind empfindliche Empfänger für allerlei Elektrosmog. Die Eingabe liefert faktisch willkürliche Signale. Abhilfe schaffen hier sogenannte PullDown- oder PullUp-Widerstände. Diese ziehen die Leitung auf ein definiertes Potenzial und entstören diese somit. Offene Eingänge sind empfindliche Empfänger für allerlei Elektrosmog. Die Eingabe liefert faktisch willkürliche Signale. Abhilfe schaffen hier sogenannte PullDown- oder PullUp-Widerstände. Diese ziehen die Leitung auf ein definiertes Potenzial und entstören diese somit.
 Früher wurden diese PullUp-Widerstände in der Schaltung explizit eingebaut. AVR Controller verfügen über interne PullUp- und die Xmega Serie zusätzlich auch noch über interne PullDown-Widerstände. Diese müssen bei Bedarf einfach nur aktiviert werden. Dazu dienen die bereits angesprochenen Register, welche zu einem GPIO-Port gehören. Wenn ein Port als Eingang konfiguriert ist, wird beim AVR über das Ausgaberegister keine Ausgabe erzeugt, sondern der interne PullUp aktiviert. Früher wurden diese PullUp-Widerstände in der Schaltung explizit eingebaut. AVR Controller verfügen über interne PullUp- und die Xmega Serie zusätzlich auch noch über interne PullDown-Widerstände. Diese müssen bei Bedarf einfach nur aktiviert werden. Dazu dienen die bereits angesprochenen Register, welche zu einem GPIO-Port gehören. Wenn ein Port als Eingang konfiguriert ist, wird beim AVR über das Ausgaberegister keine Ausgabe erzeugt, sondern der interne PullUp aktiviert.
  
->>><code cpp>+><code cpp>
 // Port D Bit 2 als Eingang konfigurieren // Port D Bit 2 als Eingang konfigurieren
 ddrD.bit2 = 0; ddrD.bit2 = 0;
Zeile 23: Zeile 23:
  
 **Eingabe von einem Taster in der Bedingung in einer Alternative auswerten:** **Eingabe von einem Taster in der Bedingung in einer Alternative auswerten:**
->>><code cpp>+><code cpp>
 if ( pinD.bit2 == 0 ) // wenn Taster an D.2 gedrückt  if ( pinD.bit2 == 0 ) // wenn Taster an D.2 gedrückt 
 { {
Zeile 35: Zeile 35:
  
 **Eingabe von einem Taster in der Bedingung in Schleife auswerten:** **Eingabe von einem Taster in der Bedingung in Schleife auswerten:**
->>><code cpp>+><code cpp>
 while ( pinD.bit2 == 0 ) // solange Taster an D.2 gedrückt ist while ( pinD.bit2 == 0 ) // solange Taster an D.2 gedrückt ist
 { {
Zeile 43: Zeile 43:
  
 **Zustand von einem Taster in einer Variablen speichern:** **Zustand von einem Taster in einer Variablen speichern:**
->>><code cpp>+><code cpp>
 bool tastenZusatnd; bool tastenZusatnd;
 tastenZustand = pinD.bit2; tastenZustand = pinD.bit2;
Zeile 50: Zeile 50:
 Die Möglichkeiten der Auswertung und Kombination mit anderen Ausdrücken in C und C++ sind schier unendlich. Wesentlich ist Schreibweise des Zugriffs auf einzelne Bits über den Punktoperator. Unser erstes Beispiel für eine Eingabe von einer Taste ist das Beispiel //Lichtschalter 1//. Dabei soll die rote LED an Port B Bit 0 eingeschaltet werden, wenn der Taster gedrückt ist. Ist der Taster nicht gedrückt, soll die LED aus sein. Schließen sie dazu mit einem der Patchkabel den Taster 1 an Port D Bit 2 an und die rote LED sollte ja von der letzten Übung noch mit Port B Bit 0 verbunden sein. Vergleichen Sie Ihre Schaltung mit dem Bild. Die Möglichkeiten der Auswertung und Kombination mit anderen Ausdrücken in C und C++ sind schier unendlich. Wesentlich ist Schreibweise des Zugriffs auf einzelne Bits über den Punktoperator. Unser erstes Beispiel für eine Eingabe von einer Taste ist das Beispiel //Lichtschalter 1//. Dabei soll die rote LED an Port B Bit 0 eingeschaltet werden, wenn der Taster gedrückt ist. Ist der Taster nicht gedrückt, soll die LED aus sein. Schließen sie dazu mit einem der Patchkabel den Taster 1 an Port D Bit 2 an und die rote LED sollte ja von der letzten Übung noch mit Port B Bit 0 verbunden sein. Vergleichen Sie Ihre Schaltung mit dem Bild.
  
->>>{{:lichtsachalter1.jpg?300|}}+>{{:lichtsachalter1.jpg?300|}}
  
 Die Initialisierungen von Taster und LED erfolgen in der Operation //onStart//, die Verarbeitung der Eingabe und das Realisiern der Ausgaben erfolgt in der Operation //onWork//. Die Initialisierungen von Taster und LED erfolgen in der Operation //onStart//, die Verarbeitung der Eingabe und das Realisiern der Ausgaben erfolgt in der Operation //onWork//.
Zeile 56: Zeile 56:
 Immer zuerst einen Entwurf estellen! Dann darüber nachdenken und ggf. den Entwurf korrigieren. Immer zuerst einen Entwurf estellen! Dann darüber nachdenken und ggf. den Entwurf korrigieren.
  
->>><code cpp>+><code cpp>
 ////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
 // Lichtschalter 1 ENTWURF // Lichtschalter 1 ENTWURF
Zeile 82: Zeile 82:
 Jetzt den Entwurf realisieren. Jetzt den Entwurf realisieren.
  
->>><code cpp>+><code cpp>
 ////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
 // Lichtschalter 1 // Lichtschalter 1
Zeile 112: Zeile 112:
 Kompilieren, linken und brennen Sie die Anwendung. Die LED sollte jetzt nur dann leuchten, wenn die Taste gedrückt ist. Kompilieren, linken und brennen Sie die Anwendung. Die LED sollte jetzt nur dann leuchten, wenn die Taste gedrückt ist.
  
->>>{{:lichtsachalter1a?300|}}+>{{:lichtsachalter1a.jpg?300|}}
  
 Bevor wir diesen Abschnitt verlassen und uns den etwas komfortableren Klassen für Taster und LEDs zuwenden, soll die LED noch bei Tastendruck blinken. Bei der Gelegenheit soll kurz angedeutet werden, dass mit den vorgestellten GPIO-Strukturen auch Bitoperationen möglich sind. Das Blinken bedeutet, dass die LED nach einer gewissen Wartezeit umgeschaltet werden muss. Die geeignete Bitoperation dafür ist das XOR. Schauen Sie sich die Schreibweise und Bedeutung des [[http://openbook.galileocomputing.de/c_von_a_bis_z/006_c_operatoren_005.htm#mj47da0e8682ea7d892f3113146cd64cb1|XOR-Operators in C/C++]] ruhig noch mal an. Bevor wir diesen Abschnitt verlassen und uns den etwas komfortableren Klassen für Taster und LEDs zuwenden, soll die LED noch bei Tastendruck blinken. Bei der Gelegenheit soll kurz angedeutet werden, dass mit den vorgestellten GPIO-Strukturen auch Bitoperationen möglich sind. Das Blinken bedeutet, dass die LED nach einer gewissen Wartezeit umgeschaltet werden muss. Die geeignete Bitoperation dafür ist das XOR. Schauen Sie sich die Schreibweise und Bedeutung des [[http://openbook.galileocomputing.de/c_von_a_bis_z/006_c_operatoren_005.htm#mj47da0e8682ea7d892f3113146cd64cb1|XOR-Operators in C/C++]] ruhig noch mal an.
  
-{{:blinkgeber.jpg|}}+>{{:blinkgeber.jpg|}}
  
 Kompilieren, linken und übertragen Sie die Anwendung auf den Controller. Die LED sollte jetzt blinken, wenn die Taste gedrückt ist. Variieren Sie die Wartezeit in Millisekunden. Kompilieren, linken und übertragen Sie die Anwendung auf den Controller. Die LED sollte jetzt blinken, wenn die Taste gedrückt ist. Variieren Sie die Wartezeit in Millisekunden.
Zeile 122: Zeile 122:
 ====== Videozusammenfassung ====== ====== Videozusammenfassung ======
  
->>><flashplayer width="700" height="550" position="0">file=http://youtu.be/s4FNuobXVNM</flashplayer>+><html><iframe width="700" height="550" src="https://www.youtube.com/embed/s4FNuobXVNM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></html> 
  
->>>[[http://youtu.be/s4FNuobXVNM|besser auf youTube]] 
  
 ====== Nächstes Thema ====== ====== Nächstes Thema ======
 [[Timer|den Timer nutzen]] [[Timer|den Timer nutzen]]