Jump to content

Recommended Posts

Posted

Hallo zusammen

erstmal vorweg: Ich bin ziemlicher Newbie auf dem Gebiet Midibox...

Ich will mir einen Midi Controller mit 32 Reglern und 64 Tastern mit LEDs bauen. Komponenten etc. ist soweit alles klar.

Meine Frage: Ist es möglich die LEDs mehrerer Taster (z.B.: Taster1 - Taster10) in folgender Art zu verknüpfen? ???

- wenn Taster_x gedrückt wird leuchtet die zugehörige LED ganz normal auf

- wenn nun irgendeine andere Taste aktiv wird, soll die LED von Taster_x deaktiviert werden und die LED der gerade aktivierten Taste leuchten.

-> Es soll also immer nur eine LED für die Tasten 1-10 aktiv sein

-> die gerade aktivierte Taste schaltet und aktiviert die LED und deaktiviert alle anderen LEDs OHNE die anderen Buttons zu deaktivieren/betätigen

Posted

Mit ein bisschen Programmieren ist das kein Thema...

Grüße, ilmenator

Ok, gut das das Ganze zu programmieren ist...

Aber ein kleiner Wink in die richtige Richtung wäre nicht schlecht  :-\

Ich vermute mal das ich die Funktion der entsprechenden Buttons und der zugehörigen LEDs in der main.asm oder in der mb64_leds.inc ändern muss  ???

Posted

Evtl. funktioniert es auch mit einer Aenderung in mb64_button.inc. Dort gibt es bspw. die Funktion "MB64_BUTTON_Toggle", welche (wenn sich der Taster im Toggle Modus befindet) eine LED beim ersten druecken ein- und beim naechsten druecken ausschaltet. Hier koennte man abhaengig von der Button Nummer auch verschiedene Flags des MB64_BUTTON_VALUES_SR0 arrays gleichzeitig setzen/loeschen

Falls Dir die Assemblerprogrammierung zu kompliziert wird (ich gebe zu, an diesen Stellen habe ich zuviel optimiert ;-), koenntest Du die Steuerungslogik immer noch mit C realisieren, muesstest dabei jedoch auf die speziellen Features der MB64 Applikation verzichten, denn die vertraegt sich nicht mit C

Gruss,

        Thorsten.

Posted

Hallo nochmal

Den optimierten Assembler-Code will ich mir eher nicht reinziehen:) Aber da gibts doch eine Variante nur mit 64 Reglern und bis zu 128 Buttons und LEDs... Mehr will ich ja eigentlich nicht.

Da könnte man doch am Ende der Funktion USER_DIN_NotifyToggle die entsprechenden Abfragen viel leichter einbauen, oder?

Gibts eigentlich eine Funktionsreferenz für die Assembler-Befehle?? Ich hab mir mal die Datenblätter des PIC18F452 gesaugt, aber da fehlen viele Befehle...

Posted
Den optimierten Assembler-Code will ich mir eher nicht reinziehen:) Aber da gibts doch eine Variante nur mit 64 Reglern und bis zu 128 Buttons und LEDs... Mehr will ich ja eigentlich nicht.

Da könnte man doch am Ende der Funktion USER_DIN_NotifyToggle die entsprechenden Abfragen viel leichter einbauen, oder?

Du meinst das C-Beispiel (ain64_din128_dout128_v2_0)?

Da lässt sich das natürlich leichter einbauen. Aber es fehlen dir dann natürlich alle Features der MB64.

Gibts eigentlich eine Funktionsreferenz für die Assembler-Befehle?? Ich hab mir mal die Datenblätter des PIC18F452 gesaugt, aber da fehlen viele Befehle...

Da sind eigentlich alle Befehle drin (Kapitel 20 und 20.1). Welche vermisst Du denn?

Ansonsten gibts halt noch das allgemeine Manual für den PIC18 (http://ww1.microchip.com/downloads/en/DeviceDoc/39500a.pdf).

Da sind die Befehle dann im Kapitel 31.

Gruß,

Raphael

Posted

Danke Raphael!

Ich hab das Ganze jetzt in C gemacht. Meine Lösung sieht folgendermaßen aus:

void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam
{
	if(pin_value==0x00) //nur beim Herunterdrücken der Taster reagieren
	{
		// Midi Events senden
		MIOS_MIDI_TxBufferPut(0x90);	// Note Event at channel #1
		MIOS_MIDI_TxBufferPut(pin);      // just forward the pin number (0..127)
		MIOS_MIDI_TxBufferPut(0x7f); 	// Velocity = 0x7f when button pressed

		// verknüpfte Buttons 1-32
		if(pin < 33)
		{
			MIOS_DOUT_SRSet(1, 0x00);	//löschen der ersten 32 LEDs
			MIOS_DOUT_SRSet(2, 0x00);
			MIOS_DOUT_SRSet(3, 0x00);
			MIOS_DOUT_SRSet(4, 0x00);
			MIOS_DOUT_PinSet1(pin);		  //Setzen der zugehörigen LED
		}
		// die übrigen Buttons toggeln die LEDs
		else
		{
			if(MIOS_DOUT_PinGet(pin)==0)	// LED aus -> LED an
				MIOS_DOUT_PinSet1(pin);
			else					    // LED an -> LED aus
				MIOS_DOUT_PinSet0(pin);
		}
	}
}

Compilieren tuts schon mal, aber ich habs noch nicht getestet, da mein Controller noch nicht ganz fertig ist...

Frage: Stimmt meine Zählweise bei den Buttons + LEDs und den Registern ??? (pin von 1 ab und die Shift-Register bei MIOS_DOUT_SRSet auch ab 1)

Grüße

Joscha

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...