Katanafloor - Pedalera USB para Katana

lutop
#73 por lutop el 28/05/2020
Otra cosa que puedes hacer es jugar con los valores de configuracion de MS3 a ver si suena la flauta:

Alguien escribió:

#ifndef MS3_WRITE_INTERVAL_MSEC
const byte MS3_WRITE_INTERVAL_MSEC = 20;
#endif

#ifndef MS3_READ_INTERVAL_MSEC
const byte MS3_READ_INTERVAL_MSEC = 200;
#endif

#ifndef MS3_RECEIVE_INTERVAL_MSEC
const byte MS3_RECEIVE_INTERVAL_MSEC = 20;
#endif

#ifndef MS3_HEADER
const byte MS3_HEADER[6] = {0x41, 0x00, 0x00, 0x00, 0x00, 0x33}; //Katana header
#endif

#ifndef MS3_QUEUE_SIZE
const byte MS3_QUEUE_SIZE = 20;
#endif
Subir
OFERTAS Ver todas
  • Harley Benton ST-20HSS SBK Standard Series
    111 €
    Ver oferta
  • -29%
    Boss T-Shirt CCB-MT2TMC (Talla M)
    15 €
    Ver oferta
  • -11%
    Boss DD-500
    375 €
    Ver oferta
lutop
#74 por lutop el 28/05/2020
Otra posiblidad para hacer troubleshooting es utilizar un programa tipo MIDIOX para enviar los mensajes desde el PC y ver si el Katana responde. Yo lo estuve haciendo cuando no me funcionaba el cambio de canal por midi.
Subir
frandelrio
#75 por frandelrio el 28/05/2020
Buenas, he probado mandar los mensajes Sysex para ponerlo en modo editor y luego mandar el envio de canal directamente sin usar la liberia MS3 y ha funcionado.

Mira esto es lo que he hecho:

void sendMidi() {
const byte HANDSHAKE[15] = {0xF0, 0x7E, 0x00, 0x06, 0x02, 0x41, 0x33, 0x03, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xF7};
const byte KATANA_EDIT[15] = {0xF0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x33, 0x12, 0x7F, 0x00, 0x00, 0x01, 0x01, 0x7F, 0xF7};
const byte CANAL2[16] = {0xF0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x33, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x7D, 0xF7};
int datalength = 15;
int datalength1 = 16;

byte result;

result = Midi.SendSysEx((byte *)HANDSHAKE, datalength);
delay(20);
Serial.print("Result: ");
Serial.println(result);
result = Midi.SendSysEx((byte *)HANDSHAKE, datalength);
delay(20);
Serial.print("Result: ");
Serial.println(result);
result = Midi.SendSysEx((byte *)KATANA_EDIT, datalength);
delay(20);
Serial.print("Result: ");
Serial.println(result);
result = Midi.SendSysEx((byte *)CANAL2, datalength1);
delay(20);
Serial.print("Result: ");
Serial.println(result);
}

Lo que no entiendo es por qué no funciona entonces la libería MS3?
Subir
frandelrio
#76 por frandelrio el 28/05/2020
Lo que está pasando es que en el init no se está inicializando el MIDI Device y entonces no carga una serie de variables para hacer los calculos.

En la librería usbh_midi.cpp no se carga la estructura epInfo y por eso no funciona. Uno de los datos que necesita es epInfo.maxPktSize que al ser 0 está provocando que no envíe el sysex correctamente.

Lo que no sé es como forzar el init, porque entiendo que cuando hace el katana.begin() desde la libería MS3, llama al usb.init()

Es más, cuando tengo el DEBUG habilitado en la libería usbh_midi, en el programa que no uso MS3 me muestra la carga del Device. Sin embargo, cuando lo hago con la librería MS3 no me muestra nada. Es como si no la llamara.

A ver si se te ocurre algo.
Subir
lutop
#77 por lutop el 28/05/2020
Que raro, porque tal y como comentas, MS3 deberia lanzar usb.init() al llamar a katana.begin()

Que versiones de las librerias utlizas? son las que puse yo en el zip? O tienes otra version?
Subir
frandelrio
#78 por frandelrio el 28/05/2020
Si son las que tu me pasaste
Subir
frandelrio
#79 por frandelrio el 30/05/2020
Bingo!!!
Lo conseguí!!!

Alucinante. Dije que parecía que no estaba haciendo el init del usb. Así que le puse un Serial.println el constructor de la librería usbh_midi.cpp para ver si pasaba por ahí.
Pues, a partir de ahí, emepezó a funcionar. Y ya consiguo cambiar de canal, que cuando cambie de canal en el katana se refresque la pedalera.

Lo que no entiendo es por qué al ponerle esa instrucción ha empezado a fucionar.
Esto es lo que le he puesto. La linea del println.

USBH_MIDI::USBH_MIDI(USB *p) :
pUsb(p),
bAddress(0),
bNumEP(1),
bPollEnable(false),
isMidiFound(false),
readPtr(0) {
// initialize endpoint data structures
Serial.println(F("inicializando epInfo"));
for(uint8_t i=0; i<MIDI_MAX_ENDPOINTS; i++) {
epInfo.epAddr = 0;
epInfo.maxPktSize = (i) ? 0 : 8;
epInfo.bmNakPower = (i) ? USB_NAK_NOWAIT : USB_NAK_MAX_POWER;

}
// register in USB subsystem
if (pUsb) {
pUsb->RegisterDeviceClass(this);
}
}
Subir
lutop
#80 por lutop el 30/05/2020
que raro. Quizas cambiando el print por un delay tambien funcione. A veces estas cosas son un poco quisquillosas con los tempos, y añadir algun delay aqui y alla ayuda.

Me alegro que te funcione. Ahora ya puedes empezar a jugar...

Que tal funciona el shift register?
Subir
frandelrio
#81 por frandelrio el 30/05/2020
Pues si, probaré a oonerle un delay

El shift register va de lujo. No se nota ningun tipo de lag, y la verdad es que con 3 pines lo controlas. Y te da 8 salidas. Y si necesitas más puedes poner otro conectado a este y te da 16 salidas.

Bueno, ahora le voy a añadir una pantalla lcd de 20x4 y ya voy a ir pensando en la caja donde meterlo todo.

Gracias por la información. Cuando lo tenga mas avanzado ire poniendo fotos.
Subir
lutop
#82 por lutop el 30/05/2020
El otro dia estuve probando un display OLED pequeñito que con dos cables lo controlas ia IIC. Muy resulton.
Subir
frandelrio
#83 por frandelrio el 30/05/2020
Es muy complicado manejarlo? Estoy valorando entre uno y otro.
Subir
lutop
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo