English Version French Version Spanish Version

Plataforma de Hardware MIDIbox , Módulo SpeakJet IIC

¡¡¡ Esta página está en construcción !!!

Comentarios cortos sobre las características de este módulo:

  • SpeakJet accessible vía IIC, ID de dispositivo 0x20, 0x22, 0x24 o 0x26 (seleccionable con dos jumpers en J2)
  • Adicionalmente, el SpeakJet se puede controlar desde un puerto COM. Las dos corrientes seriales son fusionadas dentro del PIC16F88
  • Para corrección de errores, el dato IIC recibido también se redirige a COM Rx
  • La tasa de baudios de SpeakJet está configurada en 19200 baudios durante el arranque
  • Circuito de Audio Amp aún no es parte del esquema -en el esquema final se incluirá una buena solución

Aplicación SpeakJet MIDIbox 

Audiocommander ha desarrollado una aplicación para este módulo! Puedes encontrar los detalles, firmware y un circuito mejorado en el Wiki MIDIbox.

Para Programadores: algoritmo de acceso MBHP_IIC_SPEAKJET 

Con MIOS V1.9 y superiores, se puede acceder al módulo MBHP_IIC_SPEAKJET con las siguientes funciones de transmisión:

//  IDs permitidas: 0x20, 0x22, 0x24 or 0x26 
// (seleccionable con J2 del módulo MBHP_IIC_SPEAKJET)
#define SPEAKJET_SLAVE_ID 0x20

// esta variable contiene la número de esclavo actual
unsigned char slave;

/////////////////////////////////////////////////////////////////////////////
// Esta función inicializa la interfaz para MBHP_IIC_SPEAKJET
/////////////////////////////////////////////////////////////////////////////
void IIC_SPEAKJET_Init(void) __wparam
{
MIOS_IIC_Stop(); // init IIC interface

slave = 0xff; // set invalid slave number
}


/////////////////////////////////////////////////////////////////////////////
// Esta función empieza una transmisión serial a SpeakJet
// termina en 0 si el dispositivo IIC está ocupado o no disponible
/////////////////////////////////////////////////////////////////////////////
unsigned char IIC_SPEAKJET_TransmitStart(unsigned char _slave) __wparam
{
unsigned char retry_ctr;

// invalidar número de esclavo
// (para evitar que TransmitByte envíe algo si el esclavo no está disponiible)
slave = 0xff;

// inicia acceso IIC
MIOS_IIC_Start();

// envía dirección
retry_ctr = 0;
while( !MIOS_IIC_ByteSend((SPEAKJET_SLAVE_ID & 0xfe) + (_slave << 1)) ) {
// el esclavo ha enviado un NAK - reintentar 255 veces
MIOS_IIC_Stop();
if( ++retry_ctr == 255 )
return 0;
MIOS_IIC_Start();
}

// almacena número de esclavo
slave = _slave;

return 1;
}

/////////////////////////////////////////////////////////////////////////////
// Esta función envía un byte al SpeakJet
// la transferencia debe ser iniciada primero vía IIC_SPEAKJET_TransmitStart
// termina en 0 si el dispositivo IIC está ocupado o no disponible
/////////////////////////////////////////////////////////////////////////////
unsigned char IIC_SPEAKJET_TransmitByte(unsigned char value) __wparam
{
unsigned char retry_ctr;

if( slave == 0xff )
return 0;

// envía byte
retry_ctr = 0;
while( !MIOS_IIC_ByteSend(value) ) {
// el esclavo ha enviado un NAK - reintentar
// ¡ hay que enviar de nuevo la dirección!!
if( !IIC_SPEAKJET_TransmitStart(slave) )
return 0;
}

// Se ha transmitido el paquete completo 
return 1;
}

/////////////////////////////////////////////////////////////////////////////
// Esta función termina una transferencia al SpeakJet
/////////////////////////////////////////////////////////////////////////////
void IIC_SPEAKJET_TransmitStop(void) __wparam
{
// detiene acceso IIC
MIOS_IIC_Stop();

// invalidar número de esclavo
// (para evitar que el esclavo mande algo antes de que haya empezado la transferencia)
slave = 0xff;
}

Ejemplo que solo redirige los Eventos de Nota entrantes hacia el SpeakJet:

/////////////////////////////////////////////////////////////////////////////
// MIOS llama a esta función después del arranque para inicializar la aplicación
/////////////////////////////////////////////////////////////////////////////
void Init(void) __wparam
{
// init interface to MBHP_IIC_SPEAKJET
IIC_SPEAKJET_Init();
}

/////////////////////////////////////////////////////////////////////////////
// MIOS llama a esta función cuando se ha recibido un evento MIDI completo
/////////////////////////////////////////////////////////////////////////////
void MPROC_NotifyReceivedEvnt(
unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam
{
if( evnt0 == 0x90 ) {
IIC_SPEAKJET_TransmitStart(0);
IIC_SPEAKJET_TransmitByte(evnt1 | 0x80);
IIC_SPEAKJET_TransmitStop();
}
}

Descarga

los datos PCB se pueden visionar, modificar y convertir con  Eagle Light
Módulo Esquema Datos de baseVista rápida
MBHP_IIC_SPEAKJET mbhp_iic_speakjet_prelim.pdf base final en construcción -
Firmware
Archivo TamañoDescripción
mbhp_iic_speakjet_v1_0b.zip 20k Este paquete contiene el firmware precompilado y el código fuente para PIC16F88

Nota importante para usuarios del MBHP_CORE_V2: Se necesita una resistencia pull-up adicional de 1k entre Vd y la línea SC, debe soldarse directamente en CORE::J4 para permitir "estrechamiento de reloj" ("clock stretching"). Este es un método para retrasar las transferencias seriales cuando un esclavo no puede responder inmediatamente a una petición del master. La resistencia pull-up para la línea SD ya está disponible en el módulo core (CORE::R2).
Los usuarios de MBHP_CORE_V3 se drán cuenta de que ambas resistencias pull-up ya están puestas- ¡No hace falta añadir ninguna resistencia adicional!



Last update: 2015-09-24

Copyright 1998-2015, Thorsten Klose. All rights reserved.