LEDs Sim / Duty Cycle
Die Sequenzer-Simulation und Duty Cycle Gruppe besteht aus Felix Reineke und Miriam Zeineddine.
Ein Sequenzer ist realisiert als ein Gerät oder als Software zur Aufnahme, Wiedergabe und Bearbeitung von speziell codierten Daten zur Erstellung von Musik. Ziel dieser Gruppe war es einen Duty Cycle für einen solchen Sequenzer zu erstellen und dafür zu sorgen, dass 8 LEDs im Takt der eingegebenen Noten aufleuchten um diese Sequenzeraktivität darzustellen. Es werden im Rahmen des Programms immer 8 Noten eingegeben und mit der Hilfe von 8 LEDs simuliert. Des Weiteren wurde der genannte Duty Cycle implementiert, welcher die Klangdauer eines einzelnen Tons als weiteren Ausgang mittels High und Low Signals darstellt.
Hierzu wurde ab dem vierten Labortermin angefangen in den Kleingruppen zu arbeiten. Zuerst wurde der Timer Interrupt aktiviert. Der dazugehörige Code ist im Codeverzeichnis zu sehen.
Außerdem wurde ein Programm zur Ansteuerung des Demultiplexers (HC4051E) geschrieben. Eine zugehörige Schaltung wurde auf einem Steckbrett aufgebaut und ist in Abbildung 1 zu sehen. Das Programm wurde getestet und es traten keine Probleme mehr auf. Die LEDs haben in der richtigen Reihenfolge geleuchtet.

Abbildung 1: Schaltung mit Demultiplexer
Es wurde der Eingabebuffer entwickelt und ein Programm zur Verarbeitung der Töne aus dem Eingabebuffer geschrieben, welches im Wesentlichen aus einem Timerinterrupt und Schnittstellen zur Verarbeitung aller Toneingaben und Tonausgaben besteht. Während des Testens ist leider das Problem aufgetreten, dass das Programm immer wieder die vergangenen Cycles ausgeführt hat. Nach intensivem Debugging konnte jedoch eine Lösung für genau dieses Problem gefunden und implementiert werden.
Wie bereits beschrieben, wurden ihm Rahmen dessen auch die Schnittstellen für die ADC/DAC- und LCD/Taster-Gruppe bereitgestellt. Die Kleingruppen sind dadurch in der Lage sich vergangene Töne, welche gerade abgespielt werden, zu nehmen und sie zu bearbeiten. Nach der Bearbeitung können diese Töne dann wieder in den Buffer eingefügt werden. Des Weiteren können sie damit auch auf gerade aktive Töne zugreifen, diese entgegennehmen und Ausgabefunktionen für diese bereitstellen. Im Codeverzeichnis ist das Programm zu sehen.
Das Programm wurde in Kombination mit der IDE Atmel Studio 7 erstellt.
Folgende Methoden wurden implementiert:
- void UpdateDeMultiplexer(void)
- void InitPorts(void)
- void machkeinScheiss(void)
- void InitTimer0(void)
- void InitSound(void)
- uint8t PutSound
- void GetNextSound(void)
- uint8t GetActualNote(void)
- ISR(TIMER0 OVF vect)
Zusammenfassung
Zusammenfassend kann man sagen, dass alle gesetzten Ziele erreicht wurden.
Diese Ziele waren:
- ein Programm für den Demultiplexer um mit den LEDs am Ausgang anzuzeigen, welche der 8 Noten gerade klingt
- eine Initialisierung eines Timers, so dass dieser vollständig konfiguriert und aktiviert wird
- eine Matrix (ein Buffer) für die Töne, um mit diesen nachfolgend arbeiten zu können
- eine Schnittstelle für die LCD-Gruppe, um neue Töne in den Buffer einbringen zu können
- ein Sprung zu den nächsten 8 Tönen, wenn notwendig (die letzten 8 Töne werden wiederholt, wenn es keine weiteren Töne gibt)
- eine Funktion zu dem Auslesen der aktuell klingenden Note
- ein Timerinterrupt, welcher zeitabhängig alle Ausgänge, in Abhängigkeit von den aktuellen Tönen aktualisiert, sowie neue Töne für die Ausgabe bereitstellt
- ein Duty Cycle, welcher innerhalb des Timerinterrupts implementiert ist
Wie bereits erwähnt, trat zwischenzeitlich leider ein Problem bei der Verarbeitung der Töne aus dem Eingabebuffer auf. Dieses Problem wurde allerdings erfolgreich gelöst.