Programmierung Nibo 2 Teil 8 Multitasking. * by nicaisystems

Größe: px
Ab Seite anzeigen:

Download "Programmierung Nibo 2 Teil 8 Multitasking. * by nicaisystems"

Transkript

1 by HJS Programmierung Nibo 2 Teil 8 * by nicaisystems

2 Nibo 2 Programmierung Teil 8 ( bedeutet ein quasi paralleles Ausführen von mehreren Prozessen auf einem Prozessor ) Notwendige Programme: AVR Studio 6 ( in der aktuellen Version ) Nibo Library ( in der aktuellen Version ) Bitte diese Programme nach Anweisung des Herstellers oder des Tutorials von Nicai installieren. Ich arbeite mit Windows 7 und den angegebenen Programmen. Es können auch andere Programme, z.b. Linux, verwendet werden. Welches Programm ihr nutzt, müsst ihr selber entscheiden. Alle Fotos und Programme sind von hjs und nicai. Die Beispielprogramme findet ihr bei Roboter.cc. Die Nutzung erfolgt auf eigenes Risiko. Mein besonderer Dank gilt Dieter, Falk und Marco für die Hilfe. by H.J.Seeger Der Name Nibo 2 wird mit ausdrücklicher Genehmigung durch die Firma nicai-systems verwendet. Hierbei handelt es sich um eine private Veröffentlichung. Programmierung Nibo 2 Teil 8-2

3 1. Einleitung 2. Das EVA - Prinzip 3. Warum kann delay (..) gefährlich sein? 4. Wie können wir Anweisungen fast gleichzeitig ausführen? 4.1. Einfacher Ansatz 4.2. Verbesserter Ansatz 4.3. Laufschrift 5. Timer 6. ISR 7. Menuesteuerung 8. Programmliste Diese Tutorial entstand unter Verwendung von Beiträgen von Falk Dabei werden Textstellen wörtlich zitiert (*). Alle Beispiele wurden dem Nibo2 angepasst. 1. Einleitung * Da eine echte parallele Ausführung von mehreren Prozessen (Programmen, Funktionen) auf einem einzelnen CPU-Kern nicht möglich ist, wird ein "Trick" verwendet. Dabei werden die einzelnen Prozesse jeweils nur für kurze Zeit (1..50 ms) bearbeitet und danach auf einen anderen Prozess umgeschaltet. Man spricht auch von einer verschachtelten Bearbeitung (interleaving). Das Herz jedes -Systems ist der Scheduler. Dieses Programm beinhaltet einen Algorithmus, der überprüft, welcher Prozess als nächstes die CPU (also Rechenzeit) zugeteilt bekommt. Leider ist das auf unserem kleinen ATmega 128 nicht so vorgesehen. An Hand von Beispielen möchte ich euch zeigen, was möglich ist. 2. Das EVA Prinzip Sehen wir uns einmal die Verarbeitung von Daten auf einem Rechner bzw. dem Nibo2 an: E ( Eingabe ) V ( Verarbeitung ) A ( Ausgabe ) Eingabe von Daten Sensoren Taster Fühler usw. Verarbeiten der Daten Berechnung von Abständen Berechnung von Spannungsgrössen Ausgabe von Daten Motoren LED Sound usw. Programmierung Nibo 2 Teil 8-3

4 Das EVA-Prinzip bedeutet also, die Eingabe, Verarbeitung und Ausgabe der Daten. Da wir nur einen CPU-Kern haben, können wir auch Eingabe, Verarbeitung oder Ausgabe nicht gleichzeitig durchführen, sondern nur streng sequentiell. Sehen wir uns mal ein kleines Stück Programm vom Nibo2 - LED 1 dazu an: int main() // Start des Programmes leds_init(); // LEDs initiiert while(1==1) // Endlosschleife // Klammer Anfang delay(500); // Pause 500 ms leds_set_status(leds_red, 5); // setzt LED 5 auf rot delay(500); // Pause 500 ms leds_set_status(leds_green, 5); // setzt LED 5 auf grün // Klammer Ende return 0; // Zurück, Programmschleife von vorn // Ende Programm Zur Erzeugung einer Blinkfrequenz von 1 Sekunde benutzen wir den Befehl delay(500). Damit erfolgt eine Verzögerung von jeweils 0,5 s. Nach dem Ablauf dieser Zeit werden die LED einoder ausgeschaltet. Was macht der Prozessor eigentlich während dieser Zeit? Die Antwort ist sehr einfach eigentlich gar nichts. Ist nicht ganz korrekt, er zählt fleissig vor sich hin und führt Nichts-Befehle (nop) aus. Er tritt sozusagen auf der Stelle, mit Blick auf die Uhr und wartet bis die Zeit um ist. 3. Warum kann delay (..) gefährlich sein? Nehmen wir doch einfach mal die folgende Situation an. Nibo 2 ist gerade dabei die Zeit zum Einschalten einer LED zu berechnen oder eine Textausgabe zu machen. Während dieser Zeit drehen sich die Motore, gesteuert durch den Co-Prozessor, so langsam vor sich hin und Nibo schiebt sich dabei über die Tischplatte. Da die Zeit noch nicht abgelaufen ist, macht er nichts anderes. Er misst nicht den Abstand der Bodensensoren, er registriert nicht den durch den Co-Prozessor gemessenen Abstand von Hindernissen in Fahrtrichtung, er berechnet nur die Zeit oder besser gesagt, er wartet nur. Ist die Ausgabe des Textes beendet, kann er sich anderen Aufgaben zuwenden. Und plötzlich kommt das Problem in Form einer Kante und ca. 80 cm nach unten. Ist er mit der Textausgabe fertig, kann er den Abgrund erkennen und die Motore stoppen. Erkennt er den Abgrund nicht, besteht die Gefahr eines Absturzes an der Kante und schwerer technischer Schäden. 4. Wie können wir Anweisungen fast gleichzeitig ausführen? Wollen wir mehrere Sachen fast gleichzeitig ausführen, gibt es Probleme mit der Zeit. Nehmen wir als Beispiel: Eine Taste abfragen und damit eine LED schalten Eine LED mit ca. 2 s blinken lassen Eine LED mit ca. 0,6 s blinken lassen 4.1. Einfacher Ansatz (*) Unten sehen wir einen Ausschnitt aus dem Programmes PRG_MTK_2. Wie man sieht, werden Programmierung Nibo 2 Teil 8-4

5 innerhalb der Hauptschleife die einzelnen Unterprogramme aufgerufen. (Ohne Unterprg) while(1) taster = taste_lesen (); led_taster (taster); led_blinken1(); led_blinken2(); // Aufruf UPrg taste lesen und Rückgabe Wert // Aufruf UPrg led taster mit Wert // Aufruf UPrg led blinken 1 mit 2 s // Aufruf UPrg led blinken 2 mit 0,6 s Wenn man das Programm nun laufen lässt, wird man feststellen dass (bitte mit MTK 2 testen) es sehr langsam reagiert und eine Ewigkeit vergeht bis der Taster reagiert die Abarbeitung der Timer für das blinken nacheinander erfolgt und die LED damit sehr komisch laufen Dieser Ansatz ist also untauglich für uns. Egal wie schnell unser AVR auch ist, es reagiert sehr langsam. Sehen wir uns einmal den Grund für unser Problem an. Es werden innerhalb der while Schleife immer wieder die folgenden Unterprogramme ausgeführt: taster = taste_lesen (); verzögert so lange Taste gedrückt led_taster (taster); schaltet LED direkt um led_blinken1(); LED blinkt, verzögert 2 x 2 s led_blinken2(); LED blinkt, verzögert 2 x 0,6 s Damit haben wir beiden jedem Durchlauf des Programmes eine Verzögerung von ca. 5 bis 6 s ( vielleicht auch mehr, durch den Taster ). Diese Zeit ist für den Prozessor eine Ewigkeit. Sehen wir uns einmal die betreffende Stelle im Programm an. void led_blinken1 () // UPrg led blinken 1 // Klammer Anfang delay(2000); // Pause 2 s leds_set_status(1, 5); // setzt LED 5 auf rot delay(2000); // Pause 2 s leds_set_status(2, 5); // setzt LED 5 auf grün // Klammer Ende In diesem Unterprogramm finden wir unsere grössten Bremsen, 2 x delay (2000). Das sind allein rund 4 Sekunden. In den anderen Teilen finden wir noch mehr. Damit ist diese Version für uns nicht geeignet. Warten verboten! Die Anweisung delay sollten wir nur selten verwenden! In Abhängigkeit des Programmes kann man die Anweisung delay nutzen. Dabei ist es aber notwendig genau abzuwägen, wo diese sinnvoll ist. Solange ich keine Zeitkritischen Prozesse habe oder Stromsparen muss, kann ich diese Funktion verwenden Verbesserter Ansatz (*) Will man mehrere Dinge gleichzeitig bearbeiten, muss man die Aufgaben in kleinste Häppchen Programmierung Nibo 2 Teil 8-5

