Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
hallo_c [2019/01/29 16:26]
huwi [Zusammenfassung als Video]
hallo_c [2019/07/27 16:42] (aktuell)
huwi
Zeile 4: Zeile 4:
 Die erste Übung soll das typische LED einschalten sein. Dazu verbinden Sie bitte vom Port-B das Bit-0 mit der roten LED, indem Sie eines der kleinen //​Patchkabel//​ benutzen. Die erste Übung soll das typische LED einschalten sein. Dazu verbinden Sie bitte vom Port-B das Bit-0 mit der roten LED, indem Sie eines der kleinen //​Patchkabel//​ benutzen.
  
->>>>>​>​{{:​uebung1.jpg?​300|}}+>​{{:​uebung1.jpg?​300|}}
  
 Auch auf die Gefahr hin Sand in die Wüste zu tragen hier eine kurze Wiederholung zur Bedeutung der GPIO (General Purpose Input/​Output) Register des AVR. Die GPIO-Ports sind beim AVR mit Buchstaben gekennzeichnet. Der ATmega8 verfügt über die Ports B, C und D. Zu jedem dieser Ports gehören die folgenden drei Register: Auch auf die Gefahr hin Sand in die Wüste zu tragen hier eine kurze Wiederholung zur Bedeutung der GPIO (General Purpose Input/​Output) Register des AVR. Die GPIO-Ports sind beim AVR mit Buchstaben gekennzeichnet. Der ATmega8 verfügt über die Ports B, C und D. Zu jedem dieser Ports gehören die folgenden drei Register:
Zeile 13: Zeile 13:
 Für das Einschalten unser LED ist es jetzt erforderlich im entsprechenden Daten-Richtungs-Register auf das betreffende Bit eine 1 zu schreiben. In myAVR C++ können wir das mit einer recht modernen Schreibweise tun. Dabei ist zu beachten, dass zur Unterscheidung gegenüber der klassischen Großschreibweise der Port-Register die neue Schreibweise mit kleinen Buchstaben beginnt. Der Zugriff auf die einzelnen Bits erfolgt über den Punktoperator und den Bitnamen. Das befreit uns an dieser Stelle in einem gewissen Umfang von dem bisher üblichen Bitgeschubse (&​|^=~1<<​0). Für das Einschalten unser LED ist es jetzt erforderlich im entsprechenden Daten-Richtungs-Register auf das betreffende Bit eine 1 zu schreiben. In myAVR C++ können wir das mit einer recht modernen Schreibweise tun. Dabei ist zu beachten, dass zur Unterscheidung gegenüber der klassischen Großschreibweise der Port-Register die neue Schreibweise mit kleinen Buchstaben beginnt. Der Zugriff auf die einzelnen Bits erfolgt über den Punktoperator und den Bitnamen. Das befreit uns an dieser Stelle in einem gewissen Umfang von dem bisher üblichen Bitgeschubse (&​|^=~1<<​0).
  
->>><​code cpp>+><​code cpp>
    ​ddrB.bit0 = 1;  // Port B Data Direction Register Bit 0 = Output    ​ddrB.bit0 = 1;  // Port B Data Direction Register Bit 0 = Output
    ​ddrD.bit2 = 0;  // Port D Data Direction Register Bit 2 = Input (Standard nach RESET)    ​ddrD.bit2 = 0;  // Port D Data Direction Register Bit 2 = Input (Standard nach RESET)
Zeile 20: Zeile 20:
 Die eigentliche Ausgabe erfolgt über das dafür zuständige Register. Wir verwenden dabei wiederum die objektorientierte Schreibweise. Die eigentliche Ausgabe erfolgt über das dafür zuständige Register. Wir verwenden dabei wiederum die objektorientierte Schreibweise.
  
->>><​code cpp>+><​code cpp>
    ​portB.bit0 = 1;  // Port B Output Bit 0 = High    ​portB.bit0 = 1;  // Port B Output Bit 0 = High
 </​code> ​ </​code> ​
Zeile 26: Zeile 26:
 Legen Sie ein neues kleines Programm an, überprüfen Sie die Einstellung für die Sprache //AVR C++// und  den Controller ATmega8 mit 3,6864 MHz. Laden Sie die Vorlage für die Grundstruktur einer AVR C++ Anwendung. Das gesamte Programm sollte wie unten dargestellt ergänzt werden. Dabei erfolgt die Konfiguration des Ports in der Operation //onStart// und die Ausgabe in der Operation //onWork//. Zunächst machen wir uns einen Plan von dem, was zu tun ist. Diesen notieren wir als Kommentar an die betreffenden Stellen in der Vorlage. Legen Sie ein neues kleines Programm an, überprüfen Sie die Einstellung für die Sprache //AVR C++// und  den Controller ATmega8 mit 3,6864 MHz. Laden Sie die Vorlage für die Grundstruktur einer AVR C++ Anwendung. Das gesamte Programm sollte wie unten dargestellt ergänzt werden. Dabei erfolgt die Konfiguration des Ports in der Operation //onStart// und die Ausgabe in der Operation //onWork//. Zunächst machen wir uns einen Plan von dem, was zu tun ist. Diesen notieren wir als Kommentar an die betreffenden Stellen in der Vorlage.
  
