Jump to content

"Midizentrale" im Eigenbau?!


Guest cyan
 Share

Recommended Posts

(achtung: langer thread *g*)

Erst einmal ein frohes Neues im Nachhinein :). So, nun zu meinem Problem. Ich hoffe dass ich hier richtig bin, da es sich schließlich um ein "Midiprojekt" handelt und ich mir ein folgendes "Gerät" (Midizentrale) zusammenbauen möchte. Zunächst sei gesagt, dass ich Gitarrist bin und in meinem Rack verschiedene Teile (Effekte/Preamps) über eine Midifußleiste ansteuere. Diese Midifußleiste sendet einfache Prg.-Change Msg. (01-99) zu meinem Rack, wo sich meine Gerätschaften entsprechend umschalten bzw. mir die Möglichkeit für 99 verschiedene Sounds bietet).

Nun habe ich allerdings das Problem, dass ich es hasse immer darauf zu achten, den richtigen Fußschalter an meiner Leiste zu treffen wie oft kommt es doch vor, dass man leicht verrutscht und deshalb einen verkehrten Sound auswählt.

Nun dachte ich darüber nach wie ich dieses Problem lösen könnte. Ein Gerät, in welches man die Sounds (bzw. Prg-Change-Msg.) in Reihe programmieren kann, welche sich mit nur noch 2 (und nicht mehr 10 *g*) einfachen Fußschaltern abrufen lassen (vor/zurück).

Zunächst müsste eine solche "Midizentrale" die Möglichkeit für 3 Modis bieten:

-      Song modus

-      Setlist modus

-      Live modus

Im Song-Modus, wähle ich zunächst ein Lied aus dem internen RAM des Gerätes an (Nr.001-999). Anschließend programmiere ich für diesen Song (bspw. 027), die Prg.-Change Msg 03, 01, 03, 01, 04, 03 hintereinander und speichere das ganze ab. Dies mache ich mit all meinen Liedern.

Im Setlist-Modus, programmiere ich nun die im RAM abgespeicherten einzelnen Lieder (siehe Song-Modus) für einen Auftritt hintereinander. Bspw:

1.      Lied Nr. 027 (03-01-03-01-04-03)

2.      Lied Nr. 002 (03-01-03)

3.      Lied Nr. 112 (01-04-02-01)

4.      Lied Nr. 073 (04-06-01-06)

Im Live-Modus startet nun das Gerät mit Lied 027 und sendet durch MIDI-OUT die Prg.-Change Msg 03. Wenn ich nun auf mein Pedal vorwärts drücke, anschließend 01, 03,01, usw., so dass alle Sounds nun so hintereinander programmiert sind, wie ich sie für meinen Auftritt benötige, und nur noch mit 1 Pedal für vorwärts und 1 Pedal für rückwärts aufrufen kann.

Das ganze sollte am besten auf einem Display dargestellt sein Bspw:

Setlistposition/SongNr/Sound.

über Details könnte man sich noch streiten, ABER, nun die große Frage:

ich hoffe ich konnte erläutern um was es sich bei dem Gerät handeln soll; ist so was "realtiv" leicht realisierbar und wie geht man dabei am besten vor. (soll jetzt keine Bau-Erklärungs-Anleitung-bitte sein *g*). Ich wäre nur für ein paar kleine Tipps dankbar (evtl. welche platine benötigt, woher ich die Bauteile bekommen könnte, etc.)

Vielen Dank im Vorraus!

Link to comment
Share on other sites

Hallo Cyan,

