IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Accès direct aux entrées / sorties


Sujet :

Arduino

  1. #1
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut Accès direct aux entrées / sorties
    bonjour

    Avec Arduino, pour gagner du temps d'exécution il est possible de faire des accès directs sur les entrées et les sorties des 3 ports disponibles :
    https://www.arduino.cc/en/Reference/PortManipulation

    La question que me pose est de savoir s'il existe un registre qui permet d'accéder en lecture ou en écriture aux trois ports en même temps. C'est à dire au lieu de manipuler 3 ports (PORTB, PORTC, PORTD) de 8 bits, manipuler un registre de 24 bits (3x8) qui correspond aux 24 E/S disponibles.


    Le but est d'avoir une carte avec 24 E/S dont les états sont synchrones. Dans la datasheet de l' ATMega 328p je n'ai pas trouvé un tel registre, mais j'aimerais avoir une confirmation.

  2. #2
    Membre actif Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Points : 263
    Points
    263
    Par défaut
    Salut,

    j'ai jamais travaillé sur Atemega mais en lisant la doc je pense que tu peux en jouant avec clkI/O.

    Tu charges t'es registres et tu déclenche la clock, mais j'arrive pas à trouver si tu peux contrôler cette clock.

    Si déjà ça peut t'aider

    Je ne pense pas que tu puisses synchroniser autrement différents pins de plusieurs registre sur µC 8 bits

  3. #3
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut,
    Je n'ai rien vu de tel dans la doc du ATMEGA328P (ce n'est pas possible non plus avec d'autres micro que je connais). Chez Microchip, tu as un registre LATCH mais il permet de "latcher" 8 bits E/S en même temps mais pas au delà.

    En s'inspirant de ce que propose cedd70 :
    Ce que tu souhaites faire doit être est possible mais avec de l'électronique a côté du micro, par exemple avec des 74HC573 http://assets.nexperia.com/documents...4HC_HCT573.pdf
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir Auteur

    C'est un micro 8bits! Donc pas d'écriture simultanée de plus de 8bits, il y a quelques exceptions avec un registre temporaire pour les timers 16bits et c'est tous.
    J'ai commencé un peu le code en C pour cette famille, et généralement en écrivant les 3 à la suite (affectation directe, sans calcul), le Delta T c'est un coup d'horloge. Le compilateur charge jusqu'à 4 valeurs distinctes dans les registres puis fait les sorties à la suite sur les E/S.

    Reste une autre possibilité, mais qui tient du bricolage, c'est l'utilisation du bit PUD du registre MCUCR.
    Ce bit unique permet de désactiver l'ensemble des pull-up. Donc pour passer de 0 à une valeur quelconques des 24 sorties ou l'inverse, et pour autant que le circuit en face arrive à travailler avec les sorties de l'AVR configurées en entrée (0 = tri-state, 1 = Pull-up activé).

    Bonne soirée

    Delias

  5. #5
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    c'est bien ce qu'il me semblait

    Dans la datasheet au niveau du diagramme on voit un bloc "I/O port" pour les 3 ports B, C et D ce qui me laissait penser qu'un registre pouvait contrôler les 3 éléments.

    Citation Envoyé par Vincent Petit
    ce que tu souhaites faire doit être est possible mais avec de l'électronique a côté du micro, par exemple avec des 74HC573
    c'est ce qu j'ai fait avec des 74LS541 : toutes les voies sur les entrées et une voie "trigger" sur les broches E1 et E2 du composant. Mais je vois que 573 est plus pratique que le 541

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Un petit shield avec des composants traversants. Je tâcherai de poster un code pour le piloter.

    Je n'ai pas connecté D0 et D1 car ils sont utilisés pour la liaison série chez le UNO, le but étant d'envoyer sur le port série une commande pour activer telle ou telle sortie.
    Images attachées Images attachées  

  7. #7
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut


    Ça pourrait être une bonne idée "des shields Developpez.com"
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  8. #8
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    hop, petites modifications : j'ai ajouté une sortie 5V et une masse sur les 2 broches non utilisées sur le connecteur 34 voies

    Reste à faire la programmation
    Images attachées Images attachées  

  9. #9
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Juste une petite remarque.
    L'état du shield au démarrage n'est pas fixé.

    Lorsque tout va démarrer, Latch Enable (broche 11 notée C) sera en l'air ce qui peut "latcher" les données d'entrée 1D à 8D (qui seront aussi en l'air donc états non définis) vers les sorties 1Q à 8Q.
    La question a se poser est lorsque Arduino démarre qu'est ce que j'ai sur 1Q à 8Q ? État haut ? État bas ?

    Il y a plusieurs solutions
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  10. #10
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    J'y ai pensé. Mon code commence comme ceci :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      pinMode(LATCH_ENABLE, OUTPUT);
      digitalWrite(LATCH_ENABLE, LOW); // sorties du 74HC573 désactivées  
     
      for (i=0; i<16; i++)
      {
        pinMode(OUT_PORT[i], OUTPUT);
        digitalWrite(OUT_PORT[i], HIGH);
      }
     
      digitalWrite(LATCH_ENABLE, HIGH); // sorties activées

    Mais peut-être qu'au lieu de fixer l'état de la voie OE sur la carte, je devrais piloter aussi cette voie avec l'Arduino... Par défaut elle est reliée au +5V au travers une résistance et sur la voie A5. Au démarrage de l'Arduino, après initialisation de toutes les voies, je bascule A5 à LOW.
    Au démarrage toutes les voies seraient ainsi en haute impédance.
    Mais je ne suis pas sûr de moi, il faut que je regarde le statut de ces voies par défaut

  11. #11
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 619
    Points : 56 854
    Points
    56 854
    Billets dans le blog
    40
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Ça pourrait être une bonne idée "des shields Developpez.com"
    J'aime bien l'idée

    Ce shield me rappelle celui-ci.

  12. #12
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Voici un code Arduino. Je n'ai pas résolu le problème soulevé par Vincent au moment de la mise sous tension de la carte ou lors du reset.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    // Pilotage de 2 composants 74HC573 composés de 8 verrous type D pour obtenir ainsi 16 sorties numériques.
     
    // Un programme envoie une chaine de caractères de la forme "ppppp\n" (soient 6 caractères) avec ppp
    // le code en puissance de 2 (de 1 à 2^16-1=65535). Si une sortie est à 0 elle passera à 1 et inversement.
    // Le contenu de la chaine lue est placée dans  la variable buf.
     
    // - Attention les pins 0 (RX) et 1 (TX) sont connectés au port USB sur UNO !
    // Ne pas les utiliser car les fonctions port série sont implémentées dans le script.
     
    // Rappel, ports :
    //    B (digital pin 8 to 13) 
    //    C (analog input pins)
    //    D (digital pins 0 to 7)
    // => Dans notre configuration :
    //    B pins 8 to 13 (6 sorties)
    //    C voies A0, A1, A2, A3 (4 sorties) 
    //    D pins 2 to 7 (6 sorties)
    // => valeurs entre 1 et 65535 (16 bits)
     
     
    const int OUT_PORT[12] = {2,3,4,5,6,7,8,9,10,11,12,13,A0,A1,A2,A3};
    const int LATCH_ENABLE = A4;
     
     
    char buf[6];
    byte n, dataB, dataC, dataD;
    String strPort;
    long port;
    int i;
    char *pch;
     
     
    void setup()
    {
      pinMode(LATCH_ENABLE, OUTPUT);
      digitalWrite(LATCH_ENABLE, LOW); // sorties du 74HC573 désactivées  
     
      for (i=0; i<12; i++)
      {
        pinMode(OUT_PORT[i], OUTPUT);
        digitalWrite(OUT_PORT[i], LOW);
      }
     
      pinMode(LATCH_ENABLE, OUTPUT);
      digitalWrite(LATCH_ENABLE, HIGH); // sorties activées
     
      Serial.begin(9600);
      /*while (!Serial) 
      {
        // attente de connexion du port série. Pour Leonardo seulement.
        // boucle à supprimer pour UNO
      }*/
     
    }
     
     
    void loop()
    {
      if (Serial.available() > 0) 
      {
          // Lecture de la donnée reçue
          n = Serial.readBytesUntil('\n', buf, 6);
     
          if (n > 0)
          {
              pch = strtok(buf, "\n");
              strPort = pch;
     
              port = strPort.toInt();
              port = port << 2;                 // car les pins 0 et 1 ne sont pas utilisés
     
              if (port >= 4 && port <= 262140) // 65535<<2 = 262140 ;-)
              {
                digitalWrite(LATCH_ENABLE, LOW); // sorties du 74HC573 désactivées  
                // application des masques pour récupérer les données pour chaque port
                //    | xxxx  | xxxx xx | xx xxxx00 |
                //    | portC | portB   | port D    |
     
                dataD = port & 0xFC;
                dataB = (port & 0x3F00) >> 8;
                dataC = (port & 0x3C000) >> 14;
                // accès directs aux ports                
                PORTD = PORTD ^ dataD;
                PORTB = PORTB ^ dataB;
                PORTC = PORTC ^ dataC;
     
                digitalWrite(LATCH_ENABLE, HIGH); // sorties du 74HC573 activées  
              }         
          }
      }
    }


    et un code Python pour envoyer les commandes de 1 à 255 (je débute dans ce langage )
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import serial
    import time
     
    ser = serial.Serial()
    ser.port='/dev/ttyACM0'
    ser.baudrate = 9600
    ser.bytesize = serial.EIGHTBITS 
    ser.parity = serial.PARITY_NONE
    ser.stopbits = serial.STOPBITS_ONE
    ser.timeout = 10
    ser.xonxoff = False     
    ser.rtscts = True     
    ser.dsrdtr = True
    ser.open()
    print('Ouverture du port serie')
     
    time.sleep(5)   # laisser le temps à l'arduino de s'initialiser
                    # +/- long selon la carte
     
    for i in range(1, 256):
        #print(i)
        data = str(i) + '\n'
        if (i < 10000):
            data = '0' + data
        if (i < 1000):
            data = '0' + data
        if (i < 100):
            data = '0' + data
        if (i < 10):
            data = '0' + data
     
        print(data)        
        n = ser.write(data.encode('utf-8'))
        ser.flush
        time.sleep(0.2)
        n = ser.write(data.encode('utf-8'))
        ser.flush
        time.sleep(0.2)
     
     
    ser.close()
    print('Terminé')

  13. #13
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    C'est vrai que l'un des points critiques en électronique c'est la condition de démarrage qui peut provoquer des défauts furtifs et par moment très gênants.

    Dans l'ordre :
    1. L'alimentation va s'établir et l'électronique s'activer.
    2. Le micro va démarrer et son programme se lancer.



    Donc en 1- nous serons dans cette situation :
    Pour mémoire quand LE = HIGH les données d'entrées arrivent sur les sorties directement (mode transparent) et quand LE = LOW les données de sorties sont verrouillées avec les données précédentes.
    OE/ = HIGH signifie que les sorties sont en hautes impédances et assimilées à en l'air ou déconnectées et si OE/ = LOW alors les sorties valent soit HIGH ou LOW mais en aucun cas elles sont déconnectées.

    Nom : Capture du 2017-03-09 23-50-58.png
Affichages : 810
Taille : 22,7 Ko
    LE en l'air et OE/ = LOW. Comme LE est en l'air, il peut être vu comme un HIGH par le composant et il transférera les données d'entrées en l'air vers les sorties. Etant donnée que OE/ est à LOW les données de sorties prendrons des valeurs HIGH ou LOW suivant comment le composant interprète l'entrée. Nous nous retrouvons donc avec des données de sorties non déterminées durant le démarrage ce qui peut gêner l'utilisateur du shield.

    1er possibilité :
    Mettre LE = LOW ainsi que toutes les entrées par des résistances de pulldown ainsi nous serons en mode transparent avant le démarrage (transfert immédiat des entrées fixées à LOW vers les sorties qui prendront l'état LOW puisque OE/ = LOW)
    Nom : Capture du 2017-03-09 23-50-59.png
Affichages : 771
Taille : 22,5 Ko
    Nous nous retrouvons donc avec des données de sorties connues durant le démarrage et l'utilisateur du shield peut concevoir son montage toute connaissance.

    2eme possibilité :
    Se servir de OE/ en le mettant a HIGH via une résistance de pullup le temps du démarrage afin de laisser les sorties déconnectées.
    Nom : Capture du 2017-03-09 23-50-60.png
Affichages : 807
Taille : 22,5 Ko
    L'avantage est que l'on peut se passer de toutes les autres résistance de pulldown de la première solution mais cela implique que l'utilisateur du shield devra lui en mettre sur son montage. Pour une personne non initiée ça peut être un problème puisqu'il se retrouve a nouveau avec des données de sorties non déterminées pendant le démarrage.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  14. #14
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    1ère possibilité : est sans doute la meilleure, les sorties ont un état déterminé lors de la mise sous tension. Les résistances de pulld-down sont sur les entrées des composants.

    2ème possibilité : moins bien. Pour bien faire, il faudrait dans ce cas mettre les résistances en pull-down sur les sorties pour fixer leur niveau au démarrage. Le gros problème est que si l'impédance d'entrée du système est trop faible on se retrouve avec un pont diviseur et les sorties risquent de pas avoir un niveau en tension suffisamment élevé pour avoir un état haut.

  15. #15
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir Auteur

    Au démarrage, l'AVR a ses E/S en tri-state. C'est donc effectivement les pull-ups/pull-downs qui fixeront l'état des entrées des 74HC573.
    Avec des 74LSxx, les entrées seraient considérées comme étant à 1, mais avec des 74HCxx, c'est pas bon de les laisser en l'air, sur les vieux chips on les grillait de la sorte.

    Mon conseil: tu mets des résistances de pull-up/pull-down sur les 16 entrées des signaux en fonction de ce que tu veux sur les sorties lors du démarrage, et si tu as la même valeur pour tous, tu peux même prendre deux réseaux de résistance en SIL9. L'entrée de commande LE en pull-up et le OE/ peut rester connecté à GND de manière permanente.
    La valeur des pull-up/pull-down peut être élevé (à 10k, 22k, 47k) pour limiter la consommation, car c'est des circuits CMOS.

    Si tu écris en premier sur DDRx, puis sur PORTx, les sorties passeront par un état de sortie à 0 avant de prendre les valeurs prévues. Si tu fais l'inverse (écriture en premier sur PORTx, puis sur DDRx), il y aura un état transitoire avec les pull-up activé sur les sorties qui seront à un avant d'avoir un état de sortie correspondant aux valeurs prévues.

    Bonne nuit

    Delias

  16. #16
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut,
    Citation Envoyé par Auteur Voir le message
    1ère possibilité : est sans doute la meilleure
    C'est aussi ce que je pense.

    Citation Envoyé par Delias Voir le message
    Avec des 74LSxx, les entrées seraient considérées comme étant à 1
    Pour quelle raison ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  17. #17
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonjour Vincent

    C'est une caractéristique des techno TTL (74xx, 74Lxx, 74Sx, 74LSxx, 74ASx, 74ALSxx, 74Fxx, etc...) les entrées en l'air sont à 1 dû au circuit interne des puces.
    En techo CMOS (4000, 74Cxx, 74HCxx, 74HCTxx, etc...) les entrées en l'air oscillent à une fréquence supérieur à la limite et le circuit se détruit à petit feu par surconsommation.

    Delias

  18. #18
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    +1
    Je ne m'en souvenais plus de ça ! Et pourtant ça faisait partie de mon programme scolaire de l'époque.

    Merci
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  19. #19
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Delias, ça ne vient pas aussi du fait qu'en LS tu entres sur des bases de transistors à travers une diode Schottky et que cette même base est aussi reliée à l'alimentation à travers une résistance ? Pour les CMOS (HC et HCT) tu attaques la grille d'un FET qui, par défaut n'est relié à rien ?

    Voilà une mise à jour du schéma avec en prime une illustration 3D du shield (avec un vernis bleu pour plus de contraste). J'ai ajouté deux réseaux de résistances sur les entrées. J'ai même placé une résistance sur l'entrée C.
    Images attachées Images attachées   

  20. #20
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonjour Auteur

    En TTL Schottky, le transistor d'entrée est bien le seul qui n'a pas de diode Schottky
    Les entrées sont raccordées aux émetteurs d'un transistor NPN dont la base est tirée au rail VCC par une résistance. En cas d'entrées AND et NAND, c'est un transistor avec plusieurs émetteurs.
    Le collecteur sert à commander l'étage suivant. Ce transistor d'entrée ne fonctionne pas en transistors mais en diodes!
    Ce sont les autres transistors qui ont une diode Schottky d'anti-saturation ce qui permet de réduire la durée de désaturation du transistor et par conséquence d'augmenter la vitesse du circuit.

    En CMOS, le C veut dire complementary, chaque entrée attaque deux grilles de MOSFET, un P relié au VCC et un N relié au GND. Pour réaliser les fonctions logique les transistors sont mis en série//parallèle et inversés entre les P et les N. Il y a d'office un petit couplage entre l'entrée et la sortie ce qui entraine un circuit oscillant.

    Tes condo de déparasitage, c'est quel type? Le footprint montre des plastique à écartement de 200mils, alors que l'on doit monter des céramiques généralement au pas de 100mils. Et même les plus petits avec la grosse tolérances de 20%, car c'est ceux qui ont la plus petite résistance série parasite.

    Les schémas éventuellement pour ce soir.

    Delias

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Enlever accès direct aux pages avec struts
    Par Verboz dans le forum Struts 1
    Réponses: 7
    Dernier message: 09/05/2007, 15h29
  2. Gérer l'acces direct aux tables suivant les utilisateurs
    Par kristof33 dans le forum Sécurité
    Réponses: 2
    Dernier message: 02/03/2007, 08h11
  3. Interdire l'acces directe aux fichiers php
    Par Never dans le forum Apache
    Réponses: 4
    Dernier message: 04/12/2006, 21h00
  4. htaccess : interdire l'accès direct aux fichiers php
    Par Cédricss dans le forum Apache
    Réponses: 5
    Dernier message: 08/10/2006, 11h29
  5. [TOMCAT] Comment empêcher l'accès direct aux fichiers
    Par thomine dans le forum Tomcat et TomEE
    Réponses: 17
    Dernier message: 14/04/2005, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo