Jump to content

Aller Einstieg ist schwer....


Totengraeber

Recommended Posts

Hallo erst mal.

Bin vor 2 Wochen auf die Seite gestoßen und war fastziniert. Gefällt mir wirklich gut, was die Leute hier machen  :)

Nun gleich zu meiner Frage:

Mein englisch ist nicht gerade toll. Habe schon versucht viel zu lesen und es zu verstehen. Allerdings komme ich mit den Modulen nicht so recht klar. Ich weiß ehrlich gesagt nicht, was ich für was genau bräuchte. Es sei auch angemerkt, dass ich mit MIDI (außer zum Ansteuern von Effektgeräten; ProgrammChange etc.) so gut wie keine Erfahrung habe.

Was ich eigentlich vorhabe:

Ich habe ein Rack-Effektgerät gebaut und möchte das MIDI-Fähig machen.

Es sollen verschieden Presets abgespeichert werden können und auf ProgrammChange jeweils die nötigen Einstellungen wiederhergestellt werden. Pro Preset sollen folgende Werte gespeichert sein:

- Eine Bezeichnung

- Stellung von 4 Potis

- Position eines 8-Wege-Schalters

- Position eines 2-Wege-Schalters (Bypass)

Der Preset-Name soll in einem Display angezeigt werden. Die Einstellungen zu den Presets sollte man über möglichst wenig Regler an der Front einstellen können. Der Name des Presets sollte ebenfalls frei Wählbar sein. Von der Bedienung her soll das ganze etwas an das Rocktron Intellifex angelehnt sein ;)

Ist soetwas Prinzipiell mit den Möglichkeiten, die mir die hier vorgestellten Komponenten geben, möglich? Was brauch ich dazu?

Ich weiß, viele Fragen, aber hoffe jemand kann mir trotzdem weiterhelfen! Vielen Dank schon mal!

mfg

Totengraeber

Link to comment
Share on other sites

Als Anfangs-Nebenbei-Projekt eher weniger geeignet. Du müsstest alle Potis ausbauen und mit Transistoren oder so arbeiten. Statt der Reglerstellung würde jeweils eine Steuerspannung den Parameter steuern. Wenn Du dazu fähig bist, dann wär der Rest nicht sooo schwierig (MIDIbox -> DAC -> Dein Gerät)

Also ich möchte dich nicht entmutigen, selbst arbeite ich auch gerade an einem für den Anfang "etwas dick geratenem" Projekt :P

Link to comment
Share on other sites

Hi,

alisa hat Recht, das ist für den Anfang schon etwas groß…

Der Vollständigkeit halber möchte ich noch sagen, daß Du die Potis auch gegen Vactrols (eine Art "Vintage-Optokoppler") austauschen kannst, das ist einfacher.

Jedoch sind die in D recht schwierig zu bekommen bzw. dann teuer. Man kann die auch mit Lämpchen/LDRs selber machen; ich hab damit schon einiges rumexperimentiert aber es funktioniert nicht wirklich präzise.

Grundsätzlich wäre es aber machbar mit einem Core-Modul, einem DIN-Modul (für die Eingabeelemente), einem DOUT-Modul (für die Schalter und LEDs) und einem AOUT-Modul (für die Potis)…

Dann müßtest Du noch die Applikationen anpassen.

Vielleicht findest Du auch hier im "Midification"-Forum noch was, was Dir konkret weiterhilft.

:)  fabian

Link to comment
Share on other sites

Das mit den Anwendungen anpassen soll mal nicht so das Problem sein  (ich hab in 3 Wochen Abschlussprüfung zum Fachinformatiker Anwendungsentwicklung ;) ).

Potis irgendwo rausmachen müsste ich eigentlich auch nicht. Bisher existiet der Rack-Effekt nur auf dem Schaltplan - es sind also noch massig Anpassungen/Änderungen möglich.

Nur dass ich das jetzt richtig verstehe:

MIDIbox ist das Kenr-Modul. Dazu brauch ich dann das DIN-Modul, um eingaben möglich zu machen. DOUT, um eventuelle Schalter und LEDs ein- und auszuschalten und das Modul zur Display-Ansteuerung. Wenn ich das richtig verstehe kann ich noch mit dem AOUT unterschiedliche Spannungen "senden", richtig?

