Modérateurs: Modération Forum DIY, Modération Forum Installations, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Misu et 16 invités

DSPiy + domotiyque

Message » 07 Fév 2015 16:30

Bonjour Thierry,
Tu as avancé sur ton projet ?
Je vais essayer d'envoyer les codes IR à l'entrée trigger du dspiy depuis un raspberry, et par exemple tester si lorsque le raspberry voit que ma freebox est connectée au réseau (via un ping probablement), le dspiy s'allume directement sur le bon preset.
Louis
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • online

Message » 07 Fév 2015 17:02

Tu as avancé sur ton projet ?

Oui, enfin pas vraiment dans le contexte initial.
Je vais faire simple dans un premier temps et réutiliser une carte d’entrées/sorties que j’ai développé pour ma Pick and Place.

Je vais essayer d'envoyer les codes IR à l'entrée trigger du dspiy depuis un raspberry

Très bonne idée, ce sont les codes IR sans la porteuse de 36KHz à envoyer.
thierryvalk
 
Messages: 5617
Inscription Forum: 08 Mai 2012 9:39
Localisation: Belgique
  • offline

Message » 07 Fév 2015 19:04

D'accord, je serai très intéressé d'en savoir un peu plus quand tu auras terminé ! :D
Ok pour les codes, je pense partir avec la lib LIRC mais je trouve pas de projet similaire à ce que je fais, la plus part des gens qui utilisent la lib l'utilisent en IR, donc je vais devoir encore fouiller un peu
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • online

Message » 25 Avr 2015 12:52

Bonjour,
J'ai récupéré un arduino pour envoyer les codes IR sur le trigger du dspiy. J'ai pas encore choisi le protocole. Est-ce que il y en a un à privilégier ? Je ne sais pas lequel choisir !
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • online

Message » 25 Avr 2015 15:17

pour le protocole tout est dispo pareil dans le dspiy. Ton critère de choix dépend peut etre de la télécommande physique que tu utiliseras en parallèle ?

on pourrait imaginer une mini-api pour le dspiy via le triger in et des commandes type telco :)
plein de choses sont déjà disponibles. A l'usage d'autres peuvent venir, comme par exemple forcer une valeur de volume, changer le contraste de l'écran, etc.

après tu nous fait la télécommande en wifi depuis android avec un arduino+carte wifi esp8266 a 5$ :)
alkasar
 
Messages: 11517
Inscription Forum: 29 Nov 2005 22:47
Localisation: Neuf deux
  • offline

Message » 25 Avr 2015 16:09

Le but c'est justement de supprimer cette télécommande, mais je voulais savoir s'il y en avait des plus adaptés que d'autres. Sinon à priori je vais partir sur du NEC, ça a l'air assez simple. Je pense avoir une idée pour convertir une adresse + une commande en code NEC assez facilement, pour que chacun puisse en face ce qu'il veut après.
j'était plutôt parti pour de l'ethernet, plus facile à mettre en place je pense, mais sinon c'est à peu près l'idée, sauf que je ne sais absolument rien faire sur android :-?
Je me suis dit que ça permettait d'augmenter le nombre I/O sur le dspiy, parce exemple pour ceux qui voudraient plus de boutons en façade, ou (comme moi) des entrées audio suplémentaires
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • online

Message » 25 Avr 2015 18:05

Oui NEC c est ce qui est utilisé en multiDSPiy
thierryvalk
 
Messages: 5617
Inscription Forum: 08 Mai 2012 9:39
Localisation: Belgique
  • offline

Message » 25 Avr 2015 20:11

Misu a écrit:...sauf que je ne sais absolument rien faire sur android :-?


le plus simple http://appinventor.mit.edu/explore/
plus traditionnel et la référence : android studio

Exemple d'une app android pour piloter les gpios arduino par wifi avec petit machin a 5Euros
https://www.youtube.com/watch?v=li4bN1N6ifA

plein de tutos et de code existe déjà.
alkasar
 
Messages: 11517
Inscription Forum: 29 Nov 2005 22:47
Localisation: Neuf deux
  • offline

Message » 25 Avr 2015 20:36

Ah oui j'avais oublié appinventor. J'ai déjà eu l'occasion de jouer un peu avec c'est assez simple à prendre en main. Après mon but n'est pas de passer par un smartphone car je trouve ça pas très ergonomique mais ça pourrait être intéressant !
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • online

Message » 26 Avr 2015 10:57

En passant,

