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
-
Firmware |
Archivo |
Tamaño | Descripció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.
|