realisieren laesst sich dieses Geraet mit dem MBHP Core Modul, einem LC-Display und Tastern/Schaltern, die man direkt an das Core-Modul anschliesst. Die Bauteile kann man am guenstigsten bei Reichelt beziehen, die Kosten liegen schaetzungsweise bei ca. 35 EUR. Fehlt dann nur noch die Firmware, und hier wird es dann auch schon etwas aufwaendiger - dein Wunschcontroller erfordert naemlich ein User-Interface, das bisher von den MIDIboxen noch nicht unterstuetzt wird. Du musst also eine Menge selbst programmieren, und das erfordert Mikrocontroller-Kenntnisse... hierzu koennte ich Dir ein paar Tips geben, aber die meiste Arbeit wird bei Dir bleiben. Am besten schaust Du Dir mal die Beispielsourcen unter Concepts->MBHP->Test Programs an, um abzuschaetzen, was da auf Dich zukommt. Auf den ersten Blick mag der Assemblercode vielleicht kompliziert aussehen, aber das gibt sich, sobald man damit "herumspielt" und die Moeglichkeiten erfasst hat. Die juengste Success-story schrieb mir jemand aus Suedafrika, der - ohne Vorkenntnisse - auf Basis der Beispiele eine luxerioese Mikrocontrollersteuerung fuer eine Kirchenorgel realisiert hat :)

Gruss,

Thorsten.

Link to comment
Share on other sites

Hallo Thorsten,

zunächst einmal vielen Dank für Deine Antwort. Leider muss ich sagen bin ich in dieser Materie (noch) nicht so vertraut, denke aber, dass nichts unmöglich ist - man muss sich nur genug damit beschäftigen, also auf in den Kampf :)

1. Das MBHP Core Modul fungiert, soweit ich richtig verstanden habe, als "MIDI-kern", welches für die Verarbeitung von Midisignalen gedacht ist (bzw. welches mit MidiIN/MidiOUT/... Buchsen versehen werden kann --> LTC Module=?!). Fungiert dieses auch als I/O Port, wo ich später meine Taster (ca. 10) anschließen kann, oder benötige ich diesbezgl. noch ein I/O Board --> DIN Modul=!?).

2. Inwieweit, nun die Frage, läßt sich dieses mit RAM erweitern (natürlich reichen ein paar kb), so dass ich recht vieler solcher Signalketten als Bibliothek auf dem späteren Gerät dort abspeichern kann.

3. Kann man jedes beliebiges Display an dieses anschießen bzw. passend machen?! Nach meinen Vorstellungen sollte es später einmal ein schön großes, rotes LED (ca. 15 Stellen) haben, so dass man auch auf Entfernung im "dunkleren" Licht es noch gut erkennen kann.

Beste Grüße

Benjamin

Link to comment
Share on other sites

Hallo Benjamin,

Zu 1) ja, das Core Modul ist das Herz jeder MIDIbox, die restlichen Module sind Interfaces. Das LTC bietet keinen zusaetzlichen MIDI In/Out-Port so wie man es z.B von einer PC-Steckkarte erwarten wuerde, sondern bietet lediglich die Moeglichkeit, das Rx/Tx-Signal mit LEDs sichtbar zu machen, die Signale verstaerkt auf zusaetzliche MIDI-Buchsen zu geben und/oder die MIDI-Daten von einem RS232 Port zu beziehen.

Das DIN-Modul ist der Standardweg um digitale Eingangssignale zu verarbeiten. Es gibt aber auch andere Moeglichkeiten, so koenntest Du beispielsweise die Taster aehnlich wie bei der MIDIbox Plus anschliessen (nach dem Multiplex-Verfahren). An welchen Pins Du die Tasten anschliesst, liegt an Dir, es waere z.B problemlos moeglich, die freien Analogen Pins (AN0-AN7) dafuer zu verwenden, per Multiplexing koennten so 16 Tasten abgefragt werden.