6 zerteilen. Diese kleinsten Häppchen werden dann verschachtelt abgearbeitet, also ein Häppchen von Aufgabe A, ein Häppchen von Aufgabe B, ein Häppchen von Aufgabe C, usw. Sehen wir uns einmal das Programm PRG_MTK_3 an. Eigentlich macht es dasselbe wie das Programm PRG_MTK_2, eigentlich Richtig gesehen, läuft einiges anders. Fangen wir wieder mit dem Aufruf der Unterprg. an. while(1) taster = taste_lesen (); led_taster (taster); led_blinken1(); led_blinken2(); led_blinken3(); delay(1); // Aufruf UPrg taste lesen und Rückgabe Wert // Aufruf UPrg led taster mit Wert // Aufruf UPrg led blinken 1 mit 2 s // Aufruf UPrg led blinken 2 mit 0,6 s // Aufruf UPrg led blinken 3 unterschied // einziges delay im Programm Innerhalb der while Schleife ist die Anweisung delay (1) dazu gekommen. Ich kann schon einige Leute hören, was die so sagen. Habe doch gesagt: Warten verboten! Stimmt genau, hab ich gesagt. Es ist aber notwendig, sich das gesamte Programm anzusehen, bevor man etwas sagt. Eines vorweg dazu. Das Programm PRG_MTK_3 läuft ganz hervorragend. Alle 3 LEDs werden entsprechend den gewählten Zeiten ein- und ausgeschaltet. Der Taster reagiert sofort und auch diese LED schaltet sofort. Warum eigentlich? Fangen wir mit der while Schleife an. In ihr werden die einzelnen Unterprogramme aufgerufen. Taste lesen ( ) bis led_blinken3 ( ). Zu delay (1) kommen wir später. Es erfolgt dadurch ein Aufruf von Unterprogrammen, ein Rücksprung zum Hauptprogramm und wieder der Aufruf eines Unterprogrammes usw. Sehen wir uns mal ein Unterprogramm an z.b. led blinken1() ( 1 ) // *** led blinken 1 *** ( 2 ) void led_blinken1 () // UPrg led blinken 1 ( 3 ) // Klammer Anfang ( 4 ) led1++; // Zähler led 1 ( 5 ) if (led1==1999) // Abfrage Zähler ( 6 ) leds_set_status(1, 5); // setzt LED 5 auf grün an ( 7 ) else ( 8 ) ( 9 ) if (led1==3999) // Abfrage Zähler ( 10 ) ( 11 ) leds_set_status(0, 5); // setzt LED 5 auf grün aus ( 12 ) led1=0; // setzt Zähler led 1 auf 0 // Klammer Ende In der Zeile 2 wird das Unterprogramm gestartet. Bei jedem Durchlauf wird in der Zeile 4 zum Zähler led1 ein Betrag von 1 addiert. In der Zeile 5 wird die Höhe des Zählers led1 mit dem eingestellten Wert von 1999 verglichen. Entspricht der Zähler dem eingestellten Wert, wird Zeile 6 ausgeführt und die LED 5 eingeschaltet. Wenn nicht wird durch die Zeile 7 die Zeile 9 ausgeführt. Wieder wird der Zähler led1 mit dem eingestellten Wert von 3999 verglichen. Stimmen Zähler und Wert überein, wird Zeile 11 ausgeführt, die LED 5 ausgeschal- Programmierung Nibo 2 Teil 8-6

7 -tet und der Zähler led1 auf 0 gesetzt. Durch die beiden ( ) Zahlen wird die Länge der Zeit bestimmt. Und damit kommen wir zu delay(1). Mit dieser kurzen Pause wird der gesamte Durchlauf eines Programm Zyklus auf mindestens 1 ms gesetzt. Innerhalb einer Zeit von 1 ms und der notwendigen Zeit für die Anweisungen wird das gesamte Programm durchlaufen. Während dieser Zeit erfolgt das schalten der Zähler (+/-), das Einlesen der Eingänge und das setzen der Ausgänge. Damit kann ich, bei einer eingestellten Zeit von 1999, von einer Laufzeit von z.b ms ausgehen. Das entspricht ca. 2 Sekunden und damit meiner gewünschten Blinkzeit. Bei jedem Durchlauf kann ich mehrere Zähler setzen und damit verschiedene Aufgaben (fast) gleichzeitig ausführen. Man könnte delay auch ganz weglassen. Dann hat man aber andere Probleme. Der Durchlauf erfolgt so schnell, das bei den eingestellten Zeiten, die LED Dauerleuchten, da kein Unterschied mehr zwischen ein und aus zu sehen ist. Die einzelnen kleinen Häppchen sind verdaulicher als die grossen. Die maximale Durchlaufzeit der einzelnen Funktionen ist drastisch reduziert. Anstatt in der LED-Ausgabe einmal 2000 ms zu warten wird nun 2000 x 1ms gewartet. Zwischendurch werden aber 2000 mal die anderen Prozesse bearbeitet. Echte Demokratie sozusagen. Das ist eigentlich der ganze "Trick" eines kooperativen s. Auch wenn die Verwendung von delay(1) noch ein kleiner Schönheitsfehler ist, den die Profis lieber mit einem Timer erledigen, so wird das Prinzip klar. Prozesse eines kooperativen systems warten nicht auf das Eintreten von Ereignissen, sondern bearbeiten nur bereits eingetretene Ereignisse. Grössere Aufgaben werden in kleine Teilaufgaben zerlegt, welche nur durch mehrfaches Aufrufen der Funktion abgearbeitet werden. Prozesse eines kooperativen s haben eine garantierte, maximale Durchlaufzeit, welche möglichst klein ist. Damit ähneln die Prozesse einem Interrupt, auch wenn sie als ganz normale Funktionen ausserhalb eines Interrupts ausgeführt werden. An diesem Beispiel erkennt man die Vor- und Nachteile des kooperativen s Vorteile einfacher Scheduler mit geringster CPU Belastung und Speicher Deterministische Arbeitsweise, damit einfach prüfbar und strenges Timing möglich Nachteile eine andere Programmierweise zur Zerlegung größerer Aufgaben in kleine Teilaufgaben muss manuell vorgenommen werden Alle Häppchen werden gleich oft aufgerufen und nicht nur bei Bedarf Wichtigster Grundsatz ist die Herangehensweise! Viele Programmieranfänger haben damit Schwierigkeiten (ich auch), was u.a. an den schlecht vermittelten (gelernten) Grundlagen liegt Laufschrift Kommen wir zu einer neuen Aufgabe. Wie kann ich eine Laufschrift programmieren? Zu Anfang hat mir diese Frage viele Probleme gemacht. Dabei ist die Aufgabe relativ leicht. Sehen wir uns einmal als Beispiel das Unterprogramm text_lauf aus PRG_MTK_4 an: Programmierung Nibo 2 Teil 8-7

8 ( 1 ) void text_lauf () // Text unten von links nach rechts ( 2 ) ( 3 ) lauf1++; // Zähler lauf 1 ( 4 ) if (lauf1 ==250) // Abfrage Zähler lauf1 / Zeit einstellung ( 5 ) ( 6 ) lauf1=0; // setzt lauf1 auf 0 ( 7 ) textre++; // Zähler textre ( 8 ) gfx_move(textre, 54); // Angabe Ort unter Logo ( 9 ) gfx_print_text(" N I B O 2"); // Ausgabe Nibo 2 ( 10 ) if (textre == 125) // wenn text 125 ist geht auf 0 ( 11 ) ( 12 ) textre = 0; // setzt textre auf 0 ( 13 ) ( 14 ) ( 15 ) Diese 15 Zeilen Programm reichen dazu aus. Sehen wir uns die Funktion einmal genauer an. In der Zeile 1 erfolgt der Start des Unterprogrammes. In der Zeile 3 wird die Variable lauf1 um jeweils 1 bei jedem Durchlauf hochgezählt. Erreicht sie den Wert von 250 (Zeile 4), erfolgt der Start des Programmes ab der Zeile 5 und lauf1 wird in der Zeile 6 auf 0 gesetzt. Der Aufruf dieses Programmteils erfolgt ca. alle 250ms. Bei jedem Aufruf wird der Zähler textre um jeweils 1 erhöht (Zeile 7). Dieser Wert wird in der Zeile 8 genutzt um eine Position für meine Schrift anzugeben. Der Wert 54 ist dabei der vertikale Wert der Position. In der Zeile 9 steht der Text, der ausgegeben werden soll. Dabei ist neben dem N von Nibo eine freie Stelle in der Schrift. Dadurch wird links von der Schrift jeweils eine Stelle gelöscht und Nibo 2 wandert scheinbar nach rechts. Dabei wird in Wirklichkeit der Text überschrieben und dabei jeweils eine Stelle nach rechts verrückt. Durch die freie Stelle im Namen Nibo, wird auch das linke Zeichen gelöscht. Erreicht die Variable textre den Wert von 125 (Zeile 10), wird das Programm ab der Zeile 11 gestartet. Dadurch wird die Variable textre in Zeile 12 auf 0 gesetzt und das ganze beginnt von vorn. Im PRG_MTK_5 habe ich zusätzlich noch eine Laufschrift eingebaut, wobei der Zähler rückwärts läuft. Zusammen mit einer Verriegelung und einer andern Positionsangabe läuft die Laufschrift dabei von links nach rechts und wieder zurück oder umgekehrt. Eine Umstellung der Laufrichtung kann dabei einfach durch Tausch von 0 und 1 am Anfang des Programmes erfolgen. Damit sind wir mit diesem einfachen am Ende. Sehen wir uns als nächste einmal einen Timer und Interrupt an. 5. Timer Timer sind selbstständige Zähler im Prozessor. Man braucht sie dort, wo Zeitkritische und genaue Aufgaben gefordert werden, z.b. Zeitmessung. Ein Timer ist ein Zähler, der anfängt von Null an hochzuzählen, bis er seinen Höchstwert oder einen eingestellten Vergleichswert erreicht hat. Dieser Höchstwert oder Vergleichswert ist abhängig von der Menge der sogenannten Bits, die für die Anzahl der Speicherstellen stehen. Wir haben in unserem ATmega und 16- Bit Timer. Timer mit 8 Bit gehen von 0 bis 255 ( 256) Timer mit 16 Bit gehen von 0 bis (65536) Programmierung Nibo 2 Teil 8-8

