Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

explication code ir



  1. #1
    kurty65

    explication code ir


    ------

    bonsoir,
    pouvez vous m'expliquez l'emmission d'un code sur 8 bits ?
    car je ve construire une telecommande ir et recepteur ir grace aux pics je travaille avec ccs compiler niveau electronique c'est fait mais pas en programation pour emmetre c'est bon mais pas pour recevoir

    -----

  2. Publicité
  3. #2
    gcortex

    Re : explication code ir

    entre chaque octet, tu peux éteindre la led suffisamment longtemps
    pour que le récepteur sache que l'octet d'avant a été envoyé et que
    l'octet d'après va arriver...

    tu peux transmettre 9 bits :
    le 1er est toujours à 1 pour annoncer les 8 bits suivants
    et pour faire partir le chrono

    tu peux lire le bit au milieu de chaque intervalle
    mais si l'émetteur envoie un bit tous les 0,9999 ms
    et que le récepteur lit tous les 1,0001 ms,
    bit après bit, le décalage va augmenter
    ce qui limite le nombre de bits consécutifs
    et nécessite une synchro avant chaque trame

    à la fin, tu pourras mettre un 10ème bit de parité
    pour limiter les erreurs


  4. #3
    PIXEL

    Re : explication code ir

    regarde les explications sur le code RC5, ça te donnera des idées :

    http://www.positron-libre.com/electr...tocole-rc5.htm

  5. #4
    kurty65

    Re : explication code ir

    merci !! j'ai compris ! je voudrais savoir si mon code est juste (j'ai passé toute la matiné a faire se code)
    j'ai juste fait sur 3 bits pour essayé
    voici le code en ccs compiler :
    Code:
    #include <16f876A.h>
    #use delay(clock=20000000)
    #fuses HS, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD 
    #define led pin_b0
    #define led1 pin_b1
    #define rec pin_a0
    int a;
    int b;
    void main () {
    while (1) {
    if (input(rec)==0){         //1er bit pour annoncer les suivants 
                 
                 delay_us(476);
                
                if (input(rec)){   //1er bit fini   
                delay_us(476);
                }
               if (input(rec)==0){ // 2eme bit 
                      delay_us(476);
                      if (input(rec)) { // fin du 2eme bit
                      a=1;
                   }
                }else {            //sinon 2eme bit a 0
                delay_us(476);
                a=0;
                delay_us(476);
                }
                 if (input(rec)==0){ // 3eme bit 
                      delay_us(476);
                      if (input(rec)) { // fin du 3eme bit
                      b=1;
                   }
                }else {            //sinon 3eme bit a 0
                delay_us(476);
                b=0;
                }
             }
          if (a=1){
             output_high(led);
          }else{
             output_high(led);
          }
          if (b=1){
             output_high(led);
          }else{
             output_high(led);
          }
       
       }
    
    }
    mais j'ai un doute pour le code de l'emmeteur, je dois envoyer 17 fois la periode de 28us pour un bit c'est sa ?

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    microtoad

    Re : explication code ir

    Citation Envoyé par kurty65 Voir le message
    merci !! j'ai compris ! je voudrais savoir si mon code est juste (j'ai passé toute la matiné a faire se code)
    j'ai juste fait sur 3 bits pour essayé
    voici le code en ccs compiler :
    Code:
    #include <16f876A.h>
    #use delay(clock=20000000)
    #fuses HS, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD 
    #define led pin_b0
    #define led1 pin_b1
    #define rec pin_a0
    int a;
    int b;
    void main () {
    while (1) {
    if (input(rec)==0){         //1er bit pour annoncer les suivants 
                 
                 delay_us(476);
                
                if (input(rec)){   //1er bit fini   
                delay_us(476);
                }
               if (input(rec)==0){ // 2eme bit 
                      delay_us(476);
                      if (input(rec)) { // fin du 2eme bit
                      a=1;
                   }
                }else {            //sinon 2eme bit a 0
                delay_us(476);
                a=0;
                delay_us(476);
                }
                 if (input(rec)==0){ // 3eme bit 
                      delay_us(476);
                      if (input(rec)) { // fin du 3eme bit
                      b=1;
                   }
                }else {            //sinon 3eme bit a 0
                delay_us(476);
                b=0;
                }
             }
          if (a=1){
             output_high(led);
          }else{
             output_high(led);
          }
          if (b=1){
             output_high(led);
          }else{
             output_high(led);
          }
       
       }
    
    }
    mais j'ai un doute pour le code de l'emmeteur, je dois envoyer 17 fois la periode de 28us pour un bit c'est sa ?
    Donc si j'ai bien compris le code ci dessus est celui de ton recepteur ?

    déja tu devrai peut etre travailler en interruption... enfin moi je dit ce je dit rien...

    a première vu ca à l'air correct puisque ta tempo de 476µs te positionne en milieu de bit.

    tu pourrai aussi stocker les valeur que tu lis dans une variable un opérateur de décalage de bit comme >> ou <<.

  9. #6
    kurty65

    Re : explication code ir

    merci d'avoir regarder mon code
    oui c'est bien le code du recepteur mais je ne c'est pas comment stocker les valeur dans une variable un opérateur de décalage de bit comme >> ou << ? peut tu me donner un exemple ?
    sinon pour le code de l'emmeteur il faut que j'envois 17 fois la periode 28us pour 1 bit ?
    comme sa :
    Code:
    for (i=0;i<17;i++){
    Output_bit(led,1);
    Delay_us(14);
    Output_bit(led,0);
    Delay_us(14);
    
    }

  10. Publicité
  11. #7
    microtoad

    Re : explication code ir

    On peut facilement décaler les bits d'un nombre vers la gauche ou la droite d'un certain nombre de bits.
    Pour décaler les bits vers la gauche, on utilise l'opérateur <<. Pour les décaler vers la droite, c'est >> qui est utiliser.
    Dans tout les cas, on place à gauche de l'opérande le nombre à modifier, et à sa droite le nombre de bits à décaler :

    Code:
    int main()
    {
    int a=3;// 3 -> 11 en binaire
    
    a = a << 4;
    /*On décale de 4 rang vers la gauche, donc :
    11 - > 110000 = 48*/
    printf("%d", a);/* Sortie -> 48 */
    
    a = a >> 8;
    /*On décale de 8 rand vers la droite, donc :
    110000 -> 0*/
    printf("%d", a);/* Sortie -> 0 */
    
    return 0;
    }

    tu compte reproduire le codage et le décodage d'une trame RC5 ??

  12. #8
    gcortex

    Re : explication code ir

    http://www.datasheetcatalog.org/data.../301522_DS.pdf

    la doc dit entre 10 et 70 cycles de 27,8µs et au moins 14 au repos

  13. #9
    kurty65

    Re : explication code ir

    ok pour l'opérateur de décalage
    non je ne compte pas reproduire le code rc5 je fait mon propre code
    il est tout simple je l'est fait sur 4 bits le premier pour annoncer les autres bits, les 2 bits de données, et le dernier pour eviter les erreurs. Et si sa marche bien je mettrais 4 bits de donnés
    Merci gcortex donc 17 cycles de 28us c'est bon !!
    je teste mes codes et je vous tient au courant

  14. #10
    kurty65

    Re : explication code ir

    sa marche pas !!!
    je met le code du recepteur :
    Code:
    #include <16f876A.h>
    #use delay(clock=20000000)
    #fuses HS, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD 
    #define led pin_b0
    #define led1 pin_b1
    #define rec pin_a0
    int a;
    int b;
    void main () {
    while (1) {
    while ((input(rec))){} // attendre que rec soit a 0
    if (input(rec)==0){         //1er bit pour annoncer les suivants
                 
                 delay_us(476);
                
                if (input(rec)){   //1er bit fini   
                a=0;
                b=0;
               }
                }
                delay_us(476);
               
               if (input(rec)==0){ // 2eme bit
                      delay_us(476);
                      if (input(rec)) { // fin du 2eme bit
                      a=1;
                      }
                }else {               //sinon 2eme bit a 0 
                delay_ms(476);
                a=0;
                }
                
                delay_us(476);
                 
                 if (input(rec)==0){ // 3eme bit
                      delay_us(476);
                      if (input(rec)) { // fin du 3eme bit
                      b=1;
                     }
                }else {       //sinon 3eme bit a 0 
                delay_us(476);
                b=0;
            }
                
               delay_us(476);  
                
         if (input(rec)==0){         //4eme bit d'erreur
                 delay_us(476);
           if (input(rec)){   
                if (a=1){
                output_high(led);
                }else{
                output_low(led);
                }
                if (b=1){
                output_high(led1);
                }else{
                output_low(led1);
                }
          }
        }
         
       
          
      }
    
    }
    et le code de l'emetteur :
    Code:
    #include <16f84A.h>
    #use delay(clock=4000000)
    #fuses XT
    #define led pin_b0
    #define in1 pin_a2
    #define in2 pin_a3
    int i;
    void main () {
    while (1) {
    
          if (input(in1)==0){   //si l'inter 1 est fermé 
              
             for (i=0;i<17;i++){
                Output_bit(led,1);
                Delay_us(14);
                Output_bit(led,0);
                Delay_us(14);
                }
                Output_bit(led,0);
                i=0;
                delay_us(476);
                for (i=0;i<17;i++){
                Output_bit(led,1);
                Delay_us(14);
                Output_bit(led,0);
                Delay_us(14);
                }
                Output_bit(led,0);
                i=0;
                delay_us(476);
                for (i=0;i<17;i++){
                Output_bit(led,1);
                Delay_us(14);
                Output_bit(led,0);
                Delay_us(14);
                }
                Output_bit(led,0);
                i=0;
                delay_us(476);
                for (i=0;i<17;i++){
                Output_bit(led,1);
                Delay_us(14);
                Output_bit(led,0);
                Delay_us(14);
                }
              Output_bit(led,0);
              i=0;
             }
          
            if (input(in2)==0){ //si l'inter 2 est fermé  
              
             for (i=0;i<17;i++){
                Output_bit(led,1);
                Delay_us(14);
                Output_bit(led,0);
                Delay_us(14);
                }
                Output_bit(led,0);
                i=0;
                delay_us(2380);
                for (i=0;i<17;i++){
                Output_bit(led,1);
                Delay_us(14);
                Output_bit(led,0);
                Delay_us(14);
               }
                Output_bit(led,0);
                i=0;
             
            } 
          }
    }
    pour l'emetteur si je ferme int1 normalement les deux leds s'alumes
    et int 2 elles s'eteignent.
    SVP regarder mes codes j'ai passé toutes la soiré a chercher l'erreur mais je ne la trouve pas
    bon allé je vais faire dodo

  15. #11
    kurty65

    Re : explication code ir

    aidez moi svp

  16. #12
    gcortex

    Re : explication code ir

    c'est con que t'as pas d'oscilloscope...

    au pire tu multiplies les tempos par 10 et tu utilises le magnétophone de win 98

    ou par 10.000 et tu regardes avec une led ordinaire

    C'est peut être 28µs à la place de 27,7777

    Quand on travaille au dixième de µs, on programme en assembleur


  17. Publicité
  18. #13
    kurty65

    Re : explication code ir

    bonjour,
    je me suis rendu compte que mon pic16f84a n'envoyait pas du 36khz et c'est là le problème j'ai essayé avec mon pic16f876a et ça marche donc ce n'est pa mon code
    mon pic16f84a a un resonateur 4mhz recupéré dans une télécomande, je croyais que c'etait à cause de la configuration XT ou HS mais ça ne change rien
    Dois-je changer le résonnateur ?

  19. #14
    maximilien

    Re : explication code ir

    As tu bien 14 ans?
    Si c'est le cas Bravo. C'est impréssionant!

  20. #15
    kurty65

    Re : explication code ir

    oui j'ai bien 14ans merci

  21. #16
    kurty65

    Thumbs up Re : explication code ir

    C'etait bien le resonateur !!!

Discussions similaires

  1. Réponses: 10
    Dernier message: 25/04/2009, 18h15
  2. explication
    Par balo90 dans le forum Mathématiques du collège et du lycée
    Réponses: 0
    Dernier message: 25/11/2007, 15h04
  3. Explication?
    Par indri dans le forum Électronique
    Réponses: 1
    Dernier message: 22/05/2007, 22h30
  4. explication
    Par quetzal dans le forum Technologies
    Réponses: 15
    Dernier message: 25/07/2005, 23h02
  5. explication
    Par jcb dans le forum Chimie
    Réponses: 1
    Dernier message: 03/02/2005, 16h28
Découvrez nos comparatifs produits sur l'informatique et les technologies.