Momentan sehe ich das größte Problem noch an zwei Stellen:

1.) Potis durch Schaltungen/Bauteile ersetzen, die den selben Effekt wie erstere haben, aber über eine Spannung gesteuert werden können

2.) Speichern der Presets

Link to comment
Share on other sites

Hallo,

1.) Potis durch Schaltungen/Bauteile ersetzen, die den selben Effekt wie erstere haben, aber über eine Spannung gesteuert werden können

Die Potis selbst solltest du durch Encoder ersetzen. Die kommen dann an das DIN Modul. Oder du klemms die Potis an den ADC des PICs. Ich würde aber zu Encodern raten.

Zur Ansteuerung des eigentlichen Effekts könntest du z.B. per AOUT mit VCAs oder digitalen Potis arbeiten. Das hängt aber davon ab, was du denn steuern willst...

2.) Speichern der Presets

http://www.ucapps.de/mbhp_bankstick.html ist die Lösung.

Gruß,

Raphael

Link to comment
Share on other sites

Die Potis selbst solltest du durch Encoder ersetzen. Die kommen dann an das DIN Modul. Oder du klemms die Potis an den ADC des PICs. Ich würde aber zu Encodern raten.

Hmmm. Sind Encoder also sozusagen "Potis", mit denen ich digital einen Wert einstellen kann, den MIOS dann auswertet, abspeichert und bei Bedarf per AOUT wieder ausgibt?!?

Zur Ansteuerung des eigentlichen Effekts könntest du z.B. per AOUT mit VCAs oder digitalen Potis arbeiten. Das hängt aber davon ab, was du denn steuern willst...

hmm.. VCAs. Hab ich jetzt shcon öfters gelesen. Aber irgendwie finde ich per Google darüber nichts brauchbares. Irgendeine Seite, wo diese Dinger mal erklärt sind, wie sie funktionieren und wo man sie evtl. gleich bestellen kann habe ich leider noch nicht gefunden  :(

OK. Die komplette Ansteuerung davon funktioniert dann über MIOS, richtig?!?

Danke schon mal für eure Hilfe!  ;)

Link to comment
Share on other sites

Hmmm. Sind Encoder also sozusagen "Potis", mit denen ich digital einen Wert einstellen kann, den MIOS dann auswertet, abspeichert und bei Bedarf per AOUT wieder ausgibt?!?

Ja. Du hast bestimmt schon mal so ein Ding in den Fingern gehabt. Nennt man auch Endlosdrehregler.

Bei Potis hat man ja immer das Problem, dass nach dem Laden eines Presets der Poti-Wert nie gleich dem gerade geladenen Wert ist.

hmm.. VCAs. Hab ich jetzt shcon öfters gelesen. Aber irgendwie finde ich per Google darüber nichts brauchbares. Irgendeine Seite, wo diese Dinger mal erklärt sind, wie sie funktionieren und wo man sie evtl. gleich bestellen kann habe ich leider noch nicht gefunden

z. B. hier: http://home.comcast.net/~sbernardi/elec/og2/og2_dual_linear_vca.html

der CEM3330 ist auch ein Kandidat.

OK. Die komplette Ansteuerung davon funktioniert dann über MIOS, richtig?!?

siehe: http://www.ucapps.de/mios_fun.html

Da gibts folgende Funktionen:

MIOS_EEPROM_Read

MIOS_EEPROM_ReadPage

MIOS_EEPROM_Write

MIOS_EEPROM_WritePage

Für so ein Projekt wir es dir nicht erspart bleiben, dich mal intensiv mit MIOS und dem PIC-Assembler zu beschäftigen.

Alternativ könntest Du es aber auch mit C probieren:

http://www.ucapps.de/mios_c.html

Gruß,

Raphael

Link to comment
Share on other sites

Endlosdrehregler

na dass ist mir dann schon eher ein Begriff  8)

z. B. hier: http://home.comcast.net/~sbernardi/elec/og2/og2_dual_linear_vca.html

der CEM3330 ist auch ein Kandidat.

schau ich mir dann jetzt gleich mal an. Danke :)

Für so ein Projekt wir es dir nicht erspart bleiben, dich mal intensiv mit MIOS und dem PIC-Assembler zu beschäftigen.

Alternativ könntest Du es aber auch mit C probieren:

