Posts mit dem Label Step Sequencer werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Step Sequencer werden angezeigt. Alle Posts anzeigen

Mittwoch, 13. Januar 2016

Analog Synth Nachbau - Weird Sound Generator

Ray Wilson, bekannt wegen seiner umfangreichen Analog Synthesizer Bauten, veröffentlicht eben diese auf seinen Web-Seiten Music From Outer Space, kurz MFOS.
Besonders gefiel mir das Projekt "Weird Sound Generator" (WSG), nicht zuletzt wegen der unkonventionellen Art der Beschreibung. Der WSG ist ein Lo-Fi Gerät, der Sound ist grottig, verrauscht und dreckig (Beispiele am Ende des Posts). Aber genau das suche ich manchmal.

Vorweg: ich habe auch die entsprechenden Mods mit aufgebaut, jedoch erst zu einem Zeitpunkt, als ich die Hauptplatine schon bestückt hatte. Die Mods finden daher auf einer Add-On Platine ihren Platz und nicht auf einer gemeinsamen Platine. Die Bezeichnungen (Zany, Wacky, Weird, Oddness), die Ray Wilson für die Baugruppen verwendet, gefielen mir ausnehmend gut.
Ich habe sie jedoch durch die konventionellen Bezeichnungen LFO, VCO etc. ersetzt, um mir das Verständnis der Funktion erleichtert.






Der WSG verfügt über:

2 LFOs
... einstellbar in der Frequenz und Modulationsstärke, liefern sie wahlweise ein Dreiecks- oder Rechtecksignal

4 VCOs
... liefern ein Dreiecksignal mit einstellbarer Frequenz. VCO 1 und VCO3 werden vom den LFOs moduliert und wahlweise auch von VCO 2 und VCO 4. Alle VCOs geben ihr Ausgangssignal zum Filter weiter, wobei VCO 2 und VCO 4 abschaltbar sind.

1 Lowpass-Filter
... einstellbar in Frequenz (grob und fein) und Resonanz

1 regelbarer Line-Ausgang

4 Voltage Control Eingänge
..., die keinem Standard entsprechen (z.B. 1V/Oktave), für Spielereien durch Anschaltung externer Spannungsquellen jedoch interessant erscheinen.

2 Trigger Ausgänge der LFOs
... zum Ansteuern von externem Equipment.

1 Gate-Eingang
... mit dem zwei voreingestellte Attack-Decay Varianten am Filter moduliert werden können.

Der Signallauf





Der Aufbau

Die Hauptplatine enthält die LFOs, VCOs und die Filterstufe. Da ich eine einlagige Platine haben wollte, musste die Platine neu designed werden.









Die Add-On Platine enthält die VC-, Trigger- und Gate-Schaltungen. Da sie im Nachhinein entstanden ist, ist die Verkabelung leider etwas aufwendiger.








Das Gehäuse ist ein 2-schaliges Aluminium Pultgehäuse der Alu-Topline Serie von BOPLA mit den Maßen 200 x 180 mm.



Die Gestaltung der Front- und rückwärtigen Anschlussplatte erfolgte mit Powerpoint. Das Ergebnis wurde farbig ausgedruckt, laminiert und aufgeklebt. Vor dem Verkleben habe ich einen weiteren Ausdruck als Bohrschablone benutzt.






Die Bedienelemente und externen Anschlüsse sind wie folgt angeschaltet:







Eine wasserfeste Beschriftung der Bedienelemente hilft bei der Verdrahtung den Überblick zu behalten.



Auf der Front sieht die Zuordnung dann wie folgt aus:



Für die Verbindungen habe ich 0,25 qmm Draht und Litze in verschiedenen Farben und mit 0,25 qmm Querschnitt verwendet.



Die Seitenteile des Gehäuses werden später evtl. durch Holzteile ersetzt. Vorerst müssen die Kunststoffelement ausreichen, da ggf. noch Änderungen vorzunehmen sind.