j'avais bataillé qq heures avec appinventor pour faire un VU-mètre à aiguille.

impossible d'avoir un bloc qui donne accès au micro du téléphone !(directement).
faut se taper un programme.
thierry38efd
 
Messages: 1735
Inscription Forum: 18 Sep 2013 7:36
  • offline

Message » 28 Avr 2015 21:08

C'est la grosse limitation de ce genre d'outil de développement.. Mais surprenant qu'il n'y ai rien du tout pour le micro
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • online

Message » 30 Avr 2015 21:36

Voila ce que j'ai fait rapidement, j'ai pas eu le temps de tester encore. C'est juste pour le principe. On entre une commande à envoyer en décimal, et le programme le "converti" en code NEC. Je ne me suis pas occupé de la partie "adresse" mais c'est exactement le même principe, sauf que l’adresse sera fixe. Je ne connais pas trop le c, j'ai un peu piqué et mélangé ce que j'ai trouvé à droite et à gauche. Les temps de delai seront probablement à réajuster lorsque je ferai un essai et que je mesurerai les durées au scope, il y aura sans doute un écart important. Voila, n'hésitez pas à critiquer.

Code: Tout sélectionner
// Decimal to nec converter for arduino

int nec = 13 ; //output is pin 13
int command = 0 ; //command to transfert in nec

void setup() {
  pinMode(nec, OUTPUT); } //put pin "nec" as output

 
void loop() {
          int zeros = 8 - String(command,BIN).length(); //convert command in 8-bit
          String Com;
          for (int i=0; i<zeros; i++) {
            Com = Com + "0";
            }
          Com = Com + String(command,BIN);
         
          digitalWrite(nec,HIGH);     //9ms leading pulse burst
          delay(9);
          digitalWrite(nec,LOW);      //4.5ms space
          delay(4.5);
         
         
          //HERE IS FOR THE ADDRESS
         
          for (int j=0; j<8; j++) {   
            char Bit = Com.charAt(j) ; //8-bit command for the receiving device
            if (Bit == 1)     // give Bit 1 in nec protocol
              {digitalWrite(nec,HIGH);
              delay(0.5625);
              digitalWrite(nec, LOW);
              delay(1.6875);}
            else                   // give Bit 0 in nec protocol
               {digitalWrite(nec,HIGH);
                delay(0.5625);
                digitalWrite(nec, LOW);
                delay(0.5625);}}
           for (int j=0; j<8; j++) {
             char InversedBit = Com.charAt(j) ; // 8-bit inversed command for the receiving device
             if (InversedBit == 1)   // Bit == 1 --> Inversed Bit == 0
               {digitalWrite(nec,HIGH);
                delay(0.5625);
                digitalWrite(nec, LOW);
                delay(0.5625);}
             else            // Bit == 0 --> Inversed Bit == 1 
                {digitalWrite(nec,HIGH);
                delay(0.5625);
                digitalWrite(nec, LOW);
                delay(1.6875);}
                }
             digitalWrite(nec, HIGH);
             delay(0.5625);
             digitalWrite(nec, LOW);
}



Louis
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • online

Message » 30 Avr 2015 23:04

C’est pas mauvais, mais un peu répétitif.
Tu pourrais travailler sur 16 bits avec les 8 derniers inversés par un XOR.
Et par la même occasion rajouter l’adresse.

Par contre en regardant mon code, je pense que j’ai raconté une grosse, mais une énorme bêtise. :oops: :oops: :oops:
Le multidspiy semble fonctionner sous le code Sony et non le NEC. :oops: :oops:
La mémoire me joue des tours, je vais me cacher. :oops: :oops:

Voici mon code, pas vraiment le même style vu que fonctionne par interrupt via un timer.
La variable unsigned short d comprend l’adresse sur les 8 bits de poids forts suivis des 7 bits datas.
on appelle la fonction multidspyout avec cette donnée et tout le reste suit en interrupt.