nunja. Dann hätte ich endlich mal nen guten Grund, mich gescheit in Assembler einzuarbeiten  ;D

Aber trotzdem mal die Frage: ist C diesbezüglich nicht fast schon "zu langsam"?

Link to comment
Share on other sites

nunja. Dann hätte ich endlich mal nen guten Grund, mich gescheit in Assembler einzuarbeiten  ;D

Aber trotzdem mal die Frage: ist C diesbezüglich nicht fast schon "zu langsam"?

wenn das komplett in Assembler programmierte MIOS nicht die gesamte Verwaltung der MIDI streams und analog/digital IO uebernehmen wuerde, waere C mit Sicherheit zu langsam.

Doch um diese Low-Level Driver musst Du Dich eigentlich nicht mehr kuemmern, im C Programm werden die einzelnen "Datenstroeme" nur noch umgesetzt (also bspw.: Endlosregler gedreht -> Absolutwert speichern -> MIDI Event senden), hierbei brauchst Du erstmal keine Performance-Schwierigkeiten zu befuerchten, solange sich die Datenmengen in Grenzen halten (und wenn es dann doch mal mehr zu verwalten gibt, kannst Du immer noch Inline Assembly Code in die C-Funktionen reinsetzen).

Gruss,

        Thorsten.

Link to comment
Share on other sites

Achso... Klingt ja eigentlich dann relativ "einfach".

Vom Prinzip her sollte das MIDI-Programm dann folgendes können:

1.) beim Eingang eines ProgramChange (auf dem eingestellten MIDI-Channel) die Werte des entsprechenden Presets laden, 4 (evtl. 5) Potis(*) in der Schaltung einstellen, einen 8-Wege-Schalter in die richtige Position bewegen und den gespeicherten Preset-Namen im Display anzeigen.

2.) über ein Optionen-Menü die aktuellen Werte der Endlosregler in ein Preset speichern

3.) Änderungen der Endlosregler sofort in der Schaltung umsetzen

Sollte doch eigentlich kein größeres Problem sein, oder? MIDI-Befehle senden oder so muss ich ja nicht. Von MIDI-Seite her also ganz einfach. Im Prinzip jedes eingehende MIDI-Status-Byte auf den richtigen Kanal überprüfen. Trifft das Paket zu, schauen obs ein ProgrammChange ist. Und wenns immernoch zutrifft das entsprechende Daten-Byte auswerten und umsetzen...

Die Schaltungen dazu bereiten mir nur noch etwas Magen-Schmerzen  ;)

Link to comment
Share on other sites

Ja, das ist kein grosses Problem.

MIOS bietet verschiedene Hooks, die aufgerufen werden, wenn bspw. ein Poti bewegt wurde, ein MIDI byte oder ein komplettes MIDI Event empfangen wurde, usw.

Wenn Du bspw. ein Program Change Event auf Kanal 1 (-> C0 xx) erwartest, dann sieht der Code in main.c wie folgt aus:


/////////////////////////////////////////////////////////////////////////////
//  This function is called by MIOS when a complete MIDI event has been received
/////////////////////////////////////////////////////////////////////////////
void MPROC_NotifyReceivedEvnt(unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam
{
  if( evnt0 == 0xc0 ) {
    tue_was_mit_c0(evnt1); // evnt1 contains the program change value
  }
}
[/code] Wenn das Program auf Potis reagieren soll, erweiterst Du den AIN_NotifyChange hook:
[code]
/////////////////////////////////////////////////////////////////////////////
// This function is called by MIOS when a pot has been moved
/////////////////////////////////////////////////////////////////////////////
void AIN_NotifyChange(unsigned char pin, unsigned int pin_value) __wparam
{
  switch( pin ) {
    case 0:
      // tue dies
      break;
    case 1:
      // tue jenes
      break;
    default:
      // tue gar nichts
  }
}

(vorher muss natuerlich noch in Init() die Anzahl der Potis und die Aufloesung festgelegt werden...)

am besten schaust Du Dir mal die C Beispiele an (viele gibt es noch nicht, aber das wird sich irgendwann aendern ;-) - vielleicht kannst Du ja irgendwann einmal Dein eigenes Programm als Beispiel bereitstellen?)

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...
×
×
  • Create New...