Die SigmaDSP von Analog Devices ist ein einfach zu handhabender Audio Prozessor. Was zum großen Teil an der Entwicklungssoftware „SIGMASTUDIO“ liegt. Dabei handelt es sich um eine Art grafischer Baukasten womit sich alles zusammen klicken lässt und keine Grundlagen in C oder C++ verlangt.
Wie lässt sich nun aber diese DSP über einen Mikroprozessor steuern? Auf der Webseite von Analog Devices ist ein Tutorial für einen ARM Cortex M3 und KEIL zu finden. Dieses ist schon recht Interessant und auch für die Verwendung für .netmf ab Seite 18 sehr hilfreich. Hier der Link: SigmaStudio Basic uC Integration Tutorial.pdf
Die große Frage welche ich mir immer wieder stellte, wo finde ich die SCL und SDA Anschlüsse für den I2C-Bus? Nach langem Suchen fand ich ein Post im Forum: „Do you have a USBi that came with the evaluation board? Try connecting its SDA and SCL lines to the I2C bus on your target board and then use SigmaStudio to write and read the DSP.“ Das habe ich dann auch gemacht. In der Doku auf Seite 10 sind die Leiter zu finden: AN-1006.pdf oder AN-1006.pdf.
Als nächstes habe den I2C-Scanner auf dem Panda II laufen lassen (Siehe: MCP4725 I2C DAC ). Und es wurden mehrere Geräte angezeigt. Die Verbindung muss also korrekt sein. Die 7Bit Adresse meiner SigmaDSP ist 0x38.
Nun habe ich mir, wie in dem o.g. Tutorial beschrieben, meine DSP zusammen geklickt. Zwei Ton-Generatoren und zwei Ausgänge. Wegen der Einfachheit habe ich vorerst nur ersten Ton-Generator betrachtet (Tone1) und mir entsprechende Modes angelegt mit ON und OFF.
Beim Exportieren der Sequenzdaten erhält man „c“ und „h“-Dateien. Interessant sind aber nur die „h“-Dateien. Beim Betrachten der „h“-Datei erkennt man wie die SigmaDSP über I2C angesprochen wird. Der Zusammenhang zwischen den Mode’s und dieser „h“-Datei ist offensichtlich.
Nach einem Erfolglosen Teste die SigmaDSP über den Panda II anzusprechen, habe ich mir noch einmal das Paper zur ADAU144x angeschaut und bin über die „Subadress“ gestolpert. In der folgenden Abbildung ist zu sehen, dass diese Adresse aus 2 Bytes besteht.
Das heißt, wenn die Adresse: 8 also 0x0008 gemeint ist, muss diese auch wirklich übertragen werden. Also wird 0x0008 aufgeteilt in zwei Bytes 1.: 0x00 und 2.: 0x08. Damit wird einem auch die Übertragungslänge von 6 Byte in der „h“-Datei klar: 2 Byte für die Adresse und 4 Byte für die Daten.
Wie sieht nun der Code in C# aus?
Für meinen Test habe ich noch folgendes gemacht: 1. In der „Hardware Configuration“ über die ADAU144x die „Write last Compilation to E2Prom“ Funktion ausgeführt um den Code in der DSP zu speichern. Daraufhin habe ich die DSP auf „Selfboot“ gestehlt und 3. Habe ich den E2Prom aus der „Hardware Configuraion“ entfernt.
Und welch ein Wunder, der nervige 600Hz Sound ließ sich wirklich über den Panda II abstellen.
Interessant für weitere Arbeiten ist die Möglichkeit, die erstellten Mode-Sequenzen als XML zu Exportieren und dann über einen XML Parser die Entsprechenden Funktionen z.B. für einen .NET Gadgeteer bereit zu stellen (vgl. „Save Sequenz File“).
Hier der ganze Code für Visual Studio2010 .net4.1: FEZ Panda II UI2_DSP_I2C.rar