Meine Eagle-Dateien zum Projekt befinden sich auf der Download-Seite oder hier: Weird Sound Generator

Ein erster Test



... im Anschluss verlief erfolgreich. Der Aufwand für die Beschriftung der Bedienelemente hat sich gelohnt und Verdrahtungsfehlern vorgebeugt.

Hier eine Auswahl an Sounds, die mit meinem Gerät erzeugt wurden:




Weitere Soundbeispiele sind auf MFOS und den dort verlinkten Seiten zu finden.

Dienstag, 20. Oktober 2015

Granular Synth

... auf Grundlage der Auduino Entwicklung.



Ich plane einen neuen MIDI Step Sequencer zu bauen. Meine Entwicklungsplattform CSQ1 leistet beim Programmieren und Austesten gute Dienste, hat jedoch seine Grenzen. Eine davon ist die fehlende Audioausgabe, um das Ergebnis ohne großen Aufwand hörbar zu machen.
Eine Lösung fand ich auf den Seiten Notes and Volts*. Der dort vorgestellte Granualar Synth, auf Auduino* (eine Namensabwandlung von "Arduino") Basis, versprach eine einfache Möglichkeit, ein paar interessante Töne zu erzeugen.

Die Schaltung ist so einfach, dass ich auf eine geätzte Platine verzichtet habe und stattdessen ein Rest Labor-Lochrasterplatine verwendete.
Darauf fanden der Synth inklusive Line Out und MIDI In Platz.

Der Schaltplan:




An JP3 wir Line Out abgegriffen, X1 ist der MIDI Out, JP1 und JP5 sind die Programmierschnittstelle (ISP).


Bauteile:



Nun musste noch ein Gehäuse gefunden werden. Die Krabbelkiste gabe einen alten 10 MBit Ethernet Hub frei, dessen Gehäuse wie geschaffen schien:


Die Innereien wurden kurzerhand entfernt, Front- und Rückplatte zum Maßnehmen für neue Aluplatten genommen. 



Den meisten Platz beanspruchen die 5 Potis. Es gibt auch deutlich kleiner, diese hier hatte ich jedoch vorrätig. Im Original werden 10k Potis verwendet, diese hier haben 47k, was der Funktion nicht schadet, da sie nur als Spannungsteiler für die Analogeingänge des Controllers dienen. Im Gegenteil: der Stromverbrauch sinkt.



Bei der bestückten Platine habe ich lediglich die Stiftleisten für die Stromversorgung, den ISP-Anschluss und die MIDI Channel Ausval via Jumper in Hardware ausgeführt. MIDI In, Line Out und die Potentiometer wurden direkt verdrahtet. 



Die Platine wurde erst nach dem Verdrahten eingebaut.



Die Rückseite:



Die Frontplatte ...


... brauchte noch eine Beschriftung im "Laminierverfahren".



Die Firmware stammt von Notes and Volts [Downloadlink].
Lediglich die Zuordnung der Jumper für den MIDI Channel und die Zuordnung der Potis zu den Analogkanälen musste noch an meine Hardware angepasst werden.

Zur Programmierung des Controllers via ISP habe ich eine Arduino Uno genutzt, der mit dem entsprechenden Sketch beladen als Programmer genutzt werden kann.


Ein Test:




... funktioniert.

* Many thanks to Dave from "Notes and Volts" for the inspiration and to Peter Knight for the basics.

Donnerstag, 11. Juli 2013

Musik - Schritt für Schritt (Teil 6): Einzug ins neue Gehäuse

Die Puzzleteile wurden zusammengefügt und an manchen Ecken musste noch gefeilt werden, damit es funktioniert - sowohl bei der Hardware, als auch bei der Software.