Zu 2) Du moechtest die Daten nicht wirklich im RAM abspeichern, dort gehen sie naemlich nach dem Ausschalten verloren. Ich wuerde sie entweder im internen EEPROM abspeichern (hier stehen 256 bytes zur Verfuegung) oder im internen Flash (8192*14 bit, beim PIC18F452 16384*16 bit - der Flashspeicher kann "nur" ca. 100000 mal ueberschrieben werden, aber das sollte hier nicht weiter stoeren) ablegen. Oder gleich in einem externen EEPROM (also in einem "BankStick), was fuer Deine Anwendung die perfekte Loesung waere, weil Du auf diese Weise z.B fuer jede Performance einen eigenen Stick vorbereiten koenntest, und den Stick sogar extern gegen Ueberschreiben schuetzen koenntest, sodass die Daten nicht ungewollt geloescht werden.

Btw. gleich noch ein weiterer Hinweis: nimm unbedingt einen PIC18F452. Ich habe fuer diesen Chip zwar noch keine Beispiele vorbereitet, aber er laesst sich wesentlich einfacher programmieren, weil der Speicher nicht mehr fragmentiert ist. Ausserdem kostet er nicht viel mehr als ein PIC16F877 (ca. 10 Euro). Und noch ein Geheimtip: bei Microchip kann man sich kostenlose Samples bestellen, die direkt ab Taiwan per Fedex-Versand verschickt werden und zwei Tage spaeter eintreffen. Auf diese Weise koenntest Du Dir auf die Schnelle 3 18F452 und 3 24LC256 beschaffen ;-)

Zu 3) theoretisch ja, praktisch musst Du fuer speziellere Displays auch einen eigenen Treiber schreiben, moeglicherweise muesstest Du sogar fuer ein grosses LED-Display die gesamte Ansteuerung selbst uebernehmen (so wie beim MTC-Beispiel): das erfordert zusaetzlichen Hardware-Aufwand (DOUT Modul)

Gruss,

Thorsten.

Link to comment
Share on other sites

Ok, der grobe Aufbau wäre dann wie folgt:

http://home.arcor.de/cy/cyan_0660/midizentrale.jpg

Dies wäre sozusagen die einfachste Möglichkeit.

- Würde ich ein anderes LCD anschließen, müßte ich demnach noch ein DOUT Modul zwischen den Core und dem LCD hängen. In dem anderen Fall mit dem "standartdisplay" von deiner Seite benötige ich dies also nicht!

- Aus Erfahrung deinerseits: ich möchte das später in einem leeren 19" Gehäuse unterbringen. Welche Taster für die Eingaben welche vorne am Gehäuse angebracht werden sollen könntest du dafür empfehlen?

- natürlich das JDM Module nicht vergessen!

- Ansonsten die benötigten Teile nun bestellen und mit der Bastelei beginnen...?!

Vielen Dank nochmals für deine nette Hilfe!

PS: Das mit dem BankStick ist eine klasse Idee!

Link to comment
Share on other sites

Ja, sieht soweit in Ordnung aus. Die Buttons kannst Du wie gesagt auch direkt an die freien Pins (mindestens 10) anschliessen.

Tip zum Bestellen bei Reichelt: 10k und 220 Ohm Widerstaende am besten im 100ter Pack bestellen, dann gibt es Rabat. Ausserdem kann man gerade in der Digitaltechnik diese Widerstaende immer mal gebrauchen (z.B als Pull-Up oder Serienwiderstand)

Taster: ich wuerde den Typ "DT_6" nehmen, den muesstest Du aber auf einer Lochrasterplatine aufloeten und diese dann intern ueber einen Winkel befestigen. Deshalb: am besten auch gleich 1-2 Lochrasterplatinen mitbestellen (H25PR200)

Gruss,

       Thorsten.

Link to comment
Share on other sites

Ersteinmal nochmals vielen Dank für Deine freundlich Hilfe - hätte da noch eine kleine Frage offen:

wenn ich nun nicht die 2x16, 2x20 LCD benutzen möchte, sondern je 4 mal 3 LEDs (für die Darstellung 4 zahlenpaare 000-999) wird die Sache dann "deutlich" komplexer zu programmieren bzgl. eines eigenen "treibers" - ähnlich MTC?! Die Frage beruht sich darauf, dass es sicherlich am einfachsten wäre, das "standart" LCD zu benutzen, aber ich auf der Bühne auch auf entfernung noch die einstellungen sehen müßte (über "schöne große rote" LED bspw. - nur Zahlen/kein text nötig). ...ich meine nur, dass warscheinlich das "standart" LCD zu klein wäre

