Ich würde Dir ein 2 Input and Gate empfehlen, Google mal danach.
So bist du unabhängig von der Notenlänge. Ich habe mal eine 909 Bassdrum nachgebaut und die ist sehr abhängig von der länge des triggerimpulses, und mit einem 2 Input and Gate kann man sehr gut mit dem Kondensatoren die richtige Länge einstellen.
Ich wuerde es digital loesen, doch das erfordert natuerlich ein paar kleinere Modifikationen an der MIDIO128.
Am einfachsten waere es, wenn Du USER_SR_Service_Finish alle DOUT Pins zuruecksetzt, die an das Drummodul angeschlossen sind.
Bspw. mit MIOS_DOUT_SRSet (setzt alle 8 Ausgaenge eines Shiftregisters)
Um die ersten drei Shiftregister zurueckzusetzen, muesstest Du die Funktion (in main.asm) wie folgt erweitern:
USER_SR_Service_Finish
clrf MIOS_PARAMETER1
movlw 0x00
call MIOS_DOUT_SRSet
movlw 0x01
call MIOS_DOUT_SRSet
movlw 0x02
call MIOS_DOUT_SRSet
return
[/code]
Das waere dann auch schon alles ;-)
Und so funktioniert es: eine Note On Meldung setzt das DOUT Register auf "1", der Wert wird mit dem naechsten SRIO Update Cycle (default periode: 1 mS) an die Shift Register uebertragen. Nachdem das geschehen ist, setzt die kleine Erweiterung in USER\_SR\_Service\_Finish den Wert wieder auf 0 zurueck, und dieser wird beim naechsten Update Cycle uebertragen. Daraus folgt dann eine Pulslaenge von 1 mS.
Gruss,
Thorsten.
/Edit: schreibfehler im programm gefixed