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

Embarqué Discussion :

Périphériques PS / 2 [Électronique]


Sujet :

Embarqué

  1. #21
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Salut mon gars,
    Pour que tu puisses bosser (jaune CLK, violet DATA) :

    Très bizarre... mon oscillo ne me dit pas la même chose que ce que je vois sur le net !!!!! Tu vois quoi toi avec ton FPGA ?????? C'est étonnant que mon oscillo dise n'importe quoi car je vois bien les 11 coups de CLOCK

    Touche A enfoncée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [START][BIT_0][BIT_1][BIT_2][BIT_3][BIT_4][BIT_5][BIT_6][BIT_7][PARIT][STOP ]
    [  0  ][  1  ][  0  ][  1  ][  0  ][  1  ][  0  ][  0  ][  0  ][  0  ][  1  ]
    Nom : A_enfonce.jpg
Affichages : 777
Taille : 78,5 Ko

    Touche H enfoncée
    Nom : H_enfonce.jpg
Affichages : 703
Taille : 77,9 Ko

    Touche 8 enfoncée
    Nom : 8_enfonce.jpg
Affichages : 723
Taille : 79,6 Ko

    Lorsque n'importe quelle touche est relâchée
    Nom : A_relache.jpg
Affichages : 743
Taille : 75,4 Ko

    Je vais démonter mon clavier pour essayer de comprendre ce que c'est que ce bordel de sortie en collecteur ouvert (qui visiblement n'en est pas une ou bien la résistance de pull up est dans le clavier !!!!)
    Euh... vu l'heure je le ferai demain.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  2. #22
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Appuyer sur 'A' doit générer 0x1C.
    Relâcher 'A' doit générer : 0xF0 0x1C.

    Ce que j'obtiens : 0 1010 1000 0 1
    start : 0
    message : 0x15 (ou 0xEA si il faut inverser les bits).
    parité : 0 => 3 bits à 1, c'est un nombre impair donc parité == 0.
    stop : 1

    edit : 0x15 == 'Q'; je pensais que les claviers azerty fonctionnaient en azerty sans avoir besoin d'interprétation software, mais on dirait pas (en tout cas pas pour celui là).
    Mon oscillo me dit la même chose que toi avec la touche 'A' enfoncée.... 0x15

    Ok, j'ai compris, la touche 8 donne le code hexa 0x75 (chose qui est vrai lorsque la touche Verr num est éteinte et c'était le cas lors de mon test) donc c'est bon.

    Et pour H on a bien 0x33, ça roule.

    Demain je vais éclaircir l'histoire des sorties collecteur ouvert + les fameux transistors du tout premier schéma car j'ai ma petite idée !
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #23
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Très bizarre... mon oscillo ne me dit pas la même chose que ce que je vois sur le net !!!!! Tu vois quoi toi avec ton FPGA ?????? C'est étonnant que mon oscillo dise n'importe quoi car je vois bien les 11 coups de CLOCK
    Citation Envoyé par Vincent PETIT Voir le message
    Mon oscillo me dit la même chose que toi avec la touche 'A' enfoncée.... 0x15
    J'arrive après la bataille, mais oui, apparemment sur clavier azerty 'A' à le code de 'Q'. J'ai pas vérifié, mais c'est probablement pareil pour toutes les autres touches (code qwerty).

    Citation Envoyé par Vincent PETIT Voir le message
    Je vais démonter mon clavier pour essayer de comprendre ce que c'est que ce bordel de sortie en collecteur ouvert (qui visiblement n'en est pas une ou bien la résistance de pull up est dans le clavier !!!!)
    Euh... vu l'heure je le ferai demain.
    Doit yavoir une résistance de 2.7k dans le mien. 'Me demande si c'est standard.


    Les valeurs mesurées correspondent : 2.85 V avec 4.7k et 10k et 3.34V avec 2.2k et 10k.

  4. #24
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Doit yavoir une résistance de 2.7k dans le mien. 'Me demande si c'est standard.
    S'pas standard. j'ai pas la même tension avec une souris (3.34V avec le clavier; 3.0V avec la souris).

    Sinon la logique prend forme (appuie sur 'Q', la valeur récupérée est bonne) :




    Tellement bon SignalTap <3
    Par contre, gros consommateur de mémoire :/


  5. #25
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Bon... après examen de mon clavier ACER, j'ai refait le schéma et ce n'est absolument pas des sorties de type collecteur ouvert.

    Nom : Capture du 2016-02-09 23:22:01.png