Link to comment
Share on other sites

Unter diesen Umstaenden wuerde ich auf LED-Digits nicht verzichten. Dazu benoetigst Du keine einzelnen LEDs, es gibt die Digits auch fix und fertig bei Reichelt zu kaufen: SA_08-11_rt

Das MTC-Beispiel unter Concept->Test Programs mag zwar kompliziert aussehen, im Grunde laesst es sich aber Plug-and-Play maessig integrieren. Mit dem PIC18F wird wie gesagt alles einfacher und kompakter; fuer diese Plattform werde ich Beispiele bereitstellen, die auf dem "MIOS" basieren (ein selbstgebasteltes Betriebssystem, das die grundsaetzlichen Verwaltungsaufgaben fuer MIDI-Anwendungen uebernimmt). Uebrig bleibt dann im Grunde nur noch die Codierungstabelle fuer die LEDs unter contab_l.inc. Die Digits koennen dann jederzeit mit einfachen Registerzugriffen beschrieben werden:

        movlw   0x01
        movwf   LED_DIGIT0
        movlw   0x02
        movwf   LED_DIGIT1
        movlw   0x03
        movwf   LED_DIGIT2
        movlw   0x04
        movwf   LED_DIGIT3

den Rest uebernimmt das Betriebsystem. Einfacher geht es dann glaube ich nicht mehr. ;-)

Gruss,

       Thorsten.

Link to comment
Share on other sites

mal wieder 2 Fragen :):

- Läßt sich der PIC18F452 genau wir der "alte" mit den standart PIC-Burner für die 16F87x Serie programmieren?

UPDATE: geklärt - JDM Module seit der neuen Version JA

- auch wenn ich mich hiermit als totaler Anfänger oute - sorry: Die ganzen Teile für den CORE, JDM, DOUT, DIN werden ja aus seperate Plainen gelötet. Jetzt überflog ich für den CORE den Soldering Guide und fragte mich: woher bekomme ich eigentlich eine sole Platine (auf der schon die Leiterbahnen vorgefertigt sind....

UPDATE: geklärt - bei mikes elektronik seite lieferbar

Link to comment
Share on other sites

...der PIC18 läuft ja im Gegensatz zum PIC16 mit 40 MHZ. Kann ich nun für den Core exakt die gleichen Bauteile benutzen, oder benötige ich evtl. einen 40MHZ Quarz o.ä.?

Link to comment
Share on other sites

Nein, Du benoetigst einen 10 MHz Quarz. Um sicherzusterzustellen, dass Du diesen seltsamen Wert nicht fuer einen Schreibfehler haelst, schreibe ich ihn gerne nochmal aus: zehn Megahertz... ;-)

Der Grund: der interne Oszillator kann nur bis 25 MHz schwingen, im PIC18F ist jedoch auch eine PLL integriert, die die Frequenz vervierfacht. Leider ist dieser Faktor fest eingestellt, deshalb muss der Quarz ausgetauscht werden.

Ansonsten sind alle Bauteile identisch mit der PIC16F Version.

Gruss,

       Thorsten.

Link to comment
Share on other sites

- Benötige ich von der www.microchip.com seite das MPLAB IDE oder MPLAB C18 Entwicklungskit?

- welche tools/docs könntest sollte ich mir diesbezüglich noch besorgen (wie gesagt - muss mich damit noch sehr vertraut machen *g*)

grüße, Benjamin

Link to comment
Share on other sites

Du benoetigst das MPLAB ICE.

MPLAB C18 habe ich noch nicht ausprobiert, aber dahinter versteckt sich soviel ich weiss sowieso nur eine Demo-Version des (teuren) C-Compilers.

Ansonsten solltest Du Dir mal das Datasheet und das Manual herunterladen:

Products->Microcontrollers with analog capability->28-40/44 pin 2k-16k word (3.6k-32k bytes)->PIC18F452->PIC18Fxx2 datasheet