9 Bei jedem Überschreiten des Höchstwertes oder Erreichen eines Vergleichswertes hat man die Möglichkeit einen sogenanntens Interrupt auszulösen. Man kann ihn also anweisen in ein Unterprogramm zu springen und dieses abzuarbeiten. Es gibt verschiedene Betriebsarten. So kann er z.b. zwei Werte vergleichen, oder hoch zählen bis zu einem bestimmten Wert und dann wieder rückwärts zählen. Die Art (Mode) wie der Timer zählt, wird ihm durch ein Befehl mitgeteilt. Der Prozessor wird durch einen Quarz mit 16 MHz getaktet. Das sind Takte in der Sekunde. Bei dieser Frequenz würde der Timer sehr schnell zum Ende kommen und einen Interrupt auslösen. Damit der Timer bei einer Taktfrequenz von 16 MHz nicht zu schnell einen Interrupt auslöst, haben wir Prescaler. Das sind Vorteiler, die den Systemtakt durch festgelegte Werte teilen und den Timer langsamer laufen lassen. Es sind z.b. Teilungen von 8, 64, 256 und 1024 möglich Welche Timer habe ich im Nibo 2? Im ATmega 128 habe ich die folgenden Timer: Timer 0 8 Bit frei verwendbar Timer 1 16 Bit verwendet für PWM und Clock Timer 2 8 Bit frei verwendbar Timer 3 16 Bit frei verwendbar Ich kann also die Timer 0, 2 und 3 verwenden. Der Timer 1 wird bereits durch interne Programmierung (PWM) benutzt Betriebsmodi Die AVR-Timer können in unterschiedlichen Betriebsmodi betrieben werden. Diese sind: Normaler Modus CTC Modus PWM ( gehen wir nicht drauf ein ) 5.3. Mode 0 ( Normal Modus ) In diesem Mode zählt der Timer immer von Null an aufwärts bis 255 beim 8-Bit Timer oder beim 16-Bit Timer. Nachdem er seinen Höchstwert erreicht hat fängt er wieder bei null an. Bei Bedarf kann bei jedem Überlauf ein Interrupt ausgelöst werden. Das heißt, dem Timer kann gesagt werden, das er bei jedem Überlauf eine Routine anspringen soll um diese dann abzuarbeiten. Das hat Priorität vor dem Ablauf der eigentlichen Programmschleife Mode 2 ( CTC Modus ) Hier zählt der von null an aufwärts. Es besteht die Möglichkeit einen Vergleichswert vorzugeben, bis zu dem der Timer zählen soll. Dann stellt er sich selbstständig wieder auf null und beginnt wieder von null an zu zählen. Er muss nicht zwangsläufig bis 255 oder zählen Änderungen im RegisterTCCR0 Bit Name FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00 Wert Programmierung Nibo 2 Teil 8-9

10 Wenn wir die Bits 0, 1 und 3 verändern, indem wir die 1 eintragen, so werden die 16 MHz durch 64 geteilt und CTC ausgeführt Timer 2 Um Timer 2 einzustellen bedienen wir uns der sogenannten Register. Das sind Speicherplätze in denen wir die Art und Funktion der Timer konfigurieren können. Wir haben die folgenden Register zur Verfügung: TCNT2 Timer/Counter Register ( Zählt von Null aufwärts ) OCR2 Output Compare Register ( Obergrenze für den Zähler TCNT2 ) TCCR2 Timer/Counter Control Register ( Gibt die Funktionsweise des Zählers an ) TIMSK Timer/Counter Interrupt Mask ( Schaltet einzelne Interrupts ein/aus ) 5.7. Unser Timer Mit der Erklärung können wir nun die einzelnen Funktionen unseres Timers ermitteln. void nibo_timer2() TCNT2 = 0; OCR2=249; TCCR2=(1<<WGM21) (1<<CS21) (1<<CS20); TIMSK = (1<<OCIE2); // Timer 1ms // zählt von 0 aufwärts // Obergrenze für den Zähler // Angabe der Funktionsweise // schaltet einzelne Interrups Zeitrechnung: Gesuchte Frequenz / Zeit = 1000 Hz entspricht 1 ms Bei einer Quarzfrequenz von 16 MHz ( Hz ) und einem eingestellten Prescaler ( Vorteiler ) von 64 ergeben sich Als nächsten wird der errechnete Wert durch unsere Frequenz geteilt. Damit ergibt sich ein Wert von 250. Eingestellt wird 249, denn der Zähler läuft von 0 bis 249, das sind 250 Takte. Durch unseren Timer wird jede Millisekunde ein Interrupt ausgelöst 6. ISR Was ist das? Bei Mikrocontrollern werden Interrupts z. B. ausgelöst wenn: sich der an einem bestimmten Eingangs-Pin anliegende Pegel ändert eine vorher festgelegte Zeitspanne abgelaufen ist (Timer) eine serielle Übertragung abgeschlossen ist eine Messung des Analog-Digital-Wandlers abgeschlossen ist Bei der Behandlung des Interrupts wird das Anwendungsprogramm unterbrochen, das auslösende Interruptflag gelöscht und ein Unterprogramm, die sogenannte Interrupt Service Routine (ISR), aufgerufen. Wenn dieses beendet ist, läuft das Anwendungsprogramm ganz normal weiter. Für die Auswertung des Interrups nutze ich die folgenden Zeilen Programmierung Nibo 2 Teil 8-10

11 ISR (TIMER2_COMP_vect) // wait1=1ms, if ( wait<=5) // Takt-Zeiteinstellung wait++; // erhöht else // wenn dann... wait=0; // setzt wait auf 0 wait1=1; // Signal usw.... Um den Takt einstellen zu können, verwende ich die Variable wait. Bei jedem Aufruf wird wait um 1 erhöht. Hat wait den Wert von 5 erreicht, setze ich wait1 auf 1 und wait wieder auf 0. Wait1 kann ich jetzt im Programm weiter nutzen. Dadurch kann man die Geschwindigkeit der Verarbeitung anpassen. Innerhalb der ISR befindet sich auch die Routine zum Entprellen der Taster. Ich habe diese von Peter Dannegger übernommen. ( Was mir besonders daran gefällt, ich kann damit bis zu 4 Tasten entprellen und Auslesen. Dabei sind auch verschiedene Arten des Auslesens möglich. z.b. ob eine Taste kurz oder lang gedrückt wird. Damit kann ich in meinem Programm PRG_MTK_7 den Taster S3 verschieden nutzen. Beim ersten drücken (kurz) wird eine LED eingeschaltet. Beim zweiten drücken (lang) wird diese LED wieder ausgeschaltet. In den folgenden Zeilen erfolgt die Auswertung des Tasters S3. In Abhängigkeit der Auswertung erfolgt dabei das Ein- oder Ausschalten einer LED. if(get_key_short(1<<key_1)) // Abfrage Taster S3 leds_set_status(1,3); // Schaltet LED ein if(get_key_long(1<<key_1)) // Abfrage Taster S3 leds_set_status(0,3); // Schaltet LED aus Es kann durch eine Kombination der unterschiedlichen Abfragen und nachfolgenden Schaltungen auch verschiedene Funktionen ausgeführt werden. Durch die Einstellung Takt kann ich die Geschwindigkeit bei der Auswertung verändern. Mache ich es noch schneller als 5, habe ich Probleme mit dem drücken des Tasters, geht zu schnell. Mache ich es langsamer als 9, dauert es zu lang. 7. Menuesteuerung Ein besonderes Thema ist eine Menuesteuerung. Ich hatte es in einem früheren Beitrag bereits veröffentlicht. Damals allerdings mit zusätzlichen Tasten. Versuchen wir es einmal an einem anderen Beispiel. Diesmal verwende ich nur den Taster S3. Dieser Taster hat im Programm 3 verschiedene Aufgaben. Im Startbildschirm soll er einfach nur das Menueprogramm starten. Dazu reicht ein einfaches press aus. Im nächsten Bild soll er durch ein unterschiedliches drücken den Cursor verändern (hoch und runter) und zusätzlich noch meine Auswahl bestätigen. Dazu verwende ich die Funktion kurz / lang. Bei einem kurzen Druck wandert der Cursor weiter. Ist er an der Unterkante angekommen, springt er wieder nach oben. Möchte ich meine Auswahl bestätigen, muss ich länger drücken. Das Programm springt sofort auf die vorgesehen Seite. Dort kann ich dann mit meinem eigenen Programm weitermachen. Programmierung Nibo 2 Teil 8-11

