Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:


+ Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 15 sur 24

2,5 V sur l'input d'un PIC ???

  1. Voltron

    Date d'inscription
    mars 2007
    Messages
    353

    Unhappy 2,5 V sur l'input d'un PIC ???

    salut,

    je commande avec un PIC 16F877 avec un clavier 20 touches via l'encodeur 74C923 (à travers 4 pins), RB4,RB5,RB6 et RB7,
    comme première étape, j'ai testé mon encodeur (sans relier ses pin de sorties au pic !!! )qui lorseque j'appuie sur une touche du clavier (par exemple celle situé à la 2ème ligne,3ème colonne), me donne le code binaire correspondand à sa sortie (0110) qui en pratique , 5 Volts sur ces pins 16 et 17 et 0 Volt sur les pins 15, 18 et 19 !!,pour toutes les touches du clavier, l'encodeur a fonctionné correctement en donnant le code exacte pour chaque touche!!

    dans la 2ème étape, j'ai relié les pins 15-->19 au pic et j'ai refait le test précédant !!, gros problème , lorseque j'appuie sur une touche qui dans le code binaire dépasse 00011, cad qu'elle sollicite les pin 16 et 17, j'ai toujours au alentours de 2,5 V sur ces pins, même si la pin n'est pas mise à 5 Volts (comme c le cas pour 00111), j'ai 5V, sur 19 et 18 (c'est bon), et 2,5 sur 17 et 16 !!!

    Rque:
    pin 16 (DATA OUT D) est rélié a RB7
    pin 17 (DATA OUT C) est relié à RB6


    je pense que dans ce cas en plus de l'erreur dans le codage, le pic ne va pas savoir si le 2,5 volts correspond à 0 ou à 5 V ?

    d'après vous c'est quoi la cause de mon problème ?

    pour mieux comprendre voici le datasheet du 74C923 : http://www.datasheetcatalog.com/data...9/74C923.shtml

    NB: sur ISIS la simulation a pourtant bien fonctionner sur l'encodeur 74C922 relié à un clavier 16 touches !


    voici le code du programme du PIC :
    Code:
    #include <16F877a.h>
    //#device adc=8
    #use delay(clock=4000000)
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
    
    
    
    #define DEM1      PIN_A0
    #define DEM2      PIN_A1   // pin reliée au démultiplexeur
    #define DEM3      PIN_A2
    #define DEM4      PIN_A3
    #define A4        PIN_A4
    #define A5        PIN_A5
    
    #define TIS       PIN_E0  // pin relié au relais de choix Temp/Isol pour Simplexe
    #define TID       PIN_E1  // pin relié au relais de choix Temp/Isol pour Duplexe
    #define CTD       PIN_E2  // pin relié au relais de choix test de température C1/C2 pour Duplexe
    
    #define R1        PIN_C0  // pin reliée au  relais 1 via l'étage de puissance
    #define R2        PIN_C1  // pin reliée au  relais 2 via l'étage de puissance
    #define R3        PIN_C2  // pin reliée au  relais 3 via l'étage de puissance
    #define R4        PIN_C3  // pin reliée au  relais 4 via l'étage de puissance
    #define LED_isol  PIN_C4  // pin reliée a une LED qui indique que le test en cours est un test d'isolement
    #define LED_temp  PIN_C5
    #define C6        PIN_C6
    #define C7        PIN_C7
    
    
    #define D0        PIN_D0
    #define D1        PIN_D1
    #define D2        PIN_D2
    #define D3        PIN_D3
    #define D4        PIN_D4   //  pin du PIC relié au Décodeur (affichage)
    #define D5        PIN_D5
    #define SIM       PIN_D6
    #define DUP       PIN_D7
    
    #define B0        PIN_B0
    #define B1        PIN_B1
    #define B2        PIN_B2
    #define B3        PIN_B3
    #define B4        PIN_B4   //  pin du PIC relié au Décodeur (affichage)
    #define B5        PIN_B5
    #define B6        PIN_B6
    #define B7        PIN_B7
    
    
    int simpl, dupl, isol, temp ;
    
    
    
    
    void choix_et_affich_isol(byte encodeur)  // cette fonction lorsequ'elle est exécuté fait éteindre la LED d'isolement, pkoi  ???!, port c ?
    
    {
    if (isol==1)
    
     {
    
    
      switch (encodeur)
       {
    
    case (0x04) :   // test d'isolement C1m
    
         {
         output_c(0X19) ;   //printf("maintenant test d'isolement C1m") ;
         output_d(0X01) ;
         break;
         }
    
    
    case (0x05) :  // test d'isolement C1M
    
         {
         output_c(0X11) ;
         output_d(0X02) ;
    
         break;
         }
    
    
    
    case (0x06) :  // test d'isolement mM
    
          {
          output_c(0X18) ;
          output_d(0X03) ;
          break;
          }
    
    
    case (0x07) :  // test d'isolement C2m
    
          {
          output_c(0X1A) ;
          output_d(0X04) ;
          break;
          }
    
       }
    
     }
    
    }
    
    
    
    
    
    void reset(byte encodeur)
    
    {
    
     if ( (encodeur==0x00) || (encodeur==0x01) )
      {
        simpl=0 ;
        dupl=0;
        isol=0;
        temp=0;
        output_low(LED_isol);
        output_low(LED_temp);
        output_low(TIS);
        output_low(TID);
        output_low(CTD);
        output_a(0x00);
      }
    
    }
    
    
    
    
    
    
    
    void choix_simplex_duplex(byte encodeur)  // cette fonction est rebouclé tout le temps , on peut passer entre les deux boutons en traversant le programme sans alterer le reste car le main est un ensemble de fonction avec des case et si aucune n'est validé , on retourne a la fonction du début qui est choix simplex/duplex
    {
    
    reset(encodeur);  // cette fonction n'est exécutée que si le dernier bouton appuyé est SIMPL ou DUPL --> il ya pas donc de risque d'une reset en boucle
               // même si on ne touche pas à un bouton (après avoir appuyé sur SIMPL ou DUPL ) la fonction reset() est exécutée ( car elle est à l'intérieur d'une boucle) .
    
      switch (encodeur) {
    
    
    
     case (0x00) :  // bouton simplexe
    {
    //reset(encodeur);
    
    output_high(SIM) ;  // c temporaire, juste pour visualiser
      simpl=1;
      dupl=0;
      break;
    }
    
     case  (0x01) : // bouton duplexe
    {
    //reset(encodeur);
    output_high(DUP) ;
      dupl=1;
      simpl=0;
      break;}
    
      }
    }
    
    
    void  choix_isol_temp(byte  encodeur)
    
    {
    
    switch (encodeur)
    
     {
    
    
     case (0X02) :  // bouton isolement appuyé
    
       {
       output_c(0x10) ;      // LED d'isolement allumée
          // output_high(LED_isol) ;
          // output_low(LED_temp) ;
    
      isol=1;
      temp=0;
    
       if (simpl==1)
           {
          // output_low(TIS) ;
          output_e(0x0) ;         // passer d'un eventuel test en Temp
           }
    
    
       if (dupl==1)
           { // output_low(TID) ;
             output_e(0x0) ;         // passer d'un eventuel test en Temp
           }
    
       break;
    
        }
    
     case (0X03) :    // bouton temperature appuyé
        {
    
        output_c(0x20) ;   // c bon, ca n'affecte pas la commande des 4 relais et la LED reste allumé pendant la sélection de voies.
           //output_low(LED_isol) ;
           //output_high(LED_temp) ;
    
      isol=0;
      temp=1;
    
    
      if (simpl==1)
         { // output_high(TIS) ;
            output_e(0x01) ;   // passer à un test en Temp
         }
    
      if (dupl==1)
         { // output_high(TID) ;
           output_e(0x02) ;     // passer à un test en Temp
         }
    
       break;
        }
     }
    
    }
    
    void select_voie(byte encodeur)
    
    {
     if (simpl==1) {
    
      switch (encodeur) {
     case (0x08)  :             {
    
    output_a(0x00) ;
    
    break; }
    
     case  (0b00001001)  :  //     0b00001101 : // voie 2, simplexe
    
        {
    output_a(0x01) ;
    
    break; }
    
     case (0b00001010) : //   0b00001110 : // voie 3, simplexe
    
        {
    
    output_a(0x02) ;
    
    break; }
    
     case (0b00001011) : // voie 4, simplexe
    
        {
    output_a(0x03) ;
    break; }
    
     case (0b00001100) : // voie 5, simplexe
    
        {
    output_a(0x04) ;
    break;}
    
     case (0b00001101) : // voie 6, simplexe
     
        {
    
    output_a(0x05) ;
    
    break; }
    
     case (0b00001110) : // voie 7, simplexe
    
        {
    
    output_a(0x06) ;
    
    break; }
    
     case (0b00001111) : // voie 8, simplexe
    
        {
    
    output_a(0x07) ;
    
    break; }
    
    } // fin pour switch
    
         } // pour if
    
    
         if (dupl==1) {
    
     switch (encodeur) {
    
     case (0b00001000) : // voie 1, duplexe
     
        {
    output_a(0x08) ;
    
    break; }
    
     case (0b00001001) : // voie 2, duplexe
    
        {
    
    output_a(0x09) ;
    
    break;  }
    
     case (0b00001010) : // voie 3, duplexe
    
        {
    
    output_a(0x0a) ;
    
    break; }
    
     case (0b00001011) : // voie 4, duplexe
    
        {
    
    output_a(0x0b) ;
    
    break; }
    
     case (0b00001100) : // voie 5, duplexe
    
        {
    
    output_a(0x0c) ;
    
    break; }
    
     case (0b00001101) : // voie 6, duplexe
     
        {
    
    output_a(0x0d) ;
    
    break; }
    
     case (0b00001110) : // voie 7, duplexe
    
        {
    
    output_a(0x0e) ;
    
    break; }
    
     case (0b00001111) : // voie 8, duplexe
    
        {
    
    output_a(0x0f) ;
    
    break; }
    
      }  // fin pour switch
    
     }  //fin pour if
    
    }
    
    
    
    byte  encodeur;
    
    void main()
    {
    
       setup_adc_ports(NO_ANALOGS);
       setup_adc(ADC_OFF);  // convertisseur ana/num désactivé !
       set_tris_a(0) ;
       set_tris_c(0) ;
       set_tris_d(0) ;
       set_tris_e(0) ;
    
    // set_tris_b(1) ;
    
     output_d(0)   ;
     output_c(0)   ;
    
    
    encodeur=input_b() >> 4 ;  // même princie en nput ??
    
    
    output_low(LED_isol) ; // LED éteinte
    output_low(LED_temp) ;
    
    
    while (1)
       {
    
    encodeur=input_b() >> 4 ;
    
    choix_simplex_duplex(encodeur) ;
    
    choix_isol_temp(encodeur) ;
    
    choix_et_affich_isol(encodeur) ;
    
    select_voie(encodeur);
    
    
       }
    
    }
    Dernière modification par Voltron ; 06/09/2007 à 01h36.
     


    • Publicité




      Poursuivez votre recherche
      Recherche personnalisée

  2. DAUDET78

    Date d'inscription
    septembre 2006
    Localisation
    Ile de France
    Âge
    69
    Messages
    32 131

    Re : 2,5 V sur l'input d'un PIC ???

    J'y connais rien en PIC, mais c'est typique d'un conflit entre ton entrée externe et ta patte de PIC qui est resté en Output. Règle ce problème et ensuite tu auras un beau 5V que ton PIC lira avec voluptuosité !
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !
     

  3. invite_P89
    Invité

    Re : 2,5 V sur l'input d'un PIC ???

    LU
    pour mettre ton port B en entrée IL faut TRISB=1
    pour mettre ton port D en entrée Il faut TRISD=1
    a bientôt
     

  4. invite_P89
    Invité

    Re : 2,5 V sur l'input d'un PIC ???

    RELU
    pas vu desolé sorties decodeur sur port A
    fait attention A4 est a drain OUVERT donc resistance sur ce port si tu utilise A4
     

  5. invite_P89
    Invité

    Re : 2,5 V sur l'input d'un PIC ???

    Citation Envoyé par Voltron Voir le message
    salut,

    je commande avec un PIC 16F877 avec un clavier 20 touches via l'encodeur 74C923 (à travers 4 pins), RB4,RB5,RB6 et RB7,

    ici tu nous dit que ton decodeur est sur PORT B
    puis apres c'est le port A qui gere le decodeur on sait plus regarde de ce coté
    ou est ton decodeur sur quel port,ce port est-il en entré moi je ne sais plus

    a bientôt
     

  6. freepicbasic

    Date d'inscription
    août 2006
    Localisation
    France
    Âge
    56
    Messages
    2 737

    Re : 2,5 V sur l'input d'un PIC ???

    2,5V sera lu comme un 5V c'est à dire 1.
    Il semblerait qu'il y ai un mauvais cablage 2,5V signifie qu'il y a 2 résistances égales 1 au + 1 au moins, ou comme disait Daudet78 2 sorties en conflit l'une à 0 l'autre a 1.

    Sur le bout de code on ne voit pas la partie scan ou autre ,
    donc on ne peut pas savoir s'il y a un bug,
    mais c'est plutôt un problème de câblage, un bug ne peut pas faire du 2,5V.
    A+, pat
     


    • Publicité



  7. Voltron

    Date d'inscription
    mars 2007
    Messages
    353

    Re : 2,5 V sur l'input d'un PIC ???

    Citation Envoyé par DAUDET78 Voir le message
    J'y connais rien en PIC, mais c'est typique d'un conflit entre ton entrée externe et ta patte de PIC qui est resté en Output. Règle ce problème et ensuite tu auras un beau 5V que ton PIC lira avec voluptuosité !
    Salut,

    salut DAUDET,

    les ports B du PIC sont déjà configuré en input ?, la preuve c'est que le PIC a capté le signal issues de l'encodeur sur RB4 et RB5 !
     

  8. Voltron

    Date d'inscription
    mars 2007
    Messages
    353

    Talking Re : 2,5 V sur l'input d'un PIC ???

    Citation Envoyé par Pom26 Voir le message
    ici tu nous dit que ton decodeur est sur PORT B
    puis apres c'est le port A qui gere le decodeur on sait plus regarde de ce coté
    ou est ton decodeur sur quel port,ce port est-il en entré moi je ne sais plus

    a bientôt
    salut Pom26,

    il s'agit d'une erreur dans le commentaire que j'ai oublié de supprimer !
    , ce sont uniquement les pins B (RB3-->RB7) qui gèrent l'encodeur !
     

  9. Voltron

    Date d'inscription
    mars 2007
    Messages
    353

    Re : 2,5 V sur l'input d'un PIC ???

    Citation Envoyé par freepicbasic Voir le message
    2,5V sera lu comme un 5V c'est à dire 1.
    Il semblerait qu'il y ai un mauvais cablage 2,5V signifie qu'il y a 2 résistances égales 1 au + 1 au moins, ou comme disait Daudet78 2 sorties en conflit l'une à 0 l'autre a 1.

    Sur le bout de code on ne voit pas la partie scan ou autre ,
    donc on ne peut pas savoir s'il y a un bug,
    mais c'est plutôt un problème de câblage, un bug ne peut pas faire du 2,5V.

    salut freepicbasic,

    j'ai vérifié le cablage et le code et il me semble qu'il sont correctes !
     

  10. DAUDET78

    Date d'inscription
    septembre 2006
    Localisation
    Ile de France
    Âge
    69
    Messages
    32 131

    Re : 2,5 V sur l'input d'un PIC ???

    Faut être réaliste :
    1/ Ton encodeur marche si il est seul et à un Vout de 5V
    2/ ton niveau logique sur la broche du PIC passe à 2,5V si tu branches ton encodeur

    Donc il y a un conflit, tu trouvera jamais la cause du problème si tu parts du principe que ton soft est bon et que ton hard est bon.

    Un simple test. Fait un pont diviseur 5V__1K__1K__0V
    Et place le point milieu sur la patte de ton PIC (sans l'encodeur).
    1/ Tu mesures 5V ou 0V sur la patte, elle est en sortie
    2/ Tu mesures 2,5V , elle est en entrée
    (mesure à faire à l'oscilloscope de préférence)
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !
     


    • Publicité



  11. Voltron

    Date d'inscription
    mars 2007
    Messages
    353

    Re : 2,5 V sur l'input d'un PIC ???

    Citation Envoyé par DAUDET78 Voir le message
    Faut être réaliste :
    1/ Ton encodeur marche si il est seul et à un Vout de 5V
    2/ ton niveau logique sur la broche du PIC passe à 2,5V si tu branches ton encodeur

    Donc il y a un conflit, tu trouvera jamais la cause du problème si tu parts du principe que ton soft est bon et que ton hard est bon.

    Un simple test. Fait un pont diviseur 5V__1K__1K__0V
    Et place le point milieu sur la patte de ton PIC (sans l'encodeur).
    1/ Tu mesures 5V ou 0V sur la patte, elle est en sortie
    2/ Tu mesures 2,5V , elle est en entrée
    (mesure à faire à l'oscilloscope de préférence)
    bien DAUDET, mais j'aurais toujours 2,5 V sur RB6 ou RB7 dans ce cas !, car avec ce montage j'impose la tension au pin du PIC, qu'il soit configuré en entrée ou en sortie !?

    t'en dis quoi ?

     

  12. DAUDET78

    Date d'inscription
    septembre 2006
    Localisation
    Ile de France
    Âge
    69
    Messages
    32 131

    Re : 2,5 V sur l'input d'un PIC ???

    Citation Envoyé par Voltron Voir le message
    bien DAUDET, mais j'aurais toujours 2,5 V sur RB6 ou RB7 dans ce cas !, car avec ce montage j'impose la tension au pin du PIC, qu'il soit configuré en entrée ou en sortie !?
    Si ton PIC est en sortie j'impose une tension de sortie de 2,5v à ton PIC Mais avec un courant max de 5 mA. Si ton PIC est en sortie, c'est lui qui impose sa tension (je crois qu'il peut driver 25 mA).

    Avant de discuter, fait la manip et on regarde les résultats !
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !
     

  13. Voltron

    Date d'inscription
    mars 2007
    Messages
    353

    Re : 2,5 V sur l'input d'un PIC ???

    Citation Envoyé par DAUDET78 Voir le message
    Avant de discuter, fait la manip et on regarde les résultats !
    OK !!
     

  14. cranor

    Date d'inscription
    août 2007
    Localisation
    Ile de France
    Âge
    27
    Messages
    71

    Re : 2,5 V sur l'input d'un PIC ???

    Citation Envoyé par Pom26 Voir le message
    LU
    pour mettre ton port B en entrée IL faut TRISB=1
    pour mettre ton port D en entrée Il faut TRISD=1
    a bientôt
    ça mettra uniquement la premiere broche de chaque port en entrée..

    TRISB(ou D)=255 (ou 0xFF) pour toutes les broches
     


    • Publicité



  15. RISC

    Date d'inscription
    novembre 2006
    Messages
    2 453

    Re : 2,5 V sur l'input d'un PIC ???

    Citation Envoyé par Voltron Voir le message
    je pense que dans ce cas en plus de l'erreur dans le codage, le pic ne va pas savoir si le 2,5 volts correspond à 0 ou à 5 V ?
    Salut pour les microcontroleurs et autres circuits logiques, les 0 et 1 logiques correspondent à des plages de tensions qui dépendent de la tension d'alimentation.
    Pour le PIC16F877, voir la documentation page 155 paramètres VIL et VIH :
    http://ww1.microchip.com/downloads/e...Doc/30292c.pdf

    Un 0 logique (VIL) doit être compris entre 0 et 0.15Vdd
    Un 1 logique (VIH) doit être compris entre 0.25Vdd+0.8V et Vdd .

    Donc en gros de 0 à 0.8V c'est compris en entrée comme un 0 et de 2V à 5V comme un 1.
    Ton 2.5V sera donc vu comme un 1 (si ton alimentation est de 5V).

    A+
     


Poursuivez votre recherche :




Sur le même thème :




 

Discussions similaires

  1. erreur 0X00 programmation PIC plus questions sur les PIC
    Par ROTT dans le forum Électronique
    Réponses: 4
    Dernier message: 22/07/2007, 15h36
  2. autour d'un PIC!?
    Par jim@ dans le forum Électronique
    Réponses: 7
    Dernier message: 04/07/2007, 18h34
  3. Fort courent sur uen entrée d'un PIC
    Par Djludo dans le forum Électronique
    Réponses: 10
    Dernier message: 23/05/2007, 22h26
  4. Aide sur les variables d'un PIC
    Par Acidmaster dans le forum Électronique
    Réponses: 4
    Dernier message: 12/06/2006, 19h17
  5. Réponses: 24
    Dernier message: 11/05/2006, 15h07


Les tags pour cette discussion