sowie

Engineers Toolbox->Reference Manuals->PIC18C MCU Family Reference Manual

Gruss,

       Thorsten.

Link to comment
Share on other sites

Super, vielen Dank! Hab ich mir nun besorgt. Inzwischen sind auch meine "samples" aus thailand eingetroffen, war echt guter Tipp. Dabei handelt es sich um:

- 2 x 24LC256 (MemoryStick)

- 2 x PIC18F452-I/P (CoreModule/für was steht eigentlich I/P?)

ich gehe mal davon aus, dass dies die "grundlegenden" richtigen Teile sind.

Gruß

Benjamin

PS: folgendes Problem: beim CORE Modul sind seltsamerweise bei mir die Füße des RECTRIFIER(B80C800RUND - bestellt bei Reichelt) zu d ick, dass sie nicht durch die Platine passen ?!

Link to comment
Share on other sites

Ja, Du hast die richtigen Teile erwischt. :)

I/P steht fuer den Package-Typ und den erlaubten Temperaturbereich, die genaue Codierung ist im Datasheet zu finden. Doch solange Du keinen Controller fuer automotive oder militaerische planst, musst Du das nicht weiter beachten. ;-)

PS: folgendes Problem: beim CORE Modul sind seltsamerweise bei mir die Füße des RECTRIFIER(B80C800RUND - bestellt bei Reichelt) zu d ick, dass sie nicht durch die Platine passen ?!

Evtl. hat Michael vergessen, die Loecher fuer den Gleichrichter breit genug zu bohren... am besten drehst Du nochmal einen kleinen Schraubenzieher durch, so geht das am schnellsten

Gruss,

       Thorsten.

Link to comment
Share on other sites

Das mit der Vergrößerung der Löcher für den Gleichrichter hat wunderbar funktioniert :)

Nun mal was neues: nachdem jetzt nun alles "fertig" gelötet ist und es nun langsam zur Programmierung geht folgende Frage: woher bekomm ich am besten Informationen wie ich meine LEDs ansteuern kann UND wie ich diese mit dem DOUT verbinde - wie gesagt, ich habe bis vor 2 Wochen noch nie mit soetwas o.ä. zu tun gehabt *hüstel* ;) - blutiger Anfänger - sorry

beste Grüße

Benjamin

Link to comment
Share on other sites

Hallo Benjamin,

damit Du bis zur MIOS Release beschaeftigt bist, habe ich mal schnell das MTC Beispiel auf den PIC18F452 umgesetzt ;-)

Es befindet sich unter:

http://www.ucapps.de/mbhp/prg/dout_mtc_pic18f_v1.zip

Und der Schaltplan fuer das MTC-Display unter

http://www.ucapps.de/mbhp/mbhp_doutx4_mtc.pdf

Am besten baust Du erstmal das 8-digit-Display nach --- wenn Du moechtest, kannst Du auch schon 10 Digits fuer Dein zukuenftiges Design vorsehen, wie das dann anzusteuern ist, kann ich Dir spaeter zeigen [1]. Momentan lohnt es sich nicht, das Beispielprogramm noch mehr aufzubohren, weil es sich spaeter auf zwei Files minimieren laesst...

Ausserdem kann man spaeter den eigenen Programmcode via MIDI uploaden, was dann wesentlich schneller geht als mit dem JDM programmer --- aber wie ich bereits schrieb: das kann noch 1-2 Wochen dauern...

Die beiden wesentlichen programmteile:

sr_mtc.inc: diese Routine wird von irq.inc alle 2.5 ms aufgerufen. Mit jedem "tick" wird eine Countervariable hochgezaehlt, die dafuer sorgt, dass eines von 4 Digit-Paerchen bis zum naechsten Tick (in 2.5 ms...) sichtbar wird. Die Zeichen, die von den Digits angezeigt werden, sind in den Registern SRMTC_DIGIT_0 bis SRMTC_DIGIT_7 hinterlegt. Dieses Zeichen wird vorher noch in ein LED-Muster umkodiert, den entsprechenden Code findest Du unter SRMTC_GetCode