12 Die LED 7 blinkt während der gesamten Zeit. Das ist die Kontrolle zur Funktion des. So lange sie blinkt, ist alles ok. Wenn nicht, gibt es ein Problem. Das gesamte Programm habe ich über Unterprogramme verbunden und viele Kommentare drin. Ihr findet es unter Roboter.cc bei PRG_MTK_8. Sehen wir uns den Ablauf mal genauer an. Mit diesen zwei Zeilen rufe ich die Unterprogramme für das Titelbild und das Logo auf. nibo_titelbild(); nibo_logo(60,5); // Aufruf titelbild ohne Position // Aufruf logo mit Position Innerhalb der while Schleife erfolgt als erstes das setzen des wait_merkers. Beim Testen des Programmes, habe ich festgestellt, das manchmal die Impulse verschluckt werden. Damit das nicht vorkommt, nutze ich wait_merker. Am Ende des Programms setze ich ihn wieder auf 0. if (wait1 == 0xFF) // Abfrage wai1 - Merker wait_merker=1; // Beginn der Zeitschleife wait1=0; // wait1 auf 0 Danach erfolgt die Abfrage vom Taster S3 mit press (Gedrückt?) Ist S3 gedrückt erfolgt der Aufruf von Menue 1 und 2. Damit erfolgt der Grundaufbau und Aufbau Auswahl. if(get_key_press(1<<key_1)) // Taster auf Nibo S3 - Key 1 nibo_tasters3(); // Aufruf UPrg nibo_menu1(); nibo_menu2(); // Menue Grund // Menue Auswahl Den Aufruf der Taster, mit press und kurz / lang habe ich mit flaga verriegelt. Beim ersten Einschalten ist nur die Taste press möglich. Ist man innerhalb der Auswahl, ist nur noch kurz / lang möglich. Durch das Betätigen von S3 kurz wandert der Cursor von oben nach unten. Ist er unten, springt er nach oben. Dazu nutze ich das folgende Stück Code: if(get_key_short(1<<key_1)) // Taster S3 kurz nibo_zeiger(); // Aufruf UPrg nibo_zeiger zeiger=zeiger+10; // erhöht zeiger um 10 if (zeiger>42) // wird zeiger grösse als 42 zeiger=12; // dann auf 12 gfx_move(3,zeiger); // Ort zeiger gfx_print_text("==>"); // Bild Zeiger Hierbei wird die Position des Zeigers als erstes auf den Wert von 12 gesetzt. Durch drücken von S3 kurz erhöhe ich jeweils um 10 (12,22,32,42). Ist der Wert grösser 42, wird er wieder auf 12 gesetzt. Kommen wir zur Auswertung. Drücke ich den Taster S3 lang erfolgt das Enter (Bestätigung) meiner Auswahl und der Aufruf eines Unterprogrammes. Dort steht noch nicht viel drin, ausser Auswahl A (B,C,D). Welche Auswahl ausgewählt wurde erfolgt durch die Auswertung der Variablen zeiger. if(get_key_long(1<<key_1)) nibo_auswahl(zeiger); // Taster S3 lang // Aufruf UPrg nibo_auswahl Programmierung Nibo 2 Teil 8-12

13 Bleibt noch das Blinklicht. Das nutze ich zur Kontrolle der Funktion des Programmes. In dem nachfolgenden Teil verwende ich wieder die bekannte Blinkschaltung. Bei jedem wait_merker wird der Zähler led7 erhöht. Beim Erreichen von 35 wird LED 7 ein- oder ausgeschaltet. Dabei erfolgt die Umschaltung durch die Anweisungen if und else. In Abhängigkeit vom aktuellen Zustand ( PINC&(1<<PC7) ) wird ein- oder ausgeschaltet. Das nennt man toggeln. // LED Ansteuerung 7 grün Blinklicht, Kontrolle ob Zeit ok if (wait_merker == 1) led7++; // Zähler led 7 if (led7 == 35 ) // Einstellung Zeit led7 = 0; // Led 7 auf 0 if(!(pinc&(1<<pc7))) // Abfrage PortC PC5 LED 5 Grün aus? leds_set_status(1,7); // schaltet LED 5 Grün auf ein else // oder leds_set_status(0,7); // schaltet LED 5 Grün auf aus wait_merker = 0; // Wait_merker auf 0 setzen 8. Programmliste PRG_MTK_1 LED blinken mit delay. Es kann jeder versuchen, es zu ändern. PRG_MTK_2 erster Versuch eines, sehr langsam, ungeeignet PRG_MTK_3 erstes Programm mit, LED blinken korrekt PRG_MTK_4 mit LED und Laufschrift PRG_MTK_5 mit LED und mehrfache Laufschrift PRG_MTK_6 mit Timer werden LED angesteuert PRG_MTK_7 - mit Timer und Tastenauswertung S3 kurz und lang PRG_MTK_8 Menuesteuerung mit Timer und Tastenentprellung PRG_MTK_9 LED blinken mit delay 1ms, Lösung1 zu MTK 1 PRG_MTK_10 LED blinken mit Timer 1ms, Lösung2 zu MTK 1 In diesem kleinen Tutorial sind wir am Ende. An einigen Beispielen habe ich euch gezeigt, wie man es machen kann. Sicherlich gibt es auch andere Wege zum Ziel. Jeder kann seinen Weg nutzen. Es sind auch andere Sachen möglich, z.b. uart und die Übertragung von Daten über XBEE, doch das ist alles ein anderes Thema. Bei unseren einfachen Programmen, aber auch der Linienverfolgung kann ich damit eine erhebliche Steigerung der Geschwindigkeit und Sicherheit erreichen. Probiert es einmal aus. Die Programme könnt ihr auf Roboter.cc laden und aus-probieren. Ich weise darauf hin, dass die Nutzung der Programme auf eigenes Risiko erfolgt. Viel Spass beim lesen und Programmieren Achim Programmierung Nibo 2 Teil 8-13

by AS playground.boxtec.ch/doku.php/tutorial Multitasking 4

by AS playground.boxtec.ch/doku.php/tutorial Multitasking 4 www.boxtec.ch by AS playground.boxtec.ch/doku.php/tutorial + Copyright Sofern nicht anders angegeben, stehen die Inhalte dieser Dokumentation unter einer Creative Commons - Namensnennung- NichtKommerziell-Weitergabe

Mehr

myavr Programmierung in C

myavr Programmierung in C myavr Programmierung in C Stefan Goebel Februar 2017 Stefan Goebel myavr Programmierung in C Februar 2017 1 / 12 Grundgerüst... braucht man immer! #include // Register- und Konstantendefinitionen

Mehr

Timer. Funktionsprinzip

Timer. Funktionsprinzip Timer Funktionsprinzip 8-Bit-Timer des ATmega28 Beispiel Timer im Polling- und Interrupt-Betrieb Funktionsprinzip Timer ist ein in Hardware realisierter i Zähler ändert seinen Zählerstand mit einer vorgegebenen

Mehr

Für den CTC-Mode kann demnach TCCR1A komplett auf 0 gesetzt werden, weil WGM11 und WGM10 in diesem Register liegen und beide laut Tabelle 0 sind:

Für den CTC-Mode kann demnach TCCR1A komplett auf 0 gesetzt werden, weil WGM11 und WGM10 in diesem Register liegen und beide laut Tabelle 0 sind: Timerinterrupts beim Arduino Timer 1 (16bit) Register: Bits in den Registern und ihre Bedeutung: Für den CTC-Mode kann demnach TCCR1A komplett auf 0 gesetzt werden, weil WGM11 und WGM10 in diesem Register

Mehr

Interrupt-Programmierung

Interrupt-Programmierung Interrupt-Programmierung Am Beispiel des ATMEGA16 Microcontrollers Beispiel: Messung der Betriebszeit Die Betriebszeit zeigt an, wie lange der Rechner seit dem Booten läuft Hier: Aktualisierung der Betriebszeit

Mehr

by AS playground.boxtec.ch/doku.php/tutorial Multitasking 3

by AS playground.boxtec.ch/doku.php/tutorial Multitasking 3 www.boxtec.ch by AS playground.boxtec.ch/doku.php/tutorial + Copyright Sofern nicht anders angegeben, stehen die Inhalte dieser Dokumentation unter einer Creative Commons - Namensnennung- NichtKommerziell-Weitergabe

Mehr

Erzeugen von PWM-Signalen mit dem Atmel AVR-Mikrocontroller

Erzeugen von PWM-Signalen mit dem Atmel AVR-Mikrocontroller Fachbereich Elektrotechnik und Informatik Labor für Angewandte Informatik und Datenbanken Praktikum Automatisierung/Echtzeitregelung (BAU/BER) Prof.Dr.-Ing. Coersmeier Erzeugen von PWM-Signalen mit dem

Mehr

The amforth Cookbook angefangen

The amforth Cookbook angefangen The amforth Cookbook Author: Datum: Erich Wälde 2009-02-22 angefangen 2 Inhaltsverzeichnis 1 Projekt mit ATMEGA 32 5 1.1 Board................................ 5 1.2 Beispiel Applikation........................

Mehr

Unter einem Interrupt kann man sich einen durch Hardware ausgelösten Unterprogrammaufruf vorstellen.

Unter einem Interrupt kann man sich einen durch Hardware ausgelösten Unterprogrammaufruf vorstellen. Interrupttechnik mit dem ATmega32 Unter einem Interrupt kann man sich einen durch Hardware ausgelösten Unterprogrammaufruf vorstellen. Aufgrund einer Interruptanforderung wird das laufende Programm unterbrochen

Mehr

Mikrocontrollerplatine vorbereiten