Affichages : 823
Taille : 15,3 Ko

    D1 = Diode zener 5.6V de protection, qui sert a clamper la tension d'alimentation à 5.6V en cas de dépassement.
    C4 = Condensateur de découplage général du circuit
    R1 et C1 = Circuit RC de reset du contrôleur de souris, la tension au borne de C1 grandit exponentiellement donc le contrôleur sort proprement du mode reset (quand la tension d'alim est déjà présente et non au même moment)
    C2 et C3 = Condensateur de filtrage
    D2 et D3 = Diode zener 5.6V de protection, qui sert a clamper la tension des sorties à 5.6V en cas de dépassement.

    Par contre je re-confirme que mon clavier fonctionne parfaitement bien en +3.3V.

    Comment sais tu que ton clavier ne fonctionne pas en +3.3V ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  6. #26
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Comment sais tu que ton clavier ne fonctionne pas en +3.3V ?
    Testé. Alimenté en 3.3V il ne sa passe rien. Pas de messages lors de l'appuie sur une touche.

    Sinon j'ai testé ça :


    Mais lors d'un envoi hôte -> clavier je reste bloqué à l'étape 4.

    1) Bring the Clock line low for at least 100 microseconds.
    2) Bring the Data line low.
    3) Release the Clock line.
    4) Wait for the device to bring the Clock line low.
    5) Set/reset the Data line to send the first data bit
    6) Wait for the device to bring Clock high.
    7) Wait for the device to bring Clock low.
    8) Repeat steps 5-7 for the other seven data bits and the parity bit
    9) Release the Data line.
    10) Wait for the device to bring Data low.
    11) Wait for the device to bring Clock low.
    12) Wait for the device to release Data and Clock
    Tensions trop basses pour que le clavier interprète ça correctement surement.

    Me demande si un truc comme ça marcherait

  7. #27
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    En ce qui concerne les schémas que tu as essayé, il manque les résistances de base sur les transistors et sans elles ça ne peut pas fonctionner.

    Par contre il y a un truc qui m'ennuie... Comment est ce que la bidirectionnalitée est gérée si on est pas en sortie collecteur ouvert ????
    Je vais refaire un essai ce soir pour déterminer la valeur de l'éventuelle résistance de pull up, qui peut très bien être interne au contrôleur de clavier. (je ne peux donc pas la voir si c'est ça)
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  8. #28
    Membre actif
    Homme Profil pro
    Technicien Layout
    Inscrit en
    Août 2015
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Layout

    Informations forums :
    Inscription : Août 2015
    Messages : 275
    Points : 292
    Points
    292
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    En ce qui concerne les schémas que tu as essayé, il manque les résistances de base sur les transistors et sans elles ça ne peut pas fonctionner.

    Par contre il y a un truc qui m'ennuie... Comment est ce que la bidirectionnalitée est gérée si on est pas en sortie collecteur ouvert ????
    Je vais refaire un essai ce soir pour déterminer la valeur de l'éventuelle résistance de pull up, qui peut très bien être interne au contrôleur de clavier. (je ne peux donc pas la voir si c'est ça)
    Peut etre mm un sortie push-pull
    L’art est une activité humaine, le produit de cette activité ou l'idée que l'on s'en fait s'adressant délibérément aux sens, aux émotions, aux intuitions et à l'intellect. www.elise-galerie.com

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    Question sans doute idiote : est-ce que vous avez le même clavier ? Le protocole de communication du clavier vers le PC est le même certes, mais le microcontrôleur de vos claviers a peut-être un fonctionnement différent. Non ? Ce qui peut expliquer les différences que vous observez.

  10. #30
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Doit yavoir une résistance de 2.7k dans le mien. 'Me demande si c'est standard.
    Idem pour moi dans mon clavier, je viens de la mesurer : 2.7k
    Tout comme toi j'ai mis une résistance de 2.2k entre une sortie et la masse et la pull up a fait diviseur de tension.

    Nous avons bien un sortie de type collecteur ouvert aucun doute

    Comment je le sais ?
    Si c'était un sortie à sortie "push pull" (le grand classique) ou "totem pole" (les anciens circuits TTL hyper fiable) avec une résistance de pull up alors : le circuit aurait envoyé +5V directement entre la pull up et ma résistance 2.2k, cette dernière aurait fait office de simple résistance de charge et traversée par un courant de 2mA. Un tel courant débité sur de tels sorties ne ferait pas écrouler la tension aux bornes de ma 2.2k. La tension aurait été de +5V.

    Avec une sortie collecteur ouvert, ça n'a rien a voir et on envoi aucune tension entre la pull up et ma résistance 2.2k, on a juste un transistor qui : soit est ouvert, au quel cas la pull up et ma 2.2k forme un jolie pont diviseur soit le transistor est fermé et on retrouve simplement VCE (environ 0.6V) aux bornes de ma 2.2k.


    Une résistance de pull up, n'a rien de normalisable puisque son seul rôle c'est de fixer le potentiel à +VCC lorsque le collecteur est ouvert.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  11. #31
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Citation Envoyé par Auteur Voir le message
    Question sans doute idiote : est-ce que vous avez le même clavier ? Le protocole de communication du clavier vers le PC est le même certes, mais le microcontrôleur de vos claviers a peut-être un fonctionnement différent. Non ? Ce qui peut expliquer les différences que vous observez.
    Salut,
    Oui j'y avez pensé aussi mais après beaucoup de lecture sur internet, effectivement, tout le monde s'accorde à dire que le contrôleur du clavier à des sorties de type collecteur ouvert.
    Ce qui en réalité est logique puisque pour qu'une même broche soit bidirectionnelle, elle ne peut être que de type collecteur ou drain ouvert (comme I2C).
    Ensuite se posait la question de la résistance de pull up, où était elle ? Dans le clavier ? Hors du clavier ? Voir nul part et c'est à la main du concepteur de la placer où bon lui semble (comme I2C)
    Les mesures à l'oscillo montre que le pull up est dans le clavier.
    On aurait pu s'arrêter là en se disant que pour n'importe quel clavier c'est pareil (Acer pour le mien)
    Bref en démontant la carte contrôleur et par des mesures je sais que cette pull up est carrément dans mon contrôleur. Un autre test m'a permis de savoir que mon contrôleur supportait très bien +3.3V alors que celui d'Iradrille non.

    Pour moi, ceux sont les contrôleurs qui sont différents (ne supportent pas tous le +3.3V) mais leurs fonctionnement est le même (protocole et structure de sortie)

    Iradrille,
    Demain je te fais un petit schéma pour la liaison bidirectionnelle, je le ferai avec un minimum de composant.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  12. #32
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Ce schéma doit fonctionner (exemple pour DATA, à reproduire de la même manière pour CLK)

    C'est une structure Drain ouvert qui ne dépend pas des courants générés par la pull up interne du clavier/souris dont on ne connait pas la valeur. Au début j'ai essayé d'autres structures a base de transistors Bipolaire mais tous les calculs ceux font en courant avec l'hypothèse de la pull up du clavier... Imaginons qu'un jour on tombe sur un clavier avec une pull up de 100k et plus rien ne marche.

    J'ai aussi testé la solution élégante des 3 diodes mais j'ai réalisé après coup que c'est hyper délicat dans la réalité puisque la tension de seuil (0.7V) est aussi fonction du courant qui passe dans les diodes. Ce courant est celui généré par la pull up dans le clavier et dont on ne connaît pas la valeur (donc pas le courant) En plus avec l'hypothèse d'une 2.7k le courant est tellement faible que la tension de seuil de la diode n'est pas de 0.7V, il est beaucoup plus faible et il aurait fallu plus que 3 diodes. Il en aurait fallu un certain nombre qui dépend de la valeur de la pull up on tourne en rond

    Bref d'où cette solution a base de transistor a effet de champs qui sont indépendants de cette foutue pull up.

    Nom : Capture du 2016-02-11 23:46:29.png
