Page 1 sur 1

Protocole du multidspiy pour système tiers

Posté : lun. 14 nov. 2016 17:32
par thierryvalk
Il est basé sur le protocole IR Sony 12bits
A titre d'exemple, le code source utilisé dans le DSPiy pour le générer et les explications :

Code : Tout sélectionner

//fonction appellée lorsque l'on veut envoyer un mot 
// les 7 bits de poids faible sont le data, les autres le device 
void multidspyout(unsigned short d)
{
        if(D01_ISO_OUT!=5)return;//on vérifie que l'on est bien en mode multidspiy
        while(nbitmultidspiy!=0);//attend fin transmission si encours.
        while(LPC_TMR32B0->TCR != 0x0);//pour être vraiment certain que le dernier bit soit sorti.

        datamultidspiy=d;    //datamultidspiy est une variable globale, c'est pas beau mais efficace.
        nbitmultidspiy=25;    //compteur pour savoir où l'on en est dans le transfert : nombre de bit*2 +1
        GPIOSetValue(Port_ISO_OUT,Pin_ISO_OUT,1);    //on place la sortie à 1 (dépend de son électronique)
        LPC_TMR32B0 ->MR0 = 2400;     //délai du start IR sony, 
        LPC_TMR32B0->TCR = 0x02;    //reset timer
        LPC_TMR32B0->TCR = 0x01;     //start timer
        //on a donc lancé le timer qui nous fera une interrupt dans 2400µS
}

//Timer en interruption 
void TIMER32_0_IRQHandler(void) 
{
    if ( LPC_TMR32B0->IR & 0x1 )//on vérifie si c'est le flag du bon timer qui a déclenché l'interrupt
    {
        LPC_TMR32B0->IR = 1;            // clear interrupt flag
        LPC_TMR32B0->TCR = 0x02;        // reset timer 
        if(nbitmultidspiy==0){LPC_TMR32B0->TCR = 0x0;return;}        //on est arrivé à la fin, stop timer
        if(nbitmultidspiy==1){nbitmultidspiy=0;GPIOSetValue(Port_ISO_OUT,Pin_ISO_OUT,0);LPC_TMR32B0 ->MR0 = 40000; LPC_TMR32B0->TCR = 0x01;return;}//fin de l'envoi des datas mais l'on génère un espace minimumentre 2 frames
        if((nbitmultidspiy&1)){nbitmultidspiy--;GPIOSetValue(Port_ISO_OUT,Pin_ISO_OUT,0);LPC_TMR32B0 ->MR0 = 600; LPC_TMR32B0->TCR = 0x01;return;} //on force la sortie à zéro pendant 600µS si nbitmultidspiy est impaire
        GPIOSetValue(Port_ISO_OUT,Pin_ISO_OUT,1);// forcément on est sur du paire donc sortie à 1.
        if(datamultidspiy&(1)){LPC_TMR32B0 ->MR0 = 1200;}//Pour un data bit à 1 : 1200µS On
         else {LPC_TMR32B0 ->MR0 = 600;}//Pour un data bit à 0: 600µS On
        nbitmultidspiy--;//on décrémente 
        datamultidspiy=datamultidspiy>>1;//et rotation à droite pour positionner le bit suivant à transmettre
         LPC_TMR32B0->TCR = 0x01; //start timer
    }
}
 

Re: Protocole du multidpiy pour système tiers

Posté : lun. 14 nov. 2016 17:44
par thierryvalk
Coté réception, on décode du Sony 12bits en ayant simplement détourné l’entrée IR vers celle du triggerIn.
On n'a donc plus de réception IR de disponnible, ce qui est logique vu que ce DSPiy est censé être l'esclave d'un autre.
Les codes utilisés :

Sous un Device de 29 :
De 0 à 110 : Volume en 0.5dB (Volume= IRcode/2)
De 111 à 119 : Numéro du Preset (preset=IRcode-110)
121 : mise en standby
122 : sortie de standby
123 : mute
124 : Unmute
Reste la balance, mais plus de codes de dispos en Device 29.

Sous un Device de 30 :
De 0 à 50 : balance

Re: Protocole du multidpiy pour système tiers

Posté : lun. 14 nov. 2016 20:44
par alka
cool. c'est facile :)
le device c'est le numéro d'adresse je suppose.

pas de code pour le contraste écran (mode nuit) ?
Source+ et Source - ?
et P+/P- ?

Re: Protocole du multidpiy pour système tiers

Posté : ven. 2 déc. 2016 19:35
par alka
thierryvalk a écrit :Les codes utilisés :
Sous un Device de 29 :
De 0 à 110 : Volume en 0.5dB (Volume= IRcode/2)


Précision pour le volume :
les codes de 0 à 110 font varier le volume de 0dB à -75dB
de 0 à 100 le volume en dB est -(IRCode/2) donc de 0dB à -50dB par pas de 0.5dB
de 101 à 110 la progression n'est plus linéaire et suit ces valeurs :
code volume
101 -51dB
102 -52
103 -54
104 -56
105 -58
106 -60
107 -63
108 -66
109 -70
110 -75

Re: Protocole du multidpiy pour système tiers

Posté : sam. 3 déc. 2016 12:58
par alka
thierryvalk a écrit :Sous un Device de 30 :
De 0 à 50 : balance

précisions pour la balance :
Les commandes pour la Balance vont de 1 à 50
IRcode==25 correspond à la balance équilibrée L/R (l'affichage disparait sur l'oled)
Plus on s'écarte de 25, plus le décalage de balance est prononcé.
valeurs < 25 : Canal L
valeurs > 25 : Canal R

Cela fait 24 valeurs coté L et 25 coté R.
La valeur 0 revient a faire 25.