Mikrocontrollerplatine vorbereiten Mikrocontrollerplatine vorbereiten Aufgabe B1 Verbinden Sie einen Tastschalter mit dem Anschluss PD2 und eine Leuchtdiode mit dem Anschluss PD6 (Vorwiderstand nicht vergessen!). Teil B Timer 1 Mikrocontrollerplatine

Mehr

Arduino Kurs Timer und Interrupts. Stephan Laage-Witt FES Lörrach

Arduino Kurs Timer und Interrupts. Stephan Laage-Witt FES Lörrach Arduino Kurs Timer und Interrupts Stephan Laage-Witt FES Lörrach - 2018 Themen Timer Interrupts Regelmäßige Aufgaben ausführen Exakte Zeitintervalle messen FES Lörrach Juni 2018 2 Exakte Zeiten sind gar

Mehr

Eingaben. Themen heute. Taster. Eingaben Zuweisungen Zeitmessung. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

Eingaben. Themen heute. Taster. Eingaben Zuweisungen Zeitmessung. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes Eingaben Programmieren für Ingenieure Sommer 2015 Andreas Zeller, Universität des Saarlandes Themen heute Eingaben Zuweisungen Zeitmessung Taster Wikipedia Ziel Wenn Taste gedrückt, soll LED leuchten Wir

Mehr

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein:

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein: Blinken Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein: // Projekt 1 - LED Blinker int ledpin = 13; void setup() pinmode(ledpin, OUTPUT); void loop() digitalwrite(ledpin, HIGH);

Mehr

Gemischte Schüler-Übungen Abbrechende Schleifen und Unterprogramme

Gemischte Schüler-Übungen Abbrechende Schleifen und Unterprogramme 1. Die folgende Schleife nennt man auch eine Warte-Schleife. Warum? Do 2. Bei B0 und B1 sind jeweils eine LED eingesteckt. Wie verhält sich das folgende Programm? Fange so an: Zuerst geht die LED bei B0

Mehr

Atmega Interrupts. Rachid Abdallah Gruppe 3 Betreuer : Benjamin Bös

Atmega Interrupts. Rachid Abdallah Gruppe 3 Betreuer : Benjamin Bös Atmega Interrupts Rachid Abdallah Gruppe 3 Betreuer : Benjamin Bös Inhaltsverzeichnis Vorbereitung Was Sind Interrupts Interruptvektoren Software Interrupts Hardware Interrupts Quellen 2 Vorbereitung Rechner

Mehr

Aufgaben zur Attiny-Platine

Aufgaben zur Attiny-Platine Das Attiny-Projekt Aufgaben 1 Aufgaben zur Attiny-Platine 1. LEDs blinken 1.1 Schließen Sie eine rote LED an PortB.0 und eine grüne LED an PortB.1 an (vgl. Abb. 1). Achten Sie dabei darauf, dass die langen

Mehr

Ampelsteuerung Merkblatt 2 Wie wird der Arduino programmiert?

Ampelsteuerung Merkblatt 2 Wie wird der Arduino programmiert? 1 Übersicht Für die Programmierung steht ein Programm zur Verfügung. Hier kann der Quelltext geschrieben, überprüft, kompiliert und anschließend auf den Arduino geladen werden. Wenn ihr das Programm startet,

Mehr

Vorbereitung. Teil D Analog-Digital-Wandler 1

Vorbereitung. Teil D Analog-Digital-Wandler 1 Vorbereitung So wird der Analog-Digital-Wandler des Mikrocontrollers ATmega328P initialisiert: ADMUX = _BV(REFS0); ADCSRA = _BV(ADEN) _BV(ADPS2) _BV(ADPS1) _BV(ADPS0); Der Analog-Digital-Wandler ist im

Mehr

Puls Weiten Modulation (PWM)

Puls Weiten Modulation (PWM) Puls Weiten Modulation (PWM) Bei der Puls-Weiten-Modulation (PWM), wird ein digitales Ausgangssignal erzeugt, dessen Tastverhältnis moduliert wird. Das Tastverhältnis gibt das Verhältnis der Länge des

Mehr

Klasse, Name : Datum : Rad l/r Linienfolger l/r Laderaum ATMEGA 128

Klasse, Name : Datum : Rad l/r Linienfolger l/r Laderaum ATMEGA 128 HTL_RoboterDKU.odt Übung : Arbeiten mit dem HTL Leonding Roboter Seite : 1 von 7 1. Roboter Peripherie Eingänge Ausgänge DIGITAL ANA- LG DATEN Taster Kante l/r Rad l/r Linienfolger l/r Laderaum Klappe

Mehr

foexlab-materialien Arduino-Schaltungen First Steps Gottfried Wilhelm Leibniz Universität Hannover

foexlab-materialien Arduino-Schaltungen First Steps Gottfried Wilhelm Leibniz Universität Hannover foexlab-materialien Arduino-Schaltungen First Steps Gottfried Wilhelm Leibniz Universität Hannover Inhaltsverzeichnis 1 Das Board... 3 2 Programmierung: Grundstruktur... 3 3 Versuche... 4 3.1 Eine LED

Mehr

Erste Gehversuche mit ARDUINO (DL6OAA)

Erste Gehversuche mit ARDUINO (DL6OAA) Erste Gehversuche mit ARDUINO (DL6OAA) Zuerst die Software und Treiber installieren, siehe Anleitung auf der CD. Testen des Boards Arduino-Programm starten. Gehe zum Menüpunkt WERKZEUGE. Wenn die Installation

Mehr

Microcontroller Selbststudium Semesterwoche 9

Microcontroller Selbststudium Semesterwoche 9 Microcontroller Selbststudium Semesterwoche 9 Kurzfragen zum Thema Interrupts 1. Wozu werden Interrupts benötigt (Beispiele)? Interrupts werden überall dort verwendet, wo auf zeitkritische Ereignisse reagiert

Mehr

D.1 Vorbereitung. Teil D Analog-Digital-Wandler 1

D.1 Vorbereitung. Teil D Analog-Digital-Wandler 1 D.1 Vorbereitung So wird der Analog-Digital-Wandler des Mikrocontrollers ATmega328P initialisiert: ADMUX = _BV(REFS0); ADCSRA = _BV(ADEN) _BV(ADPS2) _BV(ADPS1) _BV(ADPS0); Der Analog-Digital-Wandler ist

Mehr

PWM. An-Phase Aus-Phase Tastverhältnis Helligkeit. Beispiel 1 8 ms 2 ms 8:2 bzw. 4:1 recht hell. Beispiel 2 3 ms 3 ms 3:3 bzw.

PWM. An-Phase Aus-Phase Tastverhältnis Helligkeit. Beispiel 1 8 ms 2 ms 8:2 bzw. 4:1 recht hell. Beispiel 2 3 ms 3 ms 3:3 bzw. 1. Wiederholung: PWM bei einer LED (ohne Timer1) Wenn man eine Leuchtdiode rasch abwechselnd ein- und ausschaltet, sehen wir ein schwächeres Leuchten, als wenn sie die ganze Zeit eingeschaltet ist. Je

Mehr

Bei jedem Arduino-Projekt muss man ein Grundgerüst "bauen". Das sieht dann so aus:

