This is an old revision of the document!


Aufgabe

Das Zeil ist es ein Programm zu schreiben was die unten genannten Anforderungen erfüllt.

Aufwärm Übung

  • Lass die rote LED blinken. Die Periode soll 10 Sekunden (Halbperiode 5 Sekunden) sein. Nutze eine Softwareverzögerungsfunktion, mit der Anzahl an Sekunden als Parameter.

Für Anfänger

  1. Zeige auf dem LCD Display, mit einer Genauigkeit von 100ms, die Zeit zwischen dem drücken von 2 beliebigen Knöpfen an. Die Zeitmessung geschieht nach eigenem Ermessen.
  2. Wenn man Knopf S1 drückt, wird die Blinkgeschwindigkeit aller 3 LEDS um die Hälfte reduziert. Wenn man S3 drückt wird das Blinken doppelt so schnell wie vorher, und S2 stellt die Frequenz auf 1 Hz. Nutze Funktionen oder Interrupts (die Interrupts sind schwerer, aber mit den Verzögerungsfunktionen geht Zeit durch die Filterfunktionen der Knöpfe verloren.)
  3. zeige die Druckfrequenz von Knopf S1 auf dem 7 Segment LED Indikator in Hz-s. Das Anzeigen der Frequenz muss unten mit 0 und oben mit 9 limitiert werden.
  4. Wenn Knopf S1 gedrückt wird, zählt das Programm von 60s bis 0s runter und schaltet dann die rote LED an. Wenn S2 gedrückt wird ist die Zeit nur 30s, danach wird aber die gelbe LED angeschaltet. S3 benötigt 10s um die grüne LED an zuschalten. Alle Prozesse müssen gleichzeitig funktionieren. Die LEDs schalten sich aus, wenn der dazugehörige Knopf gedrückt wird.
  5. Zeige die Zeit auf dem LCD wie folgt an: hh:mm:ss. Nutze Hardwaretimer 1 mit Interrupts, die Zeit muss mit den Knöpfen eingestellt werden können. Es sollten 3 Knöpfe genutzt werden, S1 erhöht die Stunden, S2 die Minuten, und S3 die Sekunden.

Für Fortgeschrittene

  1. Entwickle eine Stoppuhr, welche Stunden, Minuten, Sekunden, und Millisekunden auf dem LCD anzeigt. Knopf S1 startet die Zeit, S2 Stoppt Sie, und S3 nullt die Uhr. Interrupts des Timers müssen genutzt werden.
  2. In 2-Sekunden Intervallen müssen die rote, gelbe und grüne LED fließend nacheinander an und aus geschaltet werden. Das fließende Licht wird erzeugt, in dem man die LED mit mehreren Hundert Hertz (also sehr schnell an und ausschaltet) und die Proportionen zwischen den Licht/Dunkel Zeiten verändert, was für das Auge einen Effekt erzeugt, dass die Helligkeit der LED sich ändert. (das ist Pulsweitenmodulation).
  3. Erstelle einen Teil eines Programms in C-Sprache, welcher eine Verzögerung von 10 µs ± 10% erzeugt bei einer Taktfrequenz von 14,7456 MHz. Verifiziere die Funktion der Verzögerung im kompilierten Programm indem man die Befehle in asm-Sprache in der .lss Datei des kompilierten Programms.

Fragen

  1. Welche Verzögerungsmethoden gibt es?
  2. Wie wird eine Softwareverzögerung erstellt? Von welchen Parametern hängt die Softwareverzögerung ab?
  3. Warum nutzen wir Hardwareverzögerungen/Timer mit Interrupts?
  4. Berechne die Overflow-Unterbrechungsperiode für 8-Bit Timer, wenn die Taktfrequenz 16MHz ist und der Teiler 1024
  5. Was ist eine Echtzeituhr in einem Computer?
  6. Was passiert am 19.01.2038 in der Computerwelt?
  7. Was kann man mit AVR Timers noch machen, außer Zeit zu zählen?
  8. Welche Indizes können genutzt werden um den ATmega128 Timer 0 einzustellen? Was kann mit diesen Register verändert werden?
  9. Was ist die längste Zeitspanne an Unterbrechungen in Millisekunden, welche mit einem ATmega128 mit 14,7456 MHz Taktfrequenz erreicht werden können. Zeige deine Rechnung.
  10. Wenn der Prozessor viel zu tun hat mit der Ausführung eines Programms (z.B. mehrere Motoren kontrollieren und die Werte mehrerer Sensoren auf einmal auslesen), hat das einen Effekt auf die Genauigkeit von Timern? Erkläre deine Antwort.
de/exercises/timer.1289347861.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0