Code: Tout sélectionner
//multidspiy
void TIMER32_0_IRQHandler(void)
{

   if ( LPC_TMR32B0->IR & 0x1 )
   {
      LPC_TMR32B0->IR = 1;         // clear interrupt flag
      LPC_TMR32B0->TCR = 0x02;      /* reset timer */
      if(nbitmultidspiy==0){LPC_TMR32B0->TCR = 0x0;return;}      //stop timer
      if(nbitmultidspiy==1){nbitmultidspiy=0;GPIOSetValue(Port_ISO_OUT,Pin_ISO_OUT,0);LPC_TMR32B0 ->MR0 = 40000; LPC_TMR32B0->TCR = 0x01;return;}//espace entre 2 frames
      if((nbitmultidspiy&1)){nbitmultidspiy--;GPIOSetValue(Port_ISO_OUT,Pin_ISO_OUT,0);LPC_TMR32B0 ->MR0 = 600; LPC_TMR32B0->TCR = 0x01;return;}      //600µS off
      GPIOSetValue(Port_ISO_OUT,Pin_ISO_OUT,1);
      if(datamultidspiy&(1)){LPC_TMR32B0 ->MR0 = 1200;}//1 1200µS On
       else {LPC_TMR32B0 ->MR0 = 600;}//0 600µS On
      nbitmultidspiy--;
      datamultidspiy=datamultidspiy>>1;
       LPC_TMR32B0->TCR = 0x01;

   }
}
void multidspyout(unsigned short d)
{
      if(D01_ISO_OUT!=5)return;
      while(nbitmultidspiy!=0);//attend fin transmition
      while(LPC_TMR32B0->TCR != 0x0);

      datamultidspiy=d;
      nbitmultidspiy=25;GPIOSetValue(Port_ISO_OUT,Pin_ISO_OUT,1);
      LPC_TMR32B0 ->MR0 = 2400; //start IR sony
      LPC_TMR32B0->TCR = 0x02;//reset timer
      LPC_TMR32B0->TCR = 0x01; //start timer
}
thierryvalk
 
Messages: 5617
Inscription Forum: 08 Mai 2012 9:39
Localisation: Belgique
  • offline

Message » 01 Mai 2015 11:03

En fait j'étais persuadé que le code NEC c'était le code de sony.. :oops: Mais en fait au final ça m'arrange parce que le code sony ne demande pas de reversed adress/commande donc ça va simplifier. Je pourrai rester en NEC, mais je préfère que tout le système utilise le même protocole, et en plus si je veux m'en servir comme master ça sera d'autant plus simple. Merci pour ton code et tes conseils, je regarde tout ça dès que j'ai le temps. D'ailleurs je viens de voir une bêtise dans mon code, il me semble que j'envoie le MSB en premier, il faut juste que j'inverse tout ça.
Louis
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • online

Message » 01 Mai 2015 13:57

Hop, voila en code sony, avec l'adresse en plus et les bits dans le bon ordre. Je pourrai pas tester tout de suite car je déménage lundi, mais j'espère faire ça assez rapidement. Si quelqu'un veut tester, qu'il n'hésite pas, ça devrait marcher sans soucis, tout sort sur le pin 13 de l'arduino. Faudra juste réajuster les durées des delays.
Code: Tout sélectionner
// Decimal to sony converter for arduino

int address = 5 ;
int out = 13 ; //output is pin 13
int command = 10 ; //command to transfert in sony


void setup() {
  pinMode(out, OUTPUT); } //put pin "out" as output

 
void loop() {
          int zeros = 7 - String(command,BIN).length(); //convert command in 7-bit
          String Com;
          for (int i=0; i<zeros; i++) {
            Com = Com + "0";
            }
          Com = Com + String(command,BIN);
          zeros = 5 - String(address,BIN).length(); // convert address in 5-BIT
          String Address ;
          for (int u=0 ; u<zeros; u++) {
            Address = Address +"0" ;
            }
          Address = Address + String(address,BIN);
          String ComAddress = Address + Com ; // ComAddress = 5 bit address + 7 bit com
          digitalWrite(out,HIGH);     //2.4ms leading pulse burst
          delay(2.4);
          digitalWrite(out,LOW);      //0.6ms space
          delay(0.6);
         
          for (int j=11; j>-1; j--) {   
            char Bit = Com.charAt(j) ; //12-bit command + address for the receiving device
            if (Bit == 1)     // give Bit 1 in sony protocol
              {digitalWrite(out,HIGH);
              delay(1.5);
              digitalWrite(out, LOW);
              delay(0.6);}
            else                   // give Bit 0 in sony protocol
               {digitalWrite(out,HIGH);
                delay(0.6);
                digitalWrite(out, LOW);
                delay(0.6);}}
                }
Misu
 
Messages: 284
Inscription Forum: 04 Nov 2012 16:44
Localisation: Bordeaux-Poitiers
  • online


Retourner vers Filtrage actif, Equalisation et Processeurs

 
  • Articles en relation
    Dernier message