Bei jedem Arduino-Projekt muss man ein Grundgerüst bauen. Das sieht dann so aus: Arduino 1/5 Was ist die Syntax? Die Syntax ist die Rechtschreibung. Ganz wichtig ist, dass (fast) jeder Befehl mit einem Semikolon (;) beendet wird. Bei Codeblöcken müssen immer geschweifte Klamern ({)

Mehr

LED Skalenbeleuchtung mit einem Arduino

LED Skalenbeleuchtung mit einem Arduino Projektteil: LED Skalenbeleuchtung mit einem Arduino Aufgaben: - Ein Taster schaltet die LED-Beleuchtung ein - Nach Ablauf einer im Programm hinterlegten Zeit schaltet sich die Beleuchtung von selbst wieder

Mehr

In dieser Aufgabe geht es darum, das einfache Meteor-Spiel zu verstehen und anzupassen. Lade als erstes das Spiel sample12 und spiele es.

In dieser Aufgabe geht es darum, das einfache Meteor-Spiel zu verstehen und anzupassen. Lade als erstes das Spiel sample12 und spiele es. In dieser Aufgabe geht es darum, das einfache Meteor-Spiel zu verstehen und anzupassen. Lade als erstes das Spiel sample12 und spiele es. Im Spiel fällt ein Meteor vom oben zum unteren Rand. Das Raumschiff

Mehr

Mikrocomputertechnik

Mikrocomputertechnik Mikrocomputertechnik Thema: CPU Timing XC888 und Interrupt System des XC888 und Timer/Counter 0 und 1 -Im InterruptBetrieb - CPU Timing XC888 CPU Timing XC888 Befehl Befehl Befehl Befehlszyklus Befehlszyklus

Mehr

Lösungen zum Kurs "Mikrocontroller Hard- und Software

Lösungen zum Kurs Mikrocontroller Hard- und Software Lösungen zum Kurs "Mikrocontroller Hard- und Software Gerhard Schmidt Kastanienallee 20 64289 Darmstadt http://www.avr-asm-tutorial.net Lösung Aufgabe 2 Aufgabe 2 sbi DDRB,PB0 2 Takte sbi PORTB,PB0 2 Takte

Mehr

WS 2017/18 Viel Erfolg!!

WS 2017/18 Viel Erfolg!! Seite 1 von 12 Hochschule München FK03 Komponenten und Programmierung, 90 Minuten Prof. Dr.-Ing. T. Küpper Zugelassene Hilfsmittel: alle eigenen, Taschenrechner WS 2017/18 Viel Erfolg!! Matr.-Nr.: Hörsaal:

Mehr

analoge Ein- und Ausgänge

analoge Ein- und Ausgänge 2016/07/17 13:39 1/5 analoge Ein- und Ausgänge analoge Ein- und Ausgänge Neben den digitalen Leitungen bietet der Arduino mehrere analoge Ein- und Ausgänge. analoge Ausgänge Die Ausgänge sind mit PWM bezeichnet.

Mehr

Mikrocontrollertechnik C2 Timer. Einführung

Mikrocontrollertechnik C2 Timer. Einführung C2 Timer Einführung Die drei Timer des ATmega32 bieten sehr viele unterschiedliche Betriebsarten. Im folgenden Kapitel sollen nur einige der Betriebsarten kennen gelernt werden. Was ist ein Timer? Ein

Mehr

Arduino Kurs Bits und Bytes. Stephan Laage-Witt FES Lörrach

Arduino Kurs Bits und Bytes. Stephan Laage-Witt FES Lörrach Arduino Kurs Bits und Bytes Stephan Laage-Witt FES Lörrach - 2018 Themen Digitale Eingabe Bit, Byte und Wort Reaktionszeittester FES Lörrach Juli 2017 2 Was ist ein Bit? Ein Bit ist die kleinste Informationseinheit

Mehr

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil 8: gavrasmw und weitere Beispiele

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil 8: gavrasmw und weitere Beispiele Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13 Eine Einführung in Aufbau, Funktionsweise, Programmierung und Nutzen von Mikroprozessoren Teil 8: gavrasmw und weitere Beispiele gavrasmw

Mehr

Garrecht Avionik GmbH VT-02 Transponder Benutzerhandbuch Dokument D. Secondary Surveillance Radar Transponder Mode-S. Bedienungsanleitung

Garrecht Avionik GmbH VT-02 Transponder Benutzerhandbuch Dokument D. Secondary Surveillance Radar Transponder Mode-S. Bedienungsanleitung VT-02 Secondary Surveillance Radar Transponder Mode-S Bedienungsanleitung Bitte nehmen Sie dieses Dokument in das Flug- und Betriebshandbuch Ihres Luftfahrzeuges auf. 2007-2008 - Garrecht Avionik GmbH,

Mehr

E Mikrocontroller-Programmierung

E Mikrocontroller-Programmierung E Mikrocontroller-Programmierung E Mikrocontroller-Programmierung E.1 Überblick Mikrocontroller-Umgebung Prozessor am Beispiel AVR-Mikrocontroller Speicher Peripherie Programmausführung Programm laden

Mehr

Einführung Arduino - Aufbau

Einführung Arduino - Aufbau Einführung Arduino Einführung Arduino - Aufbau Einführung Arduino - Breadboard (http://www.circuit-help.com.ph/wpcontent/uploads/2014/02/imgp5507-600x600.jpg) Einführung Arduino - Breadboard (https://images.duckduckgo.com/iu/?u=http%3a%2f

Mehr

Der CodeBug. A) Erste Schritte. 1) Einleitung

Der CodeBug. A) Erste Schritte. 1) Einleitung Der CodeBug A) Erste Schritte 1) Einleitung.) Wenn wir den CodeBug mittels USB-Kabel bei gedrückter Taste A an den Computer anschließen, blinkt die erste LED rot. Der Computer selbst erkennt ihn als einfachen

Mehr

Bedienungsanleitung DME-Tester V1.0

Bedienungsanleitung DME-Tester V1.0 Bei dem DME-Tester handelt es sich um ein Prüfgerät für Digitale Meldeempfänger. Eventuell wird der Tester auch noch in einer Späteren Version um FMS oder ZVEI Fähigkeiten erweitert. Diese stehen aber

Mehr

Tag 2 Eingabe und Interrupts

Tag 2 Eingabe und Interrupts Tag 2 Eingabe und Interrupts 08/30/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 1 Taster Direkt an Portpin angeschlossen (etwa PINB0, PIND3) Pull-Up-Widerstände einschalten!

Mehr

Programmierübungen in Assembler

Programmierübungen in Assembler Programmierübungen in Assembler 1. LED Ein-/Ausschalten Verwendet: Ports An Portpin P3.0 ist eine LED angeschlossen. An Portpin P1.0 ist ein Taster angeschlossen. a) Schreiben Sie ein Programm, welches

Mehr

Bootloader FastBoot von Peter Dannegger

Bootloader FastBoot von Peter Dannegger Bootloader FastBoot von Peter Dannegger Anleitung von Karsten Donat www.karstendonat.de/avr Stand: 05.08.2007 1 Was ist ein Bootloader? Der Bootloader ist selbst ein kleines Programm. Es wird beim Start

Mehr

Bedienungsanleitung 20 Kanal Funkzündanlage im Case. Model 2204 D

Bedienungsanleitung 20 Kanal Funkzündanlage im Case. Model 2204 D Bedienungsanleitung 20 Kanal Funkzündanlage im Case Model 2204 D Der Verkäufer: Feuerkunst Pyrotechnics übernimmt keine Haftung für Schäden und Finanzielle ausfälle, bei einer Fehlfunktion des Gerätes.

Mehr

WS 2016/17 Viel Erfolg!!

WS 2016/17 Viel Erfolg!! Hochschule München FK03 Zugelassene Hilfsmittel: alle eigenen, Taschenrechner Komponenten & Programmierung von Automatisierungssystemen Matr.-Nr.: Name, Vorname: Hörsaal: Unterschrift: Seite 1 von 11 Prof.

Mehr

Aufbau eines Assembler-Programms

Aufbau eines Assembler-Programms Aufbau eines Assembler-Programms. Assembler-Anweisungen (Direktiven) Einbindung von include-files Definition von Konstanten, Reservierung von Speicherplatz im RAM, 2. Was tun, wenn C Reset-Signal erhält

Mehr

C++ mit dem Arduino (Uno und Mega2560)

C++ mit dem Arduino (Uno und Mega2560) C++ mit dem Arduino (Uno und Mega2560) 1. Toolchain Als toolchain bezeichnet man die Reihe von Software, die nötig ist um den Prozessor zu programmieren, das Ergebnis draufzuladen und dann zu testen. Hier

Mehr

Da der Mikrocontroller mit den internen Timern sehr genau Zeiten messen kann, entschieden wir uns für die Zeitmessung.

Da der Mikrocontroller mit den internen Timern sehr genau Zeiten messen kann, entschieden wir uns für die Zeitmessung. Stufe 1: Das Projekt Fahrradcomputer wurde in der Stufe 1 zunächst auf die Messung der Geschwindigkeit gerichtet. Dabei soll der Mikrocontroller die Impulse auswerten, die von einem Sensor an der Fahrradgabel

Mehr

1.7 Atmega-Programmierung in ASM/Verschachtelte Schleifen

1.7 Atmega-Programmierung in ASM/Verschachtelte Schleifen .7 Atmega-Programmierung in ASM/Verschachtelte Schleifen.7. Aufgabe Die beiden LEDs sollen abwechselnd blinken. Mit der bisherigen Lösung flackern sie nur (Beispiel: blink0.asm):. include /usr/share/avra/m8def.

Mehr

Autonome Mobile Systeme. Dr. Stefan Enderle

Autonome Mobile Systeme. Dr. Stefan Enderle Autonome Mobile Systeme Dr. Stefan Enderle 2. Mikrocontroller Einleitung Unterschied Controller / Prozessor: Speicher (RAM, Flash, Eprom) intern Viele I/Os (Digital, Analog) Bus-Unterstützung (Seriell,

Mehr

Seite 1/6. ModellFerienPass.pdf).

Seite 1/6. ModellFerienPass.pdf). Seite 1/6 NXC Programme Legomodell Am Ende dieser Doku findest ein Bild des Modells, das im Kurs eingesetzt wird. Alle Beispielprogramme basieren auf diesem Modell. Ein Anleitung zum Bau ist auf der CD

Mehr

Kurzanleitung LTT 186 bzw. LTT182 Stand-Alone-Betrieb. 1. Anschluss des LTT Rekorders an den Computer

Kurzanleitung LTT 186 bzw. LTT182 Stand-Alone-Betrieb. 1. Anschluss des LTT Rekorders an den Computer Kurzanleitung LTT 186 bzw. LTT182 Stand-Alone-Betrieb 1. Anschluss des LTT Rekorders an den Computer 2. LTT View Software Starten 3. Start Bildschirm 4. Einstellung der Abtastfrequenz 5. Einstellung der

Mehr

Tag 3 Timer, ADC und PWM

Tag 3 Timer, ADC und PWM Tag 3 Timer, ADC und PWM 09/01/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 1 Analog-Digital-Wandler Arbeitet durch schrittweise Näherung Aktivieren des ADCs durch ADC Enable

Mehr

Bedienungsanleitung Digitaler Multifunktionstimer