Die Frontplatte mit den Bedienelementen besteht aus Sperrholz und neigte zum Verbiegen unter Belastung. Eine umlaufende Einfassung in Alu-Profile gibt nun Stabilität und erleichtert das Befestigen an den Seitenteilen. Die Längsseiten habe ich noch offen gelassen, damit ich in der Testphase die Frontplatte nach oben aufklappen kann. 2 von 4 Befestigungsschrauben dienen als Scharnier.
Die Seitenteile sind vorerst aus MDF Plattenresten gefertigt. Wenn sich die Konstruktion als tauglich erweist, werde ich sie durch Massivholz ersetzen.



Beim Zuklappen des Gehäuses zeigt sich Widerstand durch die vielen Kabel am SPI-Board. Evtl. werde ich dieses Board durch eine gedruckte Schaltung ersetzen.



Während das SPI-Board an der Frontplatte verschraubt ist, sind Encoder-Board, Arduino und MIDI-Board am Boden verschraubt.
Auf dem Arduino ist ein Connector Board aufgesteckt, über das die Verkabelung der Komponenten erfolgt:





Schaltplan:



Bestückungsplan:




Ein Testprogramm sollte die Funktionen aller Komponenten prüfen und kann in die Step Sequencer Software als "Service Programm" integriert werden.



Bereits beim Erstellen fielen die ersten Hardwarefehler auf:

 1. Dank fehlender Masseverbindung versagten die Oktave-Taster und -LEDs ihren Dienst - schnell behoben. 

2. Das Connector Board hatte korrodierte Kontakte und entsprechend Kontaktprobleme. Die sogenannten "stackable Header" für den Arduino waren dann wohl doch nicht vergoldet, sondern eine preiswertere Legierung. Ich habe das Board gegen ein neues mit soliden vergoldeten Stiftleisten ersetzt.


 


3. Ein fehlender Pull-Up Widerstand an der RESET Leitung des SPI-Boards bewirkte unvorhersehbare Reaktionen der SPI ICs.

Kniffliger war das Problem mit  der MCP23S17 Library. Aber dank Hilfe auch das lösbar.

   


Um die weitere Programmierung zu vereinfachen, habe ich zuerst eine Header-Datei mit der Pin-Belegung des Arduino Megas erstellt. Abschließend ergab sich folgendes Programm zum Testen der gesamten Hardware:  Download

Hier ein Testablauf:





Tests erfolgreich bestanden! 
Nun kann die eigentliche Programmierung der Step Sequencer Routinen erfolgen.

[... wird fortgesetzt]


Musik - Schritt für Schritt (Teil 5): MIDI Board

... die Verbindung zur Aussenwelt.




Das MIDI Board ist quasi eine Verdopplung des MIDI-Shields: 2x MIDI In, 2x MIDI Out. Die Anbindung am Arduino Mega2560 erfolgt an den Pins von Serial2 (16, 17) und Serial3 (14, 15).

Serial(0) schied aus, da sie auch beim Software-Update angesprochen wird. Es käme bei MIDI Nutzung zu unschönen Effekten bei den angeschlossenen Geräten, die ich beim MIDI-Shield mit einem Schalter umgangen habe. Dies schien mir hier unpraktikabel.
Serial1 habe ich freigelassen, um evtl. die Interupts 4 und 5 noch später nutzen zu können. Eine Vorverkabelung ist jedoch schon vorhanden, so dass eine Erweiterung um ein 3. MIDI Interface möglich wäre.

Schaltplan:




 Bestückungsplan:




 Bauteilliste:





Downloads:    Eagle Files

[... wird fortgesetzt]

Freitag, 5. Juli 2013

Das Mega2560 und MCP23S17 Problem

Die Hardware des CSQ1 Step Sequencers hat sich weiterentwickelt. Nun stehen die Hardwaretests an und offenbaren auch das ein oder andere Software-Problem bzw. noch offene Bildungslücken.

Wie im Post Musik - Schritt für Schritt (Teil 4): Erste Gehversuche mit Koffer gezeigt, funktioniert das SPI-Board. Die Hardware ist nun aus dem Koffer ausgezogen und in ein "neues Heim" eingezogen.