->>><​code cpp>+><​code cpp>
 //////////////////////////////////////////////////////////​ //////////////////////////////////////////////////////////​
 // Hallo myAVR C++ ENTWURF // Hallo myAVR C++ ENTWURF
Zeile 47: Zeile 47:
 Es ist gut, sich den Plan noch mal durch den Kopf gehen zu lassen oder, wenn man sich unsicher ist diesen mit jemandem, der sich auskennt zu besprechen. Erst jetzt sollte nach den geeigneten Befehlen gesucht werden den Plan umzusetzen. Schreiben Sie zu den Kommentaren die entsprechenden Befehle. Es ist gut, sich den Plan noch mal durch den Kopf gehen zu lassen oder, wenn man sich unsicher ist diesen mit jemandem, der sich auskennt zu besprechen. Erst jetzt sollte nach den geeigneten Befehlen gesucht werden den Plan umzusetzen. Schreiben Sie zu den Kommentaren die entsprechenden Befehle.
  
->>><​code cpp>+><​code cpp>
 //////////////////////////////////////////////////////////​ //////////////////////////////////////////////////////////​
 // Hallo myAVR C++ // Hallo myAVR C++
Zeile 70: Zeile 70:
 Kompilieren,​ linken und brennen Sie das Programm. Die rote LED sollte jetzt leuchten. Kompilieren,​ linken und brennen Sie das Programm. Die rote LED sollte jetzt leuchten.
  
->>>>>​>​{{:​uebung1a.jpg?​300|}}+>​{{:​uebung1a.jpg?​300|}}
  
 Und weil es so schön war, variieren wir unser //​Hallo-Welt-Programm//​ etwas und lassen die LED blinken. Dazu muss sich gedanklich klar gemacht werden wie ein Blinken funktioniert. Und weil es so schön war, variieren wir unser //​Hallo-Welt-Programm//​ etwas und lassen die LED blinken. Dazu muss sich gedanklich klar gemacht werden wie ein Blinken funktioniert.
  
->>>​>​{{:​blinken.jpg?​380|}}+>​{{:​blinken.jpg?​380|}}
  
 Um die LED blinken zu lassen, muss also die folgende Sequenz ständig wiederholt werden: Um die LED blinken zu lassen, muss also die folgende Sequenz ständig wiederholt werden:
Zeile 86: Zeile 86:
 Zuerst der Plan! Zuerst der Plan!
  
->>><​code cpp>+><​code cpp>
 //////////////////////////////////////////////////////////​ //////////////////////////////////////////////////////////​
 // Blinklicht 1 ENTWURF // Blinklicht 1 ENTWURF
Zeile 114: Zeile 114:
 Dann die Umsetzung. Dann die Umsetzung.
  
->>><​code cpp>+><​code cpp>
 //////////////////////////////////////////////////////////​ //////////////////////////////////////////////////////////​
 // Blinklicht 1 // Blinklicht 1
Zeile 142: Zeile 142:
 Kompilieren,​ linken und brennen Sie das Programm. Die rote LED sollte jetzt blinken. Sie können die Blinkgeschwindigkeit über das Attribut //​wartezeit//​ variieren. Kompilieren,​ linken und brennen Sie das Programm. Die rote LED sollte jetzt blinken. Sie können die Blinkgeschwindigkeit über das Attribut //​wartezeit//​ variieren.
  
->>​{{:​blinkfertig.jpg|}}+>​{{:​blinkfertig.jpg|}}
  
 ====== Zusammenfassung als Video ====== ====== Zusammenfassung als Video ======
  
->>><​html><​iframe width="​700"​ height="​550"​ src="​https://​www.youtube.com/​embed/​3ht0D1Sqm04"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; encrypted-media;​ gyroscope; picture-in-picture"​ allowfullscreen></​iframe></​html>​+><​html><​iframe width="​700"​ height="​550"​ src="​https://​www.youtube.com/​embed/​3ht0D1Sqm04"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; encrypted-media;​ gyroscope; picture-in-picture"​ allowfullscreen></​iframe></​html>​
  
  
 ====== Nächstes Thema ====== ====== Nächstes Thema ======
 [[einfache Ein- und Ausgaben]] [[einfache Ein- und Ausgaben]]