DIY SH-101 Arpeggiator/Sequencer mit Arduino nachbauen?

Dieses Thema im Forum "mit Sequencer" wurde erstellt von 303otto, 5. November 2015.

  1. 303otto

    303otto Tach

    Hallo liebe Freunde der elektronischen Musik,

    bin neu hier und wollte mal fragen, ob sich jemand schonmal mit der Realisierung eines Nachbaus des Roland SH-101 Sequencers befasst hat.

    Ich bin grad dabei den SH-101 mit meinem Nord Micro Modular "nachzuäffen" :D
    Dazu möchte ich auch ein passendes Midiinterface basteln, welches alle benötigten Regler und eine Klaviatur beinhaltet.

    Das größte Problem bereitet mir allerdings die Realisierung des internen SH-101-Sequencers.. :-|
    Ich will aber auch keinen externen sequencer dazwischen stecken, da ich 'on the fly' wie halt beim SH-101 arbeiten möchte.
    Tasten drücken -> HOLD-Taste = Arp läuft (hoch-runter; runter-hoch; hoch-runter-hoch)
    LOAD drücken -> melodie klimpern = fertsch: sequencer läuft
    ..nicht mehr und nicht weniger - das würde mir völlig ausreichen :floet:

    Der Midicontroller mit den ganzen Reglern wird von einem Arduino Uno betrieben werden. Somit wäre eine passende Einheit, welche den Arp/Sequencer antreibt schon vorhanden - nur tuh ich mich mit der programiererei ein wenig schwer.

    Vielleicht hat ja jemand ein solches kleines rudimentäres Programm schon vorliegen und könnte mir ein paar Tips geben.

    Danke schon im voraus
    -otto
     
  2. Moogulator

    Moogulator Admin

  3. Xpander-Kumpel

    Xpander-Kumpel bin angekommen

    Den SH-101-Sequenzer hat Olivier von Mutable Instruments in seinem Midipal als OpenSource veröffentlicht.
    Einige Menschen haben ihn dann zum JX-3P-Sequenzer(anstatt monophoner Steps, polyphone Steps) weiterentwickelt.

    Den Midipal gibts zwar nicht mehr, aber eine andere Firma hat ihn als Midibuddy(o.ä.) wiederveröffentlicht.

    Es gibt hier im Forum einige Mitglieder die sich mit der Programmierung(u.a. "Mr.Robotto") beschäftigt haben.

    Für den JX-3P-Sequenzer als triggerbare Box(ohne Klaviatur, mit Speicher usw.) würden sich hier bestimmt viele Forumsmitglieder(ich eingeschlossen) interessieren, da es nichts vergleichbares auf dem Markt gibt was das könnte(ausser dem Sequential Prophet-6 und JX-3P).


    PS: Soweit ich weiß ist das System zwar nicht Arduino-basiert, aber der Code ist in C++ und läßt sich bestimmt in großen Teilen nutzen.
     
  4. mink99

    mink99 bin angekommen

    Sind die Schwierigkeiten, die du hast, in dem c++ oder im Algorithmus ?
     
  5. 303otto

    303otto Tach

    Ja, der SFC-101 (soundforgecontroller-101?) ist mir im Netz auch schon über den Weg gelaufen.
    Hab mir dann mal vom Vorgänger das „Betriebssystem“ angeschaut (arduino-code) hab aber nix sequencer-mäßiges drin gefunden.
    Nachdem ich mir dann den zu steuernden Synth (TAL Baseline-101 oder so ähnlich) näher angeschaut hatte, hab ich festgestellt, dass der sequencer Bestandteil der Software (TAL) selber ist und nicht zur Controllersoftware dazu gehört :-|
    Und ja, ich möchte am Ende hier ein gerät/konstrukt stehen haben, welches sich -unabhängig vom PC- wie ein SH-101 anhört und möglichst auch anfühlt (Fader werden aber höchstwarscheinlich durch Potis ersetzt - Preis und konstruktionsbedingt)


    Danke für den Tip.
    Hab gleich mal gesucht und den MidiREX gefunden.
    4-Spur Midisequencer mit allem was ich benötige und nicht groß viel mehr
    werd mich da mal weiter reinlesen.. ;-)


    Eigendlich die Arduinosprache selbst (von c++ ganz zu schweigen)..
    Ein bestehendes Program zu modifizieren ist weniger das Problem, aber eines zu entwerfen... :floet:
    Mir steht nicht gerade viel Zeit zur Verfügung um da 1A-konform zu werden

    Aber ich schau mir erstmal den MidiREX an und vielleicht gibts eine Möglichkeit meinen Arduino Uno als Programmer für die REX-Software zu nutzen (ist scheinbar c++)

    Danke erstmal an Alle :)
    -otto
     
  6. Tobias von Tubbutec hat gerade einen kompletten OS-Rewrite für den SH-101 gemacht (ich bin da Betatester); basiert allerdings. Ich hab ihm auch schon vorgeschlagen, das ganze als Standalone-Hardware zu machen.
    https://tubbutec.de/sh-1oh1/
     
  7. 303otto

    303otto Tach

    ok, schau ich mir an, danke für den Hinweis :)

    hier nochwas von den MidiBud-Machern: der MidiSeq
    scheint sehr einfach aufgebaut zu sein und macht genau das was ich mir unter einem einfachen "on the fly" sequencer im SH-101-Verschnitt vorstelle :D
    http://midisizer.com/2015/10/18/midiseq-demo-video/

    schein ein spezielles Firmware für den MidiGAL zu sein - gefällt mir sehr gut :D
     
  8. Xpander-Kumpel

    Xpander-Kumpel bin angekommen

    Kannst Du ihm vielleicht noch vorschlagen das ganze polyphon zu machen(Standalone Hardware)?

    Der Mehraufwand ist gering, der Mehrnutzen aber enorm!
     
  9. dislo

    dislo Tach

    hallo schau mal in das snazzy fx ardcore repository. das ist ein arduino basiertes eurorack modul in das man flexibel verschiedene programme hochladen kann. da ist auch ein sh 101 ähnlicher sequenzer bei.
     
  10. 303otto

    303otto Tach

    der hier? AC27_101SEQ.ino

    danke für deinen Hinweis, dislo :)

    sind bestimmt ein paar gute sachen fürs programmieren drin :idea:
    ----------------

    favorisiert hab ich erstmal den MidiGAL mit der Firmware MidiSeq.
    Bin grad am brainstormen wie ich meine Arduino Uno dazu bekomme, als AVR-ISP einen weiteren Atmega328p mit .hex zu füttern.. :roll:
    Die .hex-files kann ich ja nicht einfach so als sketch im Arduino-Editor laden..
    XLoader soll das aber scheinbar ganz einfach realisieren können.. nur weis ich noch nicht, wie ich die Fuses auf dem "Opfer" setzen kann
    Code:
    @echo off
     set path=%path%;C:\Program Files (x86)\Atmel\AVR Tools\STK500 (<-STK500(.exe?) starten und folgendes darauf ausführen:)
     stk500 -cUSB -dATmega328p -I125Khz -e -fD4FF -FD4FF -EFD -GFD (<- Fuses)
     stk500 -cUSB -dATmega328p -I4Mhz -ifmuboot.hex -pf -vf (<- bootloader?)
     stk500 -cUSB -dATmega328p -I4Mhz -ifmidiseq.hex -pf -vf (<- das eigendliche programm)
    :stk500 -cUSB -dATmega328p -I4Mhz -iemidiseq_eprom.hex -pe -ve (<- scheinbar ausgeklammert? oder was soll der doppelpunkt am anfang bedeuten?)
    
    Dies ist als batchdatei in der firmware.zip des MidiSeq mit drin gewesen.
    Allerdings macht es mir den Anschein, als würde da direkt ein stk500-'ChipBurner' angesprochen werden - den ich natürlich nicht hab :?
    Aber der Arduino kann ja anscheinend als AVR-ISP fungieren und somit dann das gleiche wie der STK500 machen - nur WIE GENAU das geht hab ich noch nicht herausgefunden..

    :kaffee:

    für weitere hints wär ich sehr dankbar :idea: :D
     
  11. 303otto

    303otto Tach

    sooo...

    nachdem ich das netz durchforstet hab, bin ich zu folgender lösung gekommen:

    Arduino Uno als ISP und das "Opfer" auf nem externen Breadbord (angeschlossen ohne externen Cristal, wie hier beschrieben (ganz unten links))
    Using an Arduino board to burn the bootloader onto an ATmega on a breadboard (w/o an external clock).

    und hier die "Übersetzung" von AVR Tools nach avrdude:
    Code:
    @echo off
     set path=%path%;C:\Program Files (x86)\Atmel\AVR Tools\STK500
     stk500 -cUSB -dATmega328p -I125Khz -e -fD4FF -FD4FF -EFD -GFD
     stk500 -cUSB -dATmega328p -I4Mhz -ifmuboot.hex -pf -vf
     stk500 -cUSB -dATmega328p -I4Mhz -ifmidiseq.hex -pf -vf
    :stk500 -cUSB -dATmega328p -I4Mhz -iemidiseq_eprom.hex -pe -ve
    
    -c Select communication port; “com1” to “com8”. If this parameter is omitted the program will scan the comm. ports for the STK500
    -d Device name. Must be applied when programming the device. See list below.
    -l Set lock byte. “value' is an 8-bit hex. value
    -e Erase device. If applied with another programming parameter, the device will be erased before any other programming takes place
    -f  Set fuse bytes. “value” is a 16-bit hex. value describing the settings for the upper and lower fuse
    -F Verify fuse bytes. “value” is a 16-bit hex. value to verify against
    -E Set extended fuse byte. “value” is an 8-bit hex. value describing the extend fuse settings
    -G Verify extended fuse byte. “value” is an 8-bit hex. value describing the extend fuse settings
    Fuses syntax: fLLHHEE (Low Low; High High; Extendet Extendet)
    
    -if Name of FLASH input file. Required for programming or verification of the FLASH memory. The file format is Intel Extended HEX
    -pf or pe or pb Program device; FLASH (f), EEPROM (e) or both (b). Corresponding input files are required
    -vf or ve or vb Verify device; FLASH (f), EEPROM (e) or both (b). Can be used with -p or stand alone. Corresponding input files are required
    -ie Name of EEPROM input file. Required for programming or verification of the EEPROM memory. The file format is Intel Extended HEX.
    -pe see above (Program device; EEPROM (e) Corresponding input files are required)
    -ve see above (Verify device; EEPROM (e) Can be used with -p or stand alone. Corresponding input files are required)
    
    AVRDUDE translation of the code above: link here (http://www.nongnu.org/avrdude/user-manual/avrdude_4.html#Option-Descriptions)
    at first read the fuses to see the states!!! (A fresh m328p have the following readout: lfuse 62 hfuse D9 and efuse 7)
    avrdude -P COM3 -b 19200 -c avrisp -p m328p -v
    
    stk500 -c USB -d ATmega328p -I 125Khz -e -f D4FF -F D4FF -E FD -G FD (Fuse settings: low=FF, high=D4, extended=FD.)
    avrdude -P COM3 -p m328p -b 19200 -c avrisp -p m328p -e -U lfuse:w:0xFF:m -U hfuse:w:0xD4:m -U efuse:w:0xFD:m
    
    stk500 -cUSB -dATmega328p -I4Mhz -ifmuboot.hex -pf -vf
    avrdude -P COM3 -p m328p -b 19200 -c avrisp -p m328p -U flash:w:muboot.hex -U flash:v:muboot.hex
    
    stk500 -cUSB -dATmega328p -I4Mhz -ifmidiseq.hex -pf -vf
    avrdude -P COM3 -p m328p -b 19200 -c avrisp -p m328p -U flash:w:midiseq.hex -U flash:v:midiseq.hex -D
    
    stk500 -cUSB -dATmega328p -I4Mhz -iemidiseq_eprom.hex -pe -ve
    avrdude -P COM3 -p m328p -b 19200 -c avrisp -p m328p -U eeprom:w:midiseq_eprom.hex -U eeprom:v:midiseq_eprom.hex
    (existiert leider nicht)
    leider konnte ich die Extendet Fuse nicht auf den gewünschten Wert 0xFD bringen - wurde immer wieder automatisch auf 0x05 umgeschrieben
    (möglich, dass es am "Savemode" liegt, aber da bin ich mir nicht ganz sicher - habs nicht ohne savemode getestet)

    jetzt fehlt nurnoch die komplette schaltung, in die ich den IC einsetzen kann..


    wäre prima, falls jemand einen Hinweis darauf geben kann, warum ich die Extendet Fuse nicht auf FD setzen konnte :idea:

    thx (fürs lesen) :mrgreen:
    -otto
     
  12. 303otto

    303otto Tach

    Ich hab dann mal direkt Pete von MidiGal gefragt bezüglich der efuse.

    Scheinbar liegt es tatsächlich am Quarz - den ich nicht angeschlossen hatte.. da ich einen solchen grad nicht zur Hand hab :floet:

    Werde erstmal alle nötigen teile für die Schaltung besorgen (incl. des 20MHz Xtal) und dann sehen wir weiter...
    bis dahin erstmal :kaffee:
    -otto
     
  13. 303otto

    303otto Tach

    Zwischenbericht:

    building:


    checking:


    flashing:


    testing:


    :mrgreen:


    müssen nurnoch die Midiports und der Encoder dran, dann das Gehäuse und die Klaviatur, danach noch ca. 26 Potis und die Midicontroller-Schaltung reingebastelt, alles aufgehübscht und fertig :floet: :mrgreen:

    Danke an alle Helfer und Tipsgeber! :supi:

    LG
    -otto :kaffee:
     

    Anhänge:

  14. dislo

    dislo Tach

  15. klangsulfat

    klangsulfat Gut druff

    Cool :supi: Wusste gar nicht, dass man auch ein 16 x 2 LCD dafür benutzen kann.
     
  16. Anonymous

    Anonymous Guest

    weils so schön ausschaut :respekt:
     
  17. 303otto

    303otto Tach

    ja, geht :mrgreen:
    wird allerdings nur die hälfte genutzt ;-)

    Dankeschön :mrgreen:

    Anleitung zum nachmachen folgt die tage sobald ich zeit finde

    LG
    -otto :kaffee:
     
  18. 303otto

    303otto Tach

    nur mal nen kleines Bild vom Projekt :mrgreen:


    und noch eins vom Sequencer


    erstmal noch aus Papier aber es geht voran :floet:


    ein altes Casio MA-100 muss übrigens herhalten :mrgreen:

    :kaffee:
     

    Anhänge:

  19. klangsulfat

    klangsulfat Gut druff

    :supi:

    Hast du an der Sequenzer-Software was geändert? Weil der Midigal ja eigentlich nur einen Encoder und einen Taster hat.
     
  20. Max

    Max bin angekommen

    :supi: saugeil
     
  21. 303otto

    303otto Tach

    Richtig - und das ist etwas wenig :-|
    (da die Firmware ein .hex-file ist, kann man darin leider nix mehr ändern - ohne sourcefile wird da nix draus)
    Aber zum glück hat der MidiGal-Entwickler die wichtigen Parameter mit controllmöglichkeiten versehen. :idea:
    Wie man in der Anleitung lesen kann, gibts die Möglichkeit, einen ganzen haufen sinnvoller Funktionen per MidiCC# auszuführen.

    ganz runter scrollen und ihr findet das hier:
    Code:
    Controller # pages
    
    These pages specify the MIDI Control Change Numbers used for various sequencer actions. These come useful when you want to control the sequencer from your controller keyboard.
    
        [Stop] – stops the sequencer (CC#114)
        [Playback] — starts the sequencer if it’s stopped or re-starts the running sequence (CC#115)
        [Record] – toggle the sequence recording mode (CC#116)
        [Add Rest] – adds a rest after the current step (CC#117)<-- versteckt sich in der Zeile [Record] (das ENTER wurde scheinbar vergessen)
        [Add Tie] – toggles the “tie” modifier on the current step (CC#112)
        [Add Half] – toggle the “half” modifier on the current step (CC#110)
        [Add Strum] – toggle the “strum” modifier on the current step (CC#113)
        [Add Accnt] – toggle the “accent” modifier on the current step (CC#111)
        [Del Step] – deletes the current step (CC#118)
        [Clr Step] – clears the current step notes and modifiers (CC#109)
        [Clear Seq] – clears the sequence removing all steps (CC#119)
    
    Note that “Add …” CCs act both during recording and playback. When received during playback they temporarily modify the next played step without affecting the stored sequence. Good for live playing! Click and turn the encoder to select Control Change Number. Click the encoder again when done. Press the switch to set the default Control Change Number. Press the switch again to restore the original value.
    Und da ich ja sowieso einen Midicontroller baue (in dem der Sequenzer drin sitzt) schalte ich einfach Miditechnisch den Sequenzer hinter den Controller, kann dann gleich meine Noten damit aufzeichnen UND mittels speziell zugewiesener Taster, die gewünschten "Shortcuts" (CC#) des Sequenzers ansprechen.
    Die CC# sind natürlich über den Sequenzer frei wähl,- und speicherbar - da hat jemand mitgedacht :supi: :cool:

    Danke :mrgreen:

    hier noch nen schmankerl: meine aktuelle finale version der Oberfläche

    x und + sind Bohrungspunkte
    rosa wird komplett ausgeschnitten
    hellgrau sind unter der Frontplatte liegende Elemente, deren Größe beachtet werden sollte
    dunkelgrau sind Flächen, welche durch Elemente auf der Oberfläche verdeckt werden

    das ganze als invertiertem Aufkleber zu haben wäre himmlisch (komplett schwarz mit weißem Text)
    die Buttons werden nachgegossene TB-303 Taster sein - transparent natürlich - und mit orangenen SMD-LED's von hinten beleuchtet sein
    die 3 LED's (LFO, HOLD und REC) werden orangene 3mm LED's sein - alles passend zum Amberfarbenen Display
    sieht dann ähnlich dem SUB37 von Moog aus, nur sind da die LED's eher gelblich

    ..achja.. neben das Keyboard-Feld kommt noch ein kleiner Playstationcontroller-Joystick für Pitch und Modulation

    LG
    -otto :kaffee:
     

    Anhänge:

  22. klangsulfat

    klangsulfat Gut druff

    Es heißt OSCILLATOR :D
     
  23. 303otto

    303otto Tach

    ja, ich hatte schon rumgerätselt :mrgreen:
    schei*e.. doch nen räschtchreipveller drin :lollo:

    thx für den Hinweis :supi:

    hatte die ganze zeit nur den Roland SH-101 vor der Nase und da hamm'ses sich ganz einfach gemacht und das Teil einfach nur VCO genannt :cool:

    :kaffee:
     
  24. 303otto

    303otto Tach

    wie wärs hiermit?


    hier eine vorherige Version: :mrgreen:


    LG
    -otto :kaffee:
     

    Anhänge:

    • 1.png
      1.png
      Dateigröße:
      238,4 KB
      Aufrufe:
      149
    • IMAG1248.jpg
      IMAG1248.jpg
      Dateigröße:
      1,2 MB
      Aufrufe:
      149
  25. 303otto

    303otto Tach

    kleines Update zwischendurch (wärend ich auf diverse IC's warte):




    LG
    -otto :kaffee:
     

    Anhänge:

  26. Anonymous

    Anonymous Guest

    :supi:

    und danke auch fürs Teilen...schaut echt Top aus
     
  27. Mr. Roboto

    Mr. Roboto positiv eingestellt

    Ich find's ja immer wieder klasse zu sehen, was manche Leute für einen Aufwand betreiben um sich Ihren persönlichen Traum vom Wunschgerät zu erfüllen. Vor allem, wenn sie dann nicht einfach mittendrin aufhören.
    Super!
     
  28. Anonymous

    Anonymous Guest

    Das empfinde ich auch als Kunst :supi:
     
  29. 303otto

    303otto Tach

    Meine Frau sagt immer: "Wenn ich was wirklich will, bekomme ich es auch!"
    Mein Vater sagte immer: "'Geht nicht', gibts nicht!"

    das muss abgefärbt haben :mrgreen:

    Für mich ist der Antrieb bei diesem Projekt, dass ich am ende ein weiteres Musikinstrument haben werde, welches genau das kann, was mir in meinem Setup noch fehlt: einen einfach zu bedienenten BassSynth, dessen Sound nach 'ACID' schmeckt :lollo:
    Manchmal braucht es etwas mehr als nur eine 303 dafür (nein, keine 2. - das hab ich ausprobiert ;-) ).

    Letztes Wochenende hab ich über einen Kumpel erfahren, dass er jemanden kennt, der mir eine schwarz eloxierte Alu-Platte Lasern kann :idea:
    Da mein Kumpel Tischler ist, steht einer Holz-Aufwertung des Controllers auch nix im Wege... kurz gesagt: "Es ist zu spät, um aufzuhören!" bzw. "Es wäre töricht, damit aufzuhören!" :floet:

    ...ich freu mich so :mrgreen:

    LG
    -otto :kaffee:
     
  30. 303otto

    303otto Tach

    UpdateTime:
    Da die IC's immernoch unterwegs sind, hab ich schonmal die Schaltung für die Poties und Buttons entworfen..


    und hier die Platinenansicht


    ist noch nicht ganz fertig.. die sockets für die Poties fehlen noch, aber das ist nurnoch "fleißarbeit" :mrgreen:

    Ich hab 2 Platinen gewählt, da ich soche in dieser Größe grad massig da hab und weil sich die IC's so besser verdrahten lassen - sonst hätte ich ohne Ende Jumper auf der Platine.

    Als nächstes werde ich die Keyboardmatrix-Platine entwerfen.. dazu hätte ich aber schon sehr gern meine bestellten 74HC595-IC's da, um das vorher mal aufm Breadboard zu testen :roll:


    achja... die Multiplexerbelegung (falls es jmd interessiert)

    die Play und Stop-Buttons mussten leider weichen, da ich keine freien Eingänge am MCU mehr habe..
    hab auch alles mögliche durchgespielt aber am ende gab es immer nur eine Lösung um alles unterbringen zu können: Ein größerer Microcontroller
    Arduino Mega oder Teensy 2.0++

    Der Mega wäre ja noch erschwinglich (aber braucht dann wieder 30 Tage um hier einzutrudeln) aber der Teensy war mir dann doch zu teuer. :-|

    Dann halt 2 Atmega328p. Erstens liegen die hier bei mir grad rum und 2.: die sind schon bezahlt :mrgreen:
    Auch müsste ich sonst den Code für den Controller (Poties+Buttons) und den Keyboardmatrix-code irgendwie zusammenfrickeln.. und dazu hab ich grad nicht die Lust.. und ob das überhaupt so klappt?.. meh.. so gehts doch auch ;-)

    Am Ende kommunizieren eh alle Schaltungen über Midi miteinander und dadurch brauch ich mir keine Gedanken über Auslastung der MCU oder solch Gedöhns machen :mrgreen:

    Die Reihenfolge der einzelnen Platinen wäre dann folgende: (alles über MidiIN/Out miteinander verbunden)
    MidiIN -> KeyboardMatrixPlatine -> Potie/ButtonsPlatine -> MidiSeqPlatine -> MidiOut -> MidiIN Nord Micro Modular :idea:
    Alles natürlich auf dem selben Midikanal. Da ich in meinem Setup über Midi nur Start/Stop und Clock übertrage, dürfte das auch nicht weiter behindern.

    so... genug geschwafelt :mrgreen:
    LG
    -otto :kaffee:
     

    Anhänge:

Diese Seite empfehlen