Um mehr als nur eine MIDI Schnittstelle zu haben, habe ich den Arduino Uno gegen den Mega2560 getauscht. 

Jedoch das SPI-Board gab kein Lebenszeichen von sich. Spannungsversorgung und Verbindungskabel waren in Ordnung. Eigentlich hätte es funktionieren müssen. Testweise den Uno angeschlossen: geht.

Ein Anschließen eines Micro SD-Card Breakout an den Mega2560 zeigt, dass das SPI funktioniert. Ein Internet Recherche brachte keine Ergebnisse. Es hat den Anschein, als hätte noch niemand diese Hardware-Kombination betrieben, bzw. Probleme damit.

Es gab nur noch ein Glied in der Kette, dass ich nicht untersucht habe: die Software und hier speziell die MCP23S17 Class von Cort Buffington. Irgendwo in deren Tiefen muss die Ursache des Problems zu finden sein. 
Die Suche konzentrierte sich auf Angaben zu den verwendeten SPI-Pins, die sich zwischen Uno und Mega unterscheiden:

      UNO  MEGA
MOSI   11   51
MISO   12   50
SCK    13   52
SS     10   53

In der Datei MCP23S17.cpp fand  ich die Zeile:

#define    SS            (10)          // SPI bus slave select output to pin 10 - READ ARDUINO SPI DOCS BEFORE CHANGING!!!


Die (10) habe ich in (53) geändert, weil dies beim Mega mein Slave Select Pin ist. Aber auch nach dieser Änderung verweigerte das SPI-Board weiterhin den Dienst.

Erst eine Anfrage im Arduino Forum brachte den entscheidenden Hinweis. Ein freundlicher Mensch namens Nick Gammon aus Melbourne, seines Zeichens "Global Moderator" im Forum machte mich auf diese Zeilen im Code aufmerksam:


  PORTB &= 0b11111011;                                 // Direct port manipulation speeds taking Slave Select LOW before SPI action


  PORTB |= 0b00000100;                                 // Direct port manipulation speeds taking Slave Select HIGH after SPI action
}



Mit diesen Zuweisungen wird der Zustand von Port B (8 pins, B0-B7) direkt verändert.
&= bedeutet dabei eine bit-weise UND-Verknüpfung und |= eine bit-weise ODER-Verknüpfung.


Pin:   B7 B6 B5 B4 B3 B2 B1 B0
   UND  1  1  1  1  1  0  1  1
      -------------------------
     = B7 B6 B5 B4 B3  0 B1 B0

Pin:   B7 B6 B5 B4 B3 B2 B1 B0
  ODER  0  0  0  0  0  1  0  0
      -------------------------
     = B7 B6 B5 B4 B3  1 B1 B0



Ergebnis: durch diese Zuweisungen wird Pin B2 auf 0 bzw. 1 gesetzt, während der Zustand aller anderen Pins unverändert bleibt. Und ein Blick auf das Pin-Mapping des Arduino Uno Boards zeigt, dass Pin B2 dem Arduino Pin 10 entspricht.

Die Lösung: beim Arduino Mega2560 liegt Pin53 (SS) auf dem ATmega Pin B0. Ich musste demnach die entsprechenden Codezeilen in der Datei zu



  PORTB &= 0b11111110; bzw. PORTB |= 0b00000001;

ändern.
Gespeichert - getestet - geht!

Many thanks to Nick Gammon for support and also many thanks to all Arduino Forum members for spreading their knowledge. Keep it up!


Sonntag, 26. Mai 2013

Musik - Schritt für Schritt (Teil 4): Erste Gehversuche mit Koffer



Das Encoder Board ist fertig, das SPI Board schon länger. Eine MIDI Anbindung ist vorhanden, ein Teilregister verkabelt. Zeit, die Teile zu verbinden und ein wenig zu programmieren.


