English Version French Version Spanish Version

MIDIbox Hardware Platform, Module IIC SpeakJet 

!!! Cette page est en Construction !!!

Rapide aperçu des propriètés de ce module:

  • le SpeakJet est accessible via IIC, device ID 0x20, 0x22, 0x24 ou 0x26 (sélectionnable via deux jumpers sur J2)
  • En complément, le SpeakJet peut être contrôlé depuis un port COM. Les deux flux d'information séries sont traités par le PIC16F88
  • Pour le déboggage, les données IIC reçues sont aussi renvoyées vers COM Rx 
  • le baudrate du SpeakJet  est configuré sur 19200 baud au démarrage
  • la partie amplification audio n'est pas implémentée dans le circuit - une solution valable sera intégré aux schéma

MBHP_IIC_SPEAKJET : algorithme d'accés

Avec le MIOS V1.9 et supérieur, le module MBHP_IIC_SPEAKJET est accéssible via les commandes de transmission suivantes:

// allowed IDs: 0x20, 0x22, 0x24 or 0x26 
// (selectable with J2 of the MBHP_IIC_SPEAKJET module)
#define SPEAKJET_SLAVE_ID 0x20

// this variable contains the current slave number
unsigned char slave;

/////////////////////////////////////////////////////////////////////////////
// This function initializes the interface to MBHP_IIC_SPEAKJET
/////////////////////////////////////////////////////////////////////////////
void IIC_SPEAKJET_Init(void) __wparam
{
MIOS_IIC_Stop(); // init IIC interface

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


/////////////////////////////////////////////////////////////////////////////
// This function starts a serial transfer to SpeakJet
// it terminates with 0 if the IIC device is busy or not available
/////////////////////////////////////////////////////////////////////////////
unsigned char IIC_SPEAKJET_TransmitStart(unsigned char _slave) __wparam
{
unsigned char retry_ctr;

// invalidate slave number
// (to avoid that TransmitByte will send something if slave not available)
slave = 0xff;

// start IIC access
MIOS_IIC_Start();

// send address
retry_ctr = 0;
while( !MIOS_IIC_ByteSend((SPEAKJET_SLAVE_ID & 0xfe) + (_slave << 1)) ) {
// slave has sent a NAK - retry 255 times
MIOS_IIC_Stop();
if( ++retry_ctr == 255 )
return 0;
MIOS_IIC_Start();
}

// store slave number
slave = _slave;

return 1;
}

/////////////////////////////////////////////////////////////////////////////
// This function sends a byte to the SpeakJet
// the transfer must be initiated via IIC_SPEAKJET_TransmitStart first
// it terminates with 0 if the IIC device is busy or not available
/////////////////////////////////////////////////////////////////////////////
unsigned char IIC_SPEAKJET_TransmitByte(unsigned char value) __wparam
{
unsigned char retry_ctr;

if( slave == 0xff )
return 0;

// send byte
retry_ctr = 0;
while( !MIOS_IIC_ByteSend(value) ) {
// slave has sent a NAK - retry
// the address needs to be sent again!
if( !IIC_SPEAKJET_TransmitStart(slave) )
return 0;
}

// the complete package has been transmitted
return 1;
}

/////////////////////////////////////////////////////////////////////////////
// This function finishes a transfer to the SpeakJet
/////////////////////////////////////////////////////////////////////////////
void IIC_SPEAKJET_TransmitStop(void) __wparam
{
// stop IIC access
MIOS_IIC_Stop();

// invalidate slave number
// (to avoid that slave will send something before transfer has been started)
slave = 0xff;
}

Exemple pour simplement renvoyer les Evènements de Note entrants vers le SpeakJet:

/////////////////////////////////////////////////////////////////////////////
// This function is called by MIOS after startup to initialize the
// application
/////////////////////////////////////////////////////////////////////////////
void Init(void) __wparam
{
// init interface to MBHP_IIC_SPEAKJET
IIC_SPEAKJET_Init();
}

/////////////////////////////////////////////////////////////////////////////
// This function is called by MIOS when a complete MIDI event has been received
/////////////////////////////////////////////////////////////////////////////
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();
}
}

Téléchargement

Les modèles de PCB peuvent être ouverts, modifiés et convertis avec Eagle Light
Module Schéma Layout aperçu
MBHP_IIC_SPEAKJET mbhp_iic_speakjet_prelim.pdf final layout under construction -
Firmware
Fichier taille Description
mbhp_iic_speakjet_v1_0b.zip 20k Cette archive contient le firmware pré-compilé et le code-source pour les PIC16F88


Last update: 2015-09-24

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