Diese Routine ist quasi der Display-Driver der staendig im Hintergrund laeuft. Er muss nie mehr anfasst werden, es sei denn, neue LED-Muster (z.B Buchstaben) sollen hinzugefuegt werden.

mainloop.inc: Hier laeuft das Hauptprogramm in einer Endlosschleife. Das Beispiel ist schon etwas komplexer, es zaehlt von 00000000 bis 99999999...

Du kannst den Code einfach loeschen - lediglich der "clrwdt" Befehl sollte stehen bleiben, der sorgt dafuer, dass der sogenannte Watchdog immer schoen gefuettert wird, damit er den Chip nicht irgendwann resetet [2]

Auf diese Weise kannst Du z.B "12345678" auf dem Display erscheinen lassen:

MainLoop
        ; ---[ feed the watchdog ]---
        clrwdt

        ; ---[ print 12345678 ]---
        movlw   0x01
        movwf   SRMTC_DIGIT_7
        movlw   0x02
        movwf   SRMTC_DIGIT_6
        movlw   0x03

        movwf   SRMTC_DIGIT_5
        movlw   0x04
        movwf   SRMTC_DIGIT_4
        movlw   0x05
        movwf   SRMTC_DIGIT_3
        movlw   0x06
        movwf   SRMTC_DIGIT_2
        movlw   0x07
        movwf   SRMTC_DIGIT_1
        movlw   0x08
        movwf   SRMTC_DIGIT_0

        goto    MainLoop

Ich denke mal, dass das eine gute Ausgangsbasis fuer weitere Experimente ist... :)

Gruss,

       Thorsten.

[1] Die beiden notwendigen Pins muessen entweder an einem vierten Shift Register oder direkt an zwei PIC-Pins angeschlossen werden --- hier liegt es an Dir, welche Loesung Du favorisierst

[2] Einen Watchdog-Timer setzt man ein, um auf Programmfehler (Endlosschleifen, Spruenge ins Leere) oder physikalische Probleme (Stichwort: Failsave) zu reagieren.

Link to comment
Share on other sites

Das hört sich doch schonmal sehr interessant an :) Die Module habe inzwischen durchgecheckt (wie auf der Homepage beschrieben) - allerdings bekomme ich beim Überprüfen des JDM-Moduls beim "Enable Clock" (IC-Prog) etwa 3,5V anstatt 5V - der Rest passt?!

Gibt es eigentlich eine Möglichkeit meinen Bankstick auch ohne LCD-Modul auf funktionstüchtigkeit zu überprüfen?

Wenn ich das der "Anleitung" richtig entnommen habe, kann ich ja durch das Entfernen der 5 Jumper auf dem CORE das JDM Modul direkt anschließen und den PIC für die Programmierung belassen. Ich denke nur darüber nach, dass ich somit den "seriellen" Anschluss zum JDM einfach auf die Rückseite des fertigen Gerätes legen könnte und somit die Firmware des Gerätes ohne Probleme jederzeit updaten könnte?!

Link to comment
Share on other sites

Die Clock-Spannung faellt mit der Zeit auf < 4V - das ist normal.

Nein, den BankStick kann man erstmal nicht ohne LCD ueberpruefen, es sei denn, Du baust mal schnell eine MIDIbox SID nach, die gibt naemlich einen Sound aus, wenn man den BankStick ein/aussteckt ;-)

Aber warte einfach auf das MIOS, dort werden wie gesagt alle allgemeinen Funktionen verfuegbar sein, so dass Du Dich ueber solche Internas wirklich nicht kuemmern brauchst. :) WIe ich bereits schrieb: mit diesem Betriebsystem mache ich mir selbst "das Leben" einfacher, deshalb moechte ich eigentlich nichts mehr herausgeben, was in wenigen Tagen obsolet sein wird.

Ja, Du kannst den Programmierport auch einfach nach aussen legen.

Gruss,

       Thorsten.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...