Um das Ergebnis vorweg zu nehmen:



Die Funktion beschränkt sich auf den Sequenzablauf. Über die Encoder kann die Tonhöhe (Pitch) gesteuert werden. Velocity bleibt dabei konstant. 

GO-Taste (START/STOP):
Die Sequenz wird durch Druck auf den GO-Taster gestartet. Eine rote LED zeigt dann den jeweiligen Step an. Im Video scheint es, als leuchten 2-3 LEDs gleichzeitig. Dem ist real nicht so und liegt nur an der langen Öffnungszeit der Webcam.
Durch erneuten Druck auf GO wird die Sequenz nach Beendigung des aktuellen Steps gestoppt. Der nächste noch nicht ausgeführte Step wird dann durch eine grüne LED angezeigt. Die Status-LED neben dem GO-Taster zeigt durch Leuchten den STOP-Zustand an.

RESET-Taste:
Bei laufender Sequenz bewirkt ein Druck auf die RESET-Taste, dass nach dem Ende des aktuelle Steps die Sequenz unterbrochen wird und bei Step 1 wieder startet.



Zum Aufbau des Ganzen:

Ich habe alle Komponenten vorerst in einem kleinen Koffer (25 x 35 cm) untergebracht. Da die Komponenten noch locker zusammengesteckt sind, erspare ich mir so das Auf- und Abbauen, wenn ich den Code testen möchte.


Einfach den Koffer öffnen, MIDI Anschlüsse und USB-Anschluss mit dem Computer verbinden - fertig. Zum Auswerten und "Vertonen" der MIDI Kommandos verwende ich MIDI-OX.





Das SPI Board und Encoder Board sind noch nicht voll ausgelastet. Derzeit ist nur ein Teilregister (Encoder + LEDs) angeschlossen. Als Sequence Engine dient derzeit der Arduino Uno, hier mit dem MIDI Shield bestückt. Die Anschlüsse an die Sequence Engine laufen derzeit über ein Steckbrett, damit ich die Verkabelung bei Bedarf ändern kann. Auch die Sequence Control Taster  (START/STOP, STEP und RESET) und eine Status-LED sind auf dem Steckbrett untergebracht.



Rechts unten befindet sich noch ein Potentiometer zum Einstellen der Geschwindigkeit. Unten mittig - noch nicht integriert, aber schon mal getestet - ein Micro-SD Card Slot. Er wird später auf dem Configuration Board zu finden sein, dass auch das Display enthält. Mit diesem Board sollen u.a. Einstellungen gespeichert und geladen werden können.



Der geplante Systemaufbau:






Wie geht es weiter?

Die Pin-Belegung der Sequence Engine sieht im Moment so aus:



*328 ist die Pin-Belegung des ATmega328P-PU, die man berücksichtigen muss, wenn man das Arduino-Board durch "selbstgegossene" Hardware ersetzen möchte.

Zusätzlich ist das BPM-Poti am Pin A0 (23). Es wird später nicht mehr benötigt, da die Funktion vom Configuration Board geliefert wird.

Bei Verwendung des ATmega328P-PU ist nur eine serielle Schnittstelle vorhanden, die für MIDI genutzt werden kann. Evtl. ersetze ich ihn durch einen ATmega2560, der 4 Schnittstellen bietet. Eine davon könnte ich dann exklusiv für Software-Updates nutzen. 

Weitere Tests müssen noch zeigen, ob die Sequence Control Taster wie aktuell abgefragt werden, oder durch eine Interrupt-Schaltung angenehmer funktionieren. Der Nachteil der Tasterabfrage per Polling ist, dass der Taster so lange gedrückt bleiben muss, bis der aktuelle Step beendet ist. Bei schnellem Tempo kein Problem, bei langsamen Schrittfolgen etwas nervig, weil es öfter vorkommt, dass ich den Taster zu früh los lasse und der Tastendruck somit keine Wirkung hat.

[... wird fortgesetzt]