Bedienungsanleitung Digitaler Multifunktionstimer Bedienungsanleitung Digitaler Multifunktionstimer EMT799 ist ein digitaler Multifunktionstimer mit 2-pol. Ausgang und 2 Relais A. Funktionen 1. Dieser digitale Multifunktionstimer (hiernach Timer" genannt)

Mehr

Projektdokumentation: DCF 77 Funkuhr

Projektdokumentation: DCF 77 Funkuhr Projektdokumentation: DCF 77 Funkuhr Seite 1 von 8 DCF-77 Signalanalyse Die DCF-77 Signale werden von einem Sender in Mainflingen (ca. 25 km südöstlich von Frankfurt am Main) von der Physikalisch-Technischen

Mehr

ATmega169 Chip: Pin-Layout

ATmega169 Chip: Pin-Layout ATmega169 Chip: Pin-Layout Die logische Schnittstelle der Funktionseinheit MCU (Microcontroller Unit) entspricht der physikalischen Schnittstelle der Baueinheit (Chip). Für die Maschinenbefehle sind nur

Mehr

Einleitung Die Pins alphabetisch Kapitel 1 Programmierung des ATmega8 und des ATmega

Einleitung Die Pins alphabetisch Kapitel 1 Programmierung des ATmega8 und des ATmega Einleitung... 11 Die Pins alphabetisch.... 12 Kapitel 1 Programmierung des ATmega8 und des ATmega328.... 15 1.1 Was Sie auf den nächsten Seiten erwartet... 19 1.2 Was ist eine Micro Controller Unit (MCU)?....

Mehr

DMXfaceX Programmier Tutorial

DMXfaceX Programmier Tutorial DMXfaceX Programmier Tutorial Voraussetzung: DMXfaceXE oder DMXfaceXH mit NET IO Am DMX Eingang angeschlossenes DMX Mischpult oder anderer Sender Inhalt: Arbeiten mit dem DMX Eingang DMX Eingangskanäle

Mehr

AVR-Mikrocontroller in BASCOM programmieren, Teil 3

AVR-Mikrocontroller in BASCOM programmieren, Teil 3 jean-claude.feltes@education.lu 1/8 AVR-Mikrocontroller in BASCOM programmieren, Teil 3 Alle Beispiele in diesem Kapitel beziehen sich auf den Mega8. Andere Controller können unterschiedliche Timer haben.

Mehr

Programmierung Nibo 2 Teil 3 Display. * by nicaisystems

Programmierung Nibo 2 Teil 3 Display. * by nicaisystems by HJS Programmierung Nibo 2 Teil 3 Display * by nicaisystems Nibo 2 Programmierung Teil 3 Display Notwendige Programme: AVR Studio 4 ( mit den aktuellen Versionen und Updates ) WinAVR ( in der aktuellen

Mehr

Microcontroller Kurs Programmieren. 09.10.11 Microcontroller Kurs/Johannes Fuchs 1

Microcontroller Kurs Programmieren. 09.10.11 Microcontroller Kurs/Johannes Fuchs 1 Microcontroller Kurs Programmieren 9.1.11 Microcontroller Kurs/Johannes Fuchs 1 General Purpose Input Output (GPIO) Jeder der Pins der vier I/O Ports kann als Eingabe- oder Ausgabe-leitung benutzt werden.

Mehr

V cc. 1 k. 7 mal 150 Ohm

V cc. 1 k. 7 mal 150 Ohm Ein Digitalvoltmeter Seite 1 von 6 Eine Multiplex-Anzeige Mit diesem Projekt wird das Ziel verfolgt, eine mehrstellige numerische Anzeige für Mikrocontroller-Systeme zu realisieren. Die Multiplex-Anzeige

Mehr

Projektarbeit in DVT auf dem Entwicklerboard

Projektarbeit in DVT auf dem Entwicklerboard Projektarbeit in DVT auf dem Entwicklerboard OUMEX AVR-USB-162 von Michael Eggl, Markus Vogl 1 FROM 8 Version 1.0 Seite 1 von 7 Inhaltsverzeichnis: Aufgabenstellung Seite 3 Planung Seite 3 Quellcode Seite

Mehr

Baue deinen ersten Roboter

Baue deinen ersten Roboter D3kjd3Di38lk323nnm 2 Baue deinen ersten Roboter In Kapitel 1 hast du gelernt, dass Roboter aus Motoren, Sensoren und dem EV3-Stein bestehen. Damit du besser verstehst, wie diese zusammenarbeiten, setzen

Mehr

DST EINFÜHRUNG IN MRT

DST EINFÜHRUNG IN MRT DST EINFÜHRUNG IN MRT V1 (90 min) Steuerungs- und Regelungssysteme 1 DST EINFÜHRUNG IN MRT Heizungs - Regelung 2 HEIZUNGS REGELUNG 3 HEIZUNGS REGELUNG 5 5 4 1 1 => 16 x Temp. 5 x Durchflußmenge Uhrzeit

Mehr

Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt:

Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt: Tasten abfragen Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt: pinmode(pinnummer, OUTPUT) digitalwrite(pinnummer, HIGH) oder digitalwrite(pinnummer, LOW) Zum Abfragen

Mehr

Richtung durch Taster während des Ablaufs umschaltbar

Richtung durch Taster während des Ablaufs umschaltbar U16 Aufgabe 5 U16 Aufgabe 5 Besprechung Aufgabe 3 Notation AVR-Timer Umgang mit mehreren Interruptquellen Arbeiten mit einer diskreten Zeitbasis U16.1 Alle LEDs einschalten, dann in gleicher Reihenfolge

Mehr

IR NEC Empfänger mit 4x7 LED Anzeige (ATtiny2313)

IR NEC Empfänger mit 4x7 LED Anzeige (ATtiny2313) // Include C Libriaries #include #define F_CPU 4000000UL #include #include #include #include // Definition der Segmente #define SEG_O

Mehr

Anleitung DGTV Fernbedienung

Anleitung DGTV Fernbedienung Anleitung DGTV Fernbedienung Inhaltsverzeichnis: 1. Einstellung der Fernbedienung auf Radio-Frequenz 4 2. Kupplung der Fernbedienung mit dem TV-Gerät 5 2.1 Automatische Suchfunktion 5 2.2 Programmieren

Mehr

Bedienungsanleitung Bordcomputer : 1. Einstellen der Anzeige (Setup Anzeige) :

Bedienungsanleitung Bordcomputer : 1. Einstellen der Anzeige (Setup Anzeige) : Bedienungsanleitung Bordcomputer : 1. Einstellen der Anzeige (Setup Anzeige) : Der Bordcomputer kann insgesamt bis zu 20 verschiedene Bildschirme anzeigen. Diese sind frei für jeden konfigurierbar. Folgende

Mehr

Nachtaktiver Blinker. Ralf Pongratz. 11. November 2012

Nachtaktiver Blinker. Ralf Pongratz. 11. November 2012 www.reaktivlicht.de Ralf Pongratz Nachtaktiver Blinker Als Bausatz erhältlich auf www.reaktivlicht.de Nachtaktiver Blinker Ralf Pongratz 11. November 2012 Inhaltsverzeichnis I. Die Schaltung 2 1. Funktionsbeschreibung

Mehr

16-Bit PCA Timer/Counter

16-Bit PCA Timer/Counter 4.5.1 Programmable Counter Array (PCA) Das Programmable Counter Array besteht aus fünf PCA-Modulen, die einen gemeinsamen 16- Bit Timer/Counter als Zeitbasis verwenden. ECI: Externer Clock-Eingang für

Mehr

2

2 TINF Interrupts EDT-Referat Jürgen Schwarzbauer 2ANB 1995/96 Inhalt : Was ist ein Interrupt? Zweck von Interrupts Maskierbare und nicht maskierbare Interrupts Aufruf eines Interrupts Anwendung von Interrupts

Mehr

Arbeit_Roboter. Setze einen Haken bei den Fragen, die du für richtig hältst: Bei Textantworten oder Lückentexten gib jeweils das Ergebnis an.

Arbeit_Roboter. Setze einen Haken bei den Fragen, die du für richtig hältst: Bei Textantworten oder Lückentexten gib jeweils das Ergebnis an. Arbeit_Roboter drucken neu_sortieren verschicken verschicken_selbsttest Setze einen Haken bei den Fragen, die du für richtig hältst: Bei Textantworten oder Lückentexten gib jeweils das Ergebnis an. Vorname:

Mehr

Codespot Pro Eventplayer Tutorial 1

Codespot Pro Eventplayer Tutorial 1 Codespot Pro Eventplayer Tutorial 1 Mit dieser Schritt-für-Schritt-Anleitung möchten wir Ihnen zeigen, wie Sie schnell und unkompliziert Projekte mit Codespot Pro umsetzen. Ein Gespenst in einer Geisterbahn

Mehr

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave Fachhochschule Südwestfalen Wir geben Impulse Kontrollstrukturen und Schleifen in Octave Einführung Inhalt m-files Script-Files Function-Files Ein- Ausgabe von Variablen oder Ergebnissen For-Schleife While-Schleife

Mehr

Reparaturhandbuch. Produkte. Allgemein: A088(i) mit Ladegerät für die EU A089(i) mit Ladegerät für Großbritannien

Reparaturhandbuch. Produkte. Allgemein: A088(i) mit Ladegerät für die EU A089(i) mit Ladegerät für Großbritannien IRDA-Drucker (182-003A) Seite 1 von 6 Produkte Allgemein: A088(i) mit Ladegerät für die EU A089(i) mit Ladegerät für Großbritannien Wichtig! Verwenden Sie nur wiederaufladbare 1,2-V-NiMH-Akkus mit 1600

Mehr

Programmieren von MiniRISC-Prozessor in Assemblersprache

Programmieren von MiniRISC-Prozessor in Assemblersprache Programmieren von MiniRISC-Prozessor in Assemblersprache F1. Die integrierte Entwicklungsumgebung des MiniRISC-Prozessors lässt sich auf der Webseite des Faches Digitaltechnik herunterladen. Die Umgebung

Mehr

Sportprogramm. Stoppuhr. Benutzerhandbuch

Sportprogramm. Stoppuhr. Benutzerhandbuch Stand 20.Mai 2006 Sportprogramm Stoppuhr Benutzerhandbuch Sportprogramme Lippert Alfred, Plassenberger Str. 14 92723 Gleiritsch, Fon 09655-913381 e-mail info@sportprogramme.org Inhaltsverzeichnis 1. Systemvoraussetzungen

Mehr

Die Software zum Unser kleiner Computer

Die Software zum Unser kleiner Computer Die Software zum Unser kleiner Computer '-------------------------------------------------------------------------------- 'name : computer.bas 'copyright : (c)bernd Grupe, DF8ZR 'micro : Mega8 ' Das Programm

Mehr

AVR-Mikrocontroller in BASCOM programmieren, Teil 2

AVR-Mikrocontroller in BASCOM programmieren, Teil 2 jean-claude.feltes@education.lu 1 AVR-Mikrocontroller in BASCOM programmieren, Teil 2 13. Interrupts 13.1 Externe Interrupts durch Taster Wenn Taster mittels Polling abgefragt werden, wie in Teil 1 beschrieben,

Mehr

FERNBEDIENUNG R05/BGE

FERNBEDIENUNG R05/BGE Benutzerhandbuch FERNBEDIENUNG R05/BGE Übersetzung des Original-Benutzerhandbuches INHALTSVERZEICHNIS HINWEISE... 2 PARAMETER DER FERNBEDIENUNG... 2 ÜBERSICHT DER FUNKTIONEN DER FERNBEDIENUNGSTASTEN...

Mehr

Für schnelle und bequeme Entwicklungen wird gern Basic eingesetzt.

Für schnelle und bequeme Entwicklungen wird gern Basic eingesetzt. 2 Bascom-Start 21 Für schnelle und bequeme Entwicklungen wird gern Basic eingesetzt. Speziell für die AVR-Familie hat sich BASCOM-AVR von MCS-Electronics aus den Niederlanden weitgehend durchgesetzt. Auf

Mehr

ATmega8. Projekte mit AVR-Mikrocontroller. Ein Digitalvoltmeter Seite 1 von 6. Ein Datenlogger

ATmega8. Projekte mit AVR-Mikrocontroller. Ein Digitalvoltmeter Seite 1 von 6. Ein Datenlogger Ein Digitalvoltmeter Seite 1 von 6 Ein Datenlogger Mit einem Datenlogger oder Speicheroszilloskop können mit Hilfe von geeigneten Sensoren zeitlich veränderliche Größen wie Temperatur, Druck, Luftfeuchtigkeit,...

Mehr

Analog-Digital-Converter

Analog-Digital-Converter Analog-Digital-Converter Funktionsprinzip ADC bei ATmega128 Beispiel in C Funktionsprinzip 1 Analog-Digital-Wandlung Wandelt analoge Spannung / analogen Strom (Messgröße) in einen binären Wert um, der

Mehr

Anzeige 1 - Teil 2. by AS. Anzeige 1 mit dem HT16K33, 2 x LED Matrix Anzeigen (8x8), 2 x I 2 C Bus = Teil 2 Software =

Anzeige 1 - Teil 2.   by AS. Anzeige 1 mit dem HT16K33, 2 x LED Matrix Anzeigen (8x8), 2 x I 2 C Bus = Teil 2 Software = www.boxtec.ch by AS playground.boxtec.ch/doku.php/tutorial Anzeige 1 mit dem HT16K33, 2 x LED Matrix Anzeigen (8x8), 2 x I 2 C Bus = Teil 2 Software = Anzeige 1 - Teil 2 Copyright Sofern nicht anders angegeben,

Mehr

IFFDM6L & IFFDM6K. Konfiguration mit "KlickKlack"

IFFDM6L & IFFDM6K. Konfiguration mit KlickKlack IFFDM6L & IFFDM6K Konfiguration mit "KlickKlack" Inhaltsverzeichnis IFFDM6L Konfiguration Menü (1.1): Eingangsempfindlichkeit" einstellen Menü (2.2): Frequenz" einstellen Menü (3.3): Ausgangssignal" einstellen

Mehr

Beispiel zur Programmierung einer Einschaltzeit und einer Ausschaltzeit für Montag bis Sonntag:

Beispiel zur Programmierung einer Einschaltzeit und einer Ausschaltzeit für Montag bis Sonntag: Bedienungsanleitung Digital Timer Time Control 112 Hama 47659 Allgemeines: Digitale Zeitschaltuhr mit 16 Ein-/Ausschaltmöglichkeiten pro Tag, max. 112 Ein/Aus Möglichkeiten pro Woche, minutengenau einstellbar

Mehr

Betrieb von ewelink APP

Betrieb von ewelink APP Betrieb von ewelink APP WiFi-RF Brücke zu APP hinzufügen: 1. An einem Ort, an dem es ein drahtloses WIFI-Signal gibt, schalten Sie die WLAN-Funktion des Telefons ein, wählen Sie ein drahtloses Netzwerk

Mehr

Girls Day 2017 Programmierung

Girls Day 2017 Programmierung Girls Day 2017 Programmierung Anke Brocker Quality Management Würselen, 27. April 2017 www.lancom-systems.de Programmierung 27.04.2017 - Übersicht Programmieren mit der Arduino IDE Die Arduino IDE Der

Mehr

Infrarot-Schaltbox Duo P-210

Infrarot-Schaltbox Duo P-210 Infrarot-Schaltbox Duo P-210 Bedienungsanleitung Vielen Dank, dass Sie sich für unsere IR-Schaltbox entschieden haben. Bitte lesen Sie vor Inbetriebnahme des Gerätes nachfolgende Bedienungs- Anleitung

Mehr

HF Signalgenerator von 0 Hz bis 160MHZ mit AD9951 und PIC 16F877

HF Signalgenerator von 0 Hz bis 160MHZ mit AD9951 und PIC 16F877 Andreas Stefan, DL5MGD, Tratberg Nord 20, 83734 Hausham e-mail: dl5mgd@darc.de Homepage: http://www.dl5mgd.de HF Signalgenerator von 0 Hz bis 160MHZ mit AD9951 und PIC 16F877 Bei der auf den folgenden

Mehr

Bedienungsanleitung für Zeitschaltuhr Unterputz

Bedienungsanleitung für Zeitschaltuhr Unterputz Bedienungsanleitung für Zeitschaltuhr Unterputz Modell: EFP700ET A. Funktion 1. 20 Programme pro Tag, 15 Einstellungsmöglichkeiten in der Woche 2. Countdown-Dauer, 1 Minute bis 99 Stunden und 59 Minuten

Mehr

PIC16 Programmierung in HITECH-C

PIC16 Programmierung in HITECH-C PIC16 Programmierung in HITECH-C Operatoren: Arithmetische Operatoren - binäre Operatoren + Addition - Subtraktion * Multiplikation / Division % Modulo + - * / sind auf ganzzahlige und reelle Operanden

Mehr

BZ Software-Version 3.01 Kurzübersicht SPS

BZ Software-Version 3.01 Kurzübersicht SPS BZ Software-Version 3.01 Kurzübersicht SPS Stand 06.05.2010 Inhalt Einleitung... 3 Konzept... 3 Einleitung Die Empfänger-Option Programmierbare Ablaufsteuerung / SPS ermöglicht es eigene Funktionen zu

Mehr

Inhaltsverzeichnis. 1 Anfang 2. 2 Erste Schritte 3. 3 Schleifen repeat while(true) Die if()-schleife... 5.

Inhaltsverzeichnis. 1 Anfang 2. 2 Erste Schritte 3. 3 Schleifen repeat while(true) Die if()-schleife... 5. Inhaltsverzeichnis 1 Anfang 2 2 Erste Schritte 3 3 Schleifen 4 3.1 repeat...................................... 4 3.2 while(true).................................... 4 3.3 Die if()-schleife.................................

Mehr

Ansteuerung eines LCD-Screens

Ansteuerung eines LCD-Screens Ansteuerung eines LCD-Screens Marcel Meinersen 4. Mai 2013 Marcel Meinersen Ansteuerung eines LCD-Screens 4. Mai 2013 1 / 27 Inhaltsverzeichnis 1 Allgemeines Was ist ein LCD-Screen? LCD 162C LED Marcel

Mehr

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Implementierung von Interruptbehandlungen. Interrupts

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Implementierung von Interruptbehandlungen. Interrupts Übungen zu Systemnahe Programmierung in C (SPiC) Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Inhalt Interrupts Allgemein AVR Interrupt-Handler Synchronisation volatile Sperren von Interrupts

Mehr

U5-2 Register beim AVR-µC

U5-2 Register beim AVR-µC U5 4. Übungsaufgabe U5 4. Übungsaufgabe U5-2 Register beim AVR-µC U5-2 Register beim AVR-mC Grundlegendes zur Übung mit dem AVR-µC 1 Überblick Register Beim AVR µc sind die Register: I/O Ports Interrupts

Mehr