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

décodage d'une trame IR par pic



  1. #1
    ilyasse192

    Exclamation décodage d'une trame IR par pic

    bonsoir,

    j'ai fait ce petit code pour afficher les bits de commande d'une tram IR sur PORTC et les bits d'adresse sur PORTD. j'ai simulé le programme sur isis, il fait le sous-prog d'interruption externe sur RB0 mais je voi plus rien sur les sorti des PortC et D , j'ai vérifier le programme plusieurs fois mais j'ai pas trouvé l'erreur

    si quelqu'un peut m'aider
    Code:
    unsigned char x ;
    unsigned int ir;
    unsigned char cmd;
    unsigned char adrs;
    bit fin_recep;
    /********************************************************/
    void init (){                                          //
                                                          //
    /*********CONFIG_RB0/INT sur front descend***********/
                                                       //
    INTCON = 0xD0 ;  //active GIE , PEIE , RBIE       //
    OPTION_REG = 0 ;                                 //
                                                    //
    /***********************************************/
    
    
    /*********CONFIG_LES PORTS****************************/
                                                        //
    TRISB = 0xFF ;                                     //
    TRISC = 0x00 ;                                    //
    TRISA = 0x00 ;
    TRISD = 0x00 ;
    PORTB = 0    ;                                   //
    PORTC = 0    ;                                  //
                 }                                  //
    /**********************************************/
    
    
    
    
    void interrupt()  {
    
    
    if(INTCON.INTF){
       RA0_bit=0;
       delay_us(445);        // 1/4 bit de start
       for(x=1;x<14;x++){
    
    
       if (RB0_bit==0){
        ir>>1 ;
        ir |= 0x8000;      //ajouté un 1 Si RB0 = 0 (bit tram = 1)
                      }
                     
       if (RB0_bit==1){
        ir>>1 ;
                      }
        delay_ms(1777);     // atteindre le 1/4 du 2ème bit
                     
                     }
        fin_recep=1 ;
        INTCON=0x00;
                     }}
    
    
    void main() {
      init() ;
    
    
      while(1){
      
      if(fin_recep==1){
       
       ir = ir>>2;
       cmd = ir;
       cmd = cmd & 0x3F;    //recupéré les 6 bits de cmd
       adrs = ir>>6;
       adrs = adrs & 0x1F;  // les 5 bits d'adresse
       fin_recep=0;
       INTCON = 0xD0 ;
                      }
    
    
      RA0_bit=0;
      PORTC=cmd ;
      PORTD=adrs;
      delay_ms(4000);
                      
              }}

    -----

    Dernière modification par Jack ; 03/11/2013 à 07h45.

  2. Publicité
  3. #2
    Jack

    Re : décodage d'une tram IR par pic

    Merci de mettre les balises code tout seul à l'avenir

  4. #3
    PIXEL

    Re : décodage d'une tram IR par pic

    1) décodes-tu la trame modulée , ou démodulée ?

    2) quel protocole ?

  5. #4
    paulfjujo

    Re : décodage d'une tram IR par pic

    bonjour,

    il faut interdire les interruption des l'entree de l'interrupt RB0
    et non pas a la fin, car la poursuite de traitement RB0 se fait en mode pooling
    dans ledit traitement interrupt

  6. #5
    ilyasse192

    Re : décodage d'une trame IR par pic

    1) décodes-tu la trame modulée , ou démodulée ?
    j'ai une sortie de TSOP je crois que c'est une tram modulée .

    et pour le protocole j'ai choisi le RC5

    ce que je veux savoir c'est pourquoi les PORT C et D n'affiche pas les valeur des variable CMD et ADRS je crois que j'ai un problème au niveau de décalage du variable IR mais j'ai pu trouvé cette erreur
    Dernière modification par ilyasse192 ; 03/11/2013 à 17h09.

  7. A voir en vidéo sur Futura
  8. #6
    grosmatou75001

    Re : décodage d'une trame IR par pic

    Citation Envoyé par ilyasse192 Voir le message
    j'ai une sortie de TSOP je crois que c'est une tram modulée .
    non, démodulé.
    Sans avoir regardé l'algo en soi:
    je crois que j'ai un problème au niveau de décalage du variable IR mais j'ai pu trouvé cette erreur
    Les warnings de compilateur ça peut servir (et si il y en a pas changer de réglage / de compilateur):
    Code:
    ir>>1 ;
    Statement without effect.
    Il manque un signe égal: ir=>>1 ;

  9. Publicité
  10. #7
    grosmatou75001

    Re : décodage d'une trame IR par pic

    Argh! ir>>=1 bien sûr.

  11. #8
    ilyasse192

    Re : décodage d'une trame IR par pic

    Les warnings de compilateur ça peut servir (et si il y en a pas changer de réglage / de compilateur)
    l MikroC n'a pas pu détecter l'erreur j'aii même essayer avec Ir>>= mais sans succès.

    la seul méthode qui me reste c'est d'écrire le programme sans boucle (il va être troooop longue mais j'ai pas le choix) merci a tous.

    des autres idées !!

  12. #9
    paulfjujo

    Re : décodage d'une trame IR par pic

    bonsoir,

    de plus,il manque surtout une init quelque part de ir .
    et delay_ms(1777) soit 1,7sec ?

    je pense qu'il est aussi preferable d'ecrire les affectations en clair
    plutot qu'en mode compressé.
    ir = ir >> 1;
    pour la facilité de relecture par autrui...

    j'ai mis INTCON=0 en amont, bien que dans ce cas precis ,
    il n'y ait pas d'autre interrupt venant semer le boxon.. dans les delais .

    Code:
    
    void interrupt()  
    {
    if(INTCON.INTF)
     {
       INTCON=0x00;
       RA0_bit=0;
       ir=0;
       delay_us(445);        // 1/4 bit de start
       for(x=1;x<14;x++)
       {
          if (RB0_bit==0)
          {
           ir= ir | 0x8000;      //ajouté un 1 Si RB0 = 0 (bit tram = 1)
           }
           ir =ir >>1 ;
          delay_us(1777);     // atteindre le 1/4 du 2ème bit
       }
      fin_recep=1 ;
     
       }
    }

  13. #10
    ilyasse192

    Re : décodage d'une trame IR par pic

    Merciii pour la correction du prog ,

    de plus,il manque surtout une init quelque part de ir .
    et delay_ms(1777) soit 1,7sec ?
    je crois que j'ai mis 1777 micro seconde
    Dernière modification par ilyasse192 ; 03/11/2013 à 22h06.

Sur le même thème :

Discussions similaires

  1. Trame RS485 vers trame Modbus
    Par La-Banane dans le forum Internet - Réseau - Sécurité générale
    Réponses: 11
    Dernier message: 06/11/2013, 15h48
  2. Décodage d'une trame RC5
    Par IHCAAMEL dans le forum Électronique
    Réponses: 6
    Dernier message: 19/12/2012, 08h48
  3. Décodage
    Par oui-oui dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 03/03/2007, 09h57
  4. décodage trame RC5
    Par apocalypse dans le forum Électronique
    Réponses: 2
    Dernier message: 08/01/2004, 20h09