Affichages : 985
Taille : 21,5 Ko

    2 2N7000 MOSFET N
    2 Résistances de 1k, ceux sont les résistances de grille qui sont fonction de la capacité parasite Cgs (plus la résistance est petite = plus la commande peut être rapide = transistor chauffe) Les MOSFET c'est un compromis ! Nous on est à 12kHz donc des résistances de grille de 1k devrait largement aller.
    1 Résistance de 10k en guise de pull up +3.3V pour l'entrée du FPGA

    5 composants, j'ai pas réussi a faire moins en discret.

    ps : J'ai vérifié le Vgs(th) des transingues et il est ok avec un composant alimenté en +3.3V, au pire des cas à 3V le transistor est complètement saturé (il peut encaisser 20V en tension de grille). En dessous de 0.8V il est bloqué. La Rds(on) n'est pas top mais comme les courants mis en jeu sont faibles, les chutes de tensions sont faibles aussi (Uperte=Rds(on)*Ipull up)

    Pour moi ça fonctionne !
    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  13. #33
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Merci !

    Je teste ça dès que possible.

    J'ai pas de 2N7000 (ni aucun mofset d'ailleurs) sous la main, ya moyen de remplacer ça par autre chose ?

    Même si du coup c'est une solution un peu bancale car dépendant de la résistance de pull up, ça m'intéresse. (Pour tester et bosser sur la logique en attendant le facteur pour les 2N7000.)

    edit : Ya un truc que je comprend pas par contre.

    Avec ça, on peut "écrire" 'Z' (quand data_out == 1) et '0' (quand data_out == 0), mais pas '1' ?

  14. #34
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    J'ai pas de 2N7000 (ni aucun mofset d'ailleurs) sous la main, ya moyen de remplacer ça par autre chose ?
    Même si du coup c'est une solution un peu bancale car dépendant de la résistance de pull up, ça m'intéresse. (Pour tester et bosser sur la logique en attendant le facteur pour les 2N7000.)
    Ok je comprends, tu as quoi comme transistor chez toi ?
    Quelle valeur de résistance ?
    Quelle référence de diode ?
    As tu des composants logiques ? Des références ? Sait on jamais !

    Tu veux une solution provisoire même si elle dépend d'un clavier/souris particulier.

    Citation Envoyé par Iradrille Voir le message
    edit : Ya un truc que je comprend pas par contre.

    Avec ça, on peut "écrire" 'Z' (quand data_out == 1) et '0' (quand data_out == 0), mais pas '1' ?
    Je ne comprends pas bien ce que tu veux dire ? Ou plutôt, je n'en suis pas sur donc je te donne la grosse explication.

    Dans un composant qu'on appelle sortie 3 états (TRI-STATE) il peut sortir les états suivants :
    1 - haut = 5V par exemple (donc c'est une sortie)
    2 - bas = 0V par exemple (donc c'est une sortie)
    3 - Z = haute impédance = transistor ouvert (c'est ni une sortie, ni une entrée, c'est presque assimilable à en l'air ou déconnecté si tu préfères)

    Électroniquement parlant, ces composants ont des structures de sorties très élaborées.

    A quoi sert l'état Z concrètement ? Visiblement tu l'as bien compris.
    Il te permet de relier plein de sortie entres elles sans rien casser. Imaginons 5 composants A, B, C, D, E, à sortie 3 états et ton FPGA en entrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    A ---+
         |
    B ---+
         |
    C ---+--------->---- FPGA
         |
    D ---+
         |
    E ---+
    Tout ça peut très bien fonctionner si par exemple A est en sortie pour communiquer avec le FPGA (avec des états Haut ou Bas) tandis que B, C, D, E sont en haute impédance. Si tu ferai la même chose avec des composants à sortie standard (push pull ou totem pole) tu mettrai en court-circuit direct les états haut avec les états bas.

    Maintenant on peut se poser une question intéressante dans des cas plus simple. A t-on besoin d'un truc si riche ? C'est à dire de 3 états ? Un état haut, un état bas et un état Z ?
    Pourquoi ne pourrait t'on pas essayer de gérer que 2 états au lieu des 3 ?

    Pourquoi ne pourrait on pas profiter de l'état de Z (en l'air) pour en faire un état haut par défaut ? Il suffit de lui mettre une résistance de tirage vers l'état haut et je ne gère plus que deux états :
    -Etat bas
    -Etat Z sur le quel est relié une pull-up le forçant à l'état haut.

    Comme quand on relit un interrupteur ou un bouton poussoir à l'entrée d'un micro ou un FPGA, lorsque le bouton est enfoncé alors on envoie souvent le +VCC dans l'entrée mais lorsque le bouton est relâché ? On est à 0V ? En l'air ? Donc pour ne pas être flottant un mettra une pull down, dans mon exemple.
    En réalité dès qu'on met une résistance de pull-up/down sur une broche haute impédance on passe en mode collecteur ou drain ouvert. Car l'état Z est forcé vers un état logique. Alors que sans cette résistance de pull l'état Z c'est presque un état déconnecté. Dans la vraie vie, évidemment ça n'a pas de sens de prendre un composant trois états et de mettre une résistance de pull-up ou down car on aurait des doublons !!! Exemple 2 états haut pour 1 état bas..., les fabricants de composants proposent des circuits intégrés TRI-STATES (élaborés car 3 états distincts) et des circuits intégrés à sorties collecteur/drain ouverts (plus simple car 2 états logique seulement dont l'un des deux est réalisé avec une résistance de pull-up/down)

    Dans mon schéma :
    Si DATA_OUT est à 1, on envoi un 0 vers le clavier (pour rappel un transistor, Q2 ici, est un inverseur)
    Si DATA_OUT est à 0, on passe en mode haute impédance car Q2 est ouvert MAIS il y a une résistance de pull up dans le clavier donc on envoi un 1 vers le clavier.

    Voici les deux cas de figure principal.
    Le clavier envoi des données
    Nom : sch1.png
Affichages : 856
Taille : 26,5 Ko
    Si le clavier envoi une donnée alors la présence de Q1 créera une inversion des données sur DATA_IN (c'est pour ça que j'ai mis un barre à la fin) DATA_IN est en logique +3.3V grâce a la pull up de 10k.
    Concernant DATA_OUT il est protégé par le fait que Q2 soit ouvert complétement, on peut presque le considéré comme un interrupteur ouvert, cette structure fait que que DATA_OUT est en haute impédance grâce à Q2. Si on raisonne en continue Haute Impédance = Haute Résistance et qu'est ce qu'il y a de plus "haut comme résistance" qu'un interrupteur ouvert ? C'est ça que ça veut dire haute impédance, la résistance est tellement forte qu'on peut presque dire qu'on est déconnecté.




    Maintenant si c'est le FPGA qui envoi des données
    Nom : sch2.png
Affichages : 866
Taille : 23,8 Ko
    Le FPGA au travers de DATA_OUT enverra ses données en logique 3.3V mais le transistor Q2 les inversera (c'est pour ça que j'ai mis un barre à la fin de DATA_OUT). Comme c'est une structure de type drain ouvert (pour Q2) on est câblé en I/O et DATA_IN va écouter DATA_OUT, charge à toi de gérer cet echo. Sur beaucoup de composant électronique tel que le driver RS485 tu as aussi cette possibilité de faire un echo mais volontaire cette fois ci. Si je dis que Q2 est en drain ouvert c'est parce qu'il profite de la présence de la pull up interne du clavier.

    Et si on a un conflit ? Tout le monde écrit en même temps ?
    Il est là l'avantage du mode collecteur ouvert car on ne créait pas de court-circuit direct. Si DATA_OUT reste à 1 suite à un bug alors tout le monde verra un 0 logique (pas un courtjus)

    Je ne sais pas si j'ai été clair ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  15. #35
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Ok je comprends, tu as quoi comme transistor chez toi ?
    Quelle valeur de résistance ?
    Quelle référence de diode ?
    As tu des composants logiques ? Des références ? Sait on jamais !
    transistor (tous bipolaires NPN ou PNP) : S9012, S9013, S9014, S9015, S9018, A1015, C1815, A42, A92, 2N5401, 2N5551, A733, BC547, BC557, C945, S8050, S8550, 2N3906, 2N3904, 2N2222A, 2N2907, BC337, BC547B, BD241C, BD242C, BD649, BDX54C.

    résistances : 10, 47, 100, 150, 220, 330, 470, 1k, 1.5k, 2.2k, 4.7k, 10k, 22k, 33k, 47k, 100k, 220k, 470k, 1M.

    diode : 1N4148, 1N914BTR, 1N40001, 1N40002, 1N40003, 1N40004, 1N40005, 1N40006, 1N40007, BY251, BY255

    composants logiques : aucun.


    Citation Envoyé par Vincent PETIT Voir le message
    Je ne comprends pas bien ce que tu veux dire ? Ou plutôt, je n'en suis pas sur donc je te donne la grosse explication.
    Merci pour cette explication détaillée.

    Je pensais qu'il y avait 3 états (0 / 1 / Z); mais ici yen a que 2 (1 == Z).

    Y'avait aussi la syntaxe VHDL qui m'embrouillait.
    Code VHDL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data_inout <= '0'; -- on écrit '0'
    data_inout<= '1'; -- on écrit '1'
     
    data_inout <= 'Z'; -- malgré la syntaxe on n'écrit pas Z, mais ça veut plutôt dire "on écrit rien, quelqu'un d'autre écrit, du coup on peut lire".
    Du coup, j'y vois un peu plus clair. (Faudrait que je lise un bouquin sur le sujet à l'occas quand même.)

    Je partais du principe que c'était 3 états logiques (oui / non / peut être);
    alors que c'est "oui / non / j’attends que quelqu'un d'autre écrive '1' ou '0'".

    Et moi qui pensais naïvement qu'un FPGA me permettrait de m'amuser sans me prendre la tête avec la partie électronique...

  16. #36
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Ok, je vais voir ce que je peux faire avec ta liste de composant, je devrais y arriver aussi.

    Citation Envoyé par Iradrille Voir le message
    Je pensais qu'il y avait 3 états (0 / 1 / Z); mais ici yen a que 2 (1 == Z).
    Je partais du principe que c'était 3 états logiques (oui / non / peut être);
    alors que c'est "oui / non / j’attends que quelqu'un d'autre écrive '1' ou '0'".
    Oui, le vrai trois états c'est bien :
    Etat 0
    Etat 1
    Etat Z, avec Z étant assimilable à "déconnecté" ou "ouvert" ou "en l'air". En revanche et c'est tentant, mais il ne faut surtout pas assimiler Z à une entrée car entrée = lecture possible alors Z c'est pas ça et ça pourrait embrouiller les choses.

    Une sortie collecteur ouvert c'est bien
    Etat 0
    Etat Z + pull up (ce qui fait l'état logique 1)

    ou inversement
    Une sortie collecteur ouvert c'est bien
    Etat Z + pull down (ce qui fait l'état logique 0)
    Etat 1


    Citation Envoyé par Iradrille Voir le message
    Y'avait aussi la syntaxe VHDL qui m'embrouillait.
    Code VHDL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    data_inout <= '0'; -- on écrit '0'
    data_inout<= '1'; -- on écrit '1'
     
    data_inout <= 'Z'; -- malgré la syntaxe on n'écrit pas Z, mais ça veut plutôt dire "on écrit rien, quelqu'un d'autre écrit, du coup on peut lire".
    Euh.... bah oui c'est vrai ça ! Ton FPGA peut très bien faire des périphériques TRI STATE voir même collecteur ouvert ? Mon VHDL est très rouillé mais tout ça, ça se décrit facilement ? Au quel cas, il y a carrément un transistor + sa résistance qui dégagent de mon schéma ! Voir même encore plus de simplification à voir suivant ta réponse.

    Citation Envoyé par Iradrille Voir le message
    Et moi qui pensais naïvement qu'un FPGA me permettrait de m'amuser sans me prendre la tête avec la partie électronique...
    oui mais c'est pas méchant et puis là on est sur un cas tordu qui nécessite de l'électronique analogique mais dans 80% des autres cas, de simples composants logiques (leurs datasheet se lit comme celui de ton FPGA) suffisent à régler les problèmes d'interfaces.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  17. #37
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Euh.... bah oui c'est vrai ça ! Ton FPGA peut très bien faire des périphériques TRI STATE voir même collecteur ouvert ? Mon VHDL est très rouillé mais tout ça, ça se décrit facilement ? Au quel cas, il y a carrément un transistor + sa résistance qui dégagent de mon schéma ! Voir même encore plus de simplification à voir suivant ta réponse.
    Yep.

    Ca se fait simplement
    Code VHDL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    signal write_enabled: std_logic; -- controle la direction (lecture / ecriture)
    signal data_in: std_logic; -- l'état lu se retrouve la dedans
    signal data_out: std_logic; -- cet état se retrouve copié dans data_inout si write_enabled == '1'
     
    -- ecriture
    if write_enabled = '1' then
       data_inout <= data_out;
    else
       data_inout <= 'Z';
    end if;
     
    -- lecture
    data_in <= data_inout;
     
    -- apres ça, on utilise seulement data_in; data_out; write_enable.

    Dans le cas d'une souris / clavier qui accepte du 3.3V, aucun composant n'est requis : je peux avoir un pin bidirectionnel sur le FPGA.
    Mais c'est le 5V qui casse les couilles. Faut convertir le 5V <-> 3.3V.

    Citation Envoyé par Vincent PETIT Voir le message
    oui mais c'est pas méchant et puis là on est sur un cas tordu qui nécessite de l'électronique analogique mais dans 80% des autres cas, de simples composants logiques (leurs datasheet se lit comme celui de ton FPGA) suffisent à régler les problèmes d'interfaces.
    Je m'intéresse aussi aux sorties VGA et DVI en ce moment.

    Le VGA c'est "pareil", de l'analogique. Mais les DAC R-2R ça à l'air simple; va juste falloir que je trouve la formule pour calculer R. Et j'espère que mon écran acceptera le +3.3V pour les signaux hsync / vsync; sinon même problème que pour le PS/2.

    Le DVI c'est simple vu que c'est du digital, mais du coup j'suis bloqué à des basses résolutions (faut une fréquence monstrueuse à la place :/) et pour l'instant mon écran s'obstine à me dire "No Signal".

    Un poil HS, mais pourquoi tout fonctionne en série ?
    Quelle est la logique derrière ?

    Exemple pour le DVI, c'est pas plus simple d'envoyer 24 bits / cycle @ 193MHz (1080p) que 3 bits / cycle @ 1.93GHz ?

    Plus faible fréquence -> moins sensible aux "stimulis extérieurs" qui peuvent corrompre les données. Moins cher aussi car il faut des composants moins performants.
    Et plus faible fréquence -> pas besoin de l'encodage TMDS non plus.

  18. #38
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Ok, alors on va tout simplifier,
    Combien tu as de BC547 ?
    En aurais tu 4 ? Il en faudrait juste 4.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  19. #39
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Ok, alors on va tout simplifier,
    Combien tu as de BC547 ?
    En aurais tu 4 ? Il en faudrait juste 4.
    J'en ai une 10ene.

    x 10 : S9012, S9013, S9014, S9015, S9018, A1015, C1815, A42, A92, 2N5401, 2N5551, A733, BC547, BC557, C945, S8050, S8550, 2N3906, 2N3904, 2N2222A, 2N2907,
    x5 : BC337, BC547B, BD241C, BD242C, BD649, BDX54C.

    Par contre j'ai des BC547 et BC547B

  20. #40
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    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 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Le schéma existe tout fait sur le net !!! Et dire que j'ai calculé et simulé les montages
    Ça m'apprendra à utiliser plus google....

    http://www.nxp.com/documents/applica...te/AN10441.pdf
    http://www.hagtech.com/pdf/iic.pdf
    http://playground.arduino.cc/Main/I2...alLevelShifter

    Il y a plus de composants que dans ma solution mais j'aime bien la leur (la solution NXP est la meilleure, le premier lien).

    Nom : sch3.png
Affichages : 774
Taille : 33,0 Ko

    Si tu as d'autres valeurs de résistances ça ira aussi je pense.
    Cette solution est tirée d'astuce pour I2C mais les claviers souris ont une couche physique qui y ressemble très fort (I/O et drain ou collecteur ouvert)

    Je n'ai pas eu le temps de simuler ce montage.
    Je le ferai ce week end et il doit me rester aussi pas mal de BC547B (grand classique), j’essaierai de la câbler en vrai pour voir.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Activer / désactiver des périphériques
    Par adage2000 dans le forum MFC
    Réponses: 3
    Dernier message: 28/04/2005, 16h51
  2. [PC Eteint] Problème de périphériques
    Par Machjaghjolu dans le forum Périphériques
    Réponses: 3
    Dernier message: 07/04/2005, 19h07
  3. Erreur de périphérique lors du réglage
    Par Sunchaser dans le forum Windows XP
    Réponses: 2
    Dernier message: 28/03/2005, 21h55
  4. Ejecter un périphérique de stockage de masse
    Par Bissada dans le forum Assembleur
    Réponses: 5
    Dernier message: 30/11/2004, 08h23
  5. detection de périphérique
    Par jaquet_vincent dans le forum Windows
    Réponses: 6
    Dernier message: 26/10/2004, 01h26

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