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

C Discussion :

Pilotage d'un périphérique en C


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Pilotage d'un périphérique en C
    Bonjour,

    Excusez-moi si je n'ouvre pas mon message au bon endroit, je suis tout nouveau sur ce site.

    Je souhaite découvrir les possibilité de transmission entre l'ordinateur et un périphérique USB simple, par exemple, une simple LED.

    Je ne sais pas du tout si cela est possible avec le langage C, mais je ne connais pas l'assembleur. (seulement le C, HTML, PHP, CSS, JS, et un peu de Java).

    Pour l'instant, j'arrive à l'allumer lorsque je la branche entre les fils V et G du cable USB.
    (grâce au tutoriel « comprendre l'USB et bricoler un périphérique » ).

    Mais je voudrais par exemple la faire allumer avec une commande console, et l'éteindre de même (sans utiliser arduino ou autre).

    En espérant avoir été assez clair, merci de vos réponses… n'hésitez pas à me rediriger si je ne suis point au bon endroit.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Bonjour et bienvenue,

    Il est tout-à-fait possible de manipuler l'USB en langage C (c'est même généralement le langage privilégié des API système permettant de le faire) mais gérer l'USB en soi est beaucoup plus compliqué qu'il y paraît : l'USB est en fait extrêmement sophistiqué, plus encore qu'une carte réseau Ethernet. C'est beaucoup plus compliqué qu'un port série RS/232, par exemple…

    Les fils W et G (White et Green) correspondent respectivement à D+ et D-, c'est-à-dire aux fils de transmission de données proprement dits, alors que les fils rouge et noir (Red et Black) correspondent respectivement à l'alimentation +5V et à sa masse, indépendamment de la transmission. C'est sur ces fils qu'il aurait fallu brancher ta LED si tu souhaitais simplement l'allumer. Par contre, il est impossible de la piloter depuis ces lignes, sauf si l'hôte lui-même est capable d'être mis hors tension par son pilote.

    En revanche, tu ne peux pas piloter directement l'état des fils D+ et D-. D'abord parce qu'il s'agit d'une liaison différentielle : les deux lignes D+ et D- véhiculent la même information mais toujours en opposition d'état, ce qui permet principalement de détecter et d'éliminer l'effet des parasites. Ensuite parce que ces lignes ne sont pas du tout faites pour en tirer de la puissance (qui doit être prise de l'alimentation). Il te faudrait au minimum un transistor pour bufferiser le tout.

    Enfin, et surtout, parce qu'elles sont faites pour dialoguer avec un périphérique USB qui, lui, doit respecter un protocole assez étoffé. Par exemple, le bit stuffing, qui oblige à insérer un zéro après six bits à 1, mais également l'identification, l'énumération, et la négociation de puissance supplémentaire au delà des 100 mA règlementaires, puissance qui peut éventuellement lui être refusée. Bref : un périphérique USB aussi simple qu'il soit (même un clavier) est en réalité un vrai petit ordinateur, parfois plus puissant que les ordinateurs personnels vendus à prix d'or il y a encore une vingtaine d'années.

    Si tu veux allumer une LED et la piloter, en C et éventuellement en assembleur à l'aide de quelques appels simples, je te conseille d'utiliser à la place le port parallèle imprimante à 25 broches de ta machine si tu en disposes encore. C'est le plus indiqué pour faire ce genre de manip' et c'était effectivement une bidouille très fréquente dans les années 1980 et 1990.

    Si tu tiens à utiliser l'USB et à faire de la programmation système dans les règles de l'art, alors procures-toi plutôt pour quelques euros un câble adaptateur USB vers quelque chose de plus simple, comme un port parallèle. À noter que ce câble ne sera en fait pas un simple adaptateur broche à broche, mais un vrai périphérique USB déclaré comme tel. Mais la puce contrôleur associée est tellement petite qu'elle se loge directement à l'intérieur de la fiche DB 25.

    Une fois que tu auras choisi le périphérique que tu souhaites utiliser, il faudra faire un peu de programmation système (ou éventuellement piloter directement le périphérique si c'est ce que tu choisis de faire et si c'est accessible). Dans ce cas, cela dépendra également du système d'exploitation que tu utilises.

    Bon courage.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci pour cette réponse on ne peut plus claire et précise.
    J'ai effectivement connecté ma Led entre le fil rouge et le fil noir, mais comme vous l'avez dit, impossible de la piloter.
    j'ai regardé un peu dans toutes la maison, mais je n'ai trouvé aucun ordinateur avec une connexion "parallèle imprimante 25 broches." Je n'ai trouvé que des entrées VGA; Ethernet; HDMI; eSATA/usb; micro; haut parleur.
    Je voulais juste me familiariser avec les sorties d'un ordinateur (avant de me lancer dans la découverte d'arduino) mais sinon, j'utiliserais une petite carte bleu..
    Merci encore pour votre réponse.
    (Si cela était possible de piloter la led avec les sorties que je vient de préciser, pourriez vous me le dire? merci)

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par Le MIL Voir le message
    j'ai regardé un peu dans toutes la maison, mais je n'ai trouvé aucun ordinateur avec une connexion "parallèle imprimante 25 broches." Je n'ai trouvé que des entrées VGA; Ethernet; HDMI; eSATA/usb; micro; haut parleur.
    Vérifie quand même si tu n'en a pas un qui traîne avec un port série RS/232 (DB25 ou DB9, femelle). Ceux-ci comportent encore des broches servant aux signaux de contrôle et qui peuvent être pilotées individuellement (par exemple, CTS).

    Je voulais juste me familiariser avec les sorties d'un ordinateur (avant de me lancer dans la découverte d'arduino) mais sinon, j'utiliserais une petite carte bleu..
    Merci encore pour votre réponse.
    Il existe des interfaces USB ↔ GPIO, mais elle sont relativement onéreuses (≈ 25 €) parce que peu vendues, alors qu'en cherchant sur le Net, on arrive à trouver un câble USB ↔ Port parallèle à partir de 5 à 6 euros. Il te sera plus utile d'une manière générale, et le port parallèle est vraiment trivial à programmer. Il est probable, en revanche, que les registres du câble ne soient pas directement mappés sur les historiques ports 378h ou 3BCh.

    (Si cela était possible de piloter la led avec les sorties que je vient de préciser, pourriez vous me le dire? merci)
    Malheureusement, aucun de ces ports se ne prête encore à ce genre de manipulation. Toutes les interfaces numériques citées ici sont déjà des lignes séries à haute fréquence et au fonctionnement similaire à l'USB.

    Si on se restreint à la liste que tu nous as présentée, c'est encore la sortie son la moins difficile à exploiter, mais dans tous les cas, il faudra quand même tirer de la puissance quelque part (a priori depuis l'alimentation USB, c'est ce qui reste le plus simple). De toutes façons, la sortie son sera incapable de te fournir une quelconque composante continue, donc il faudra filtrer et redresser les signaux que tu souhaites en extraire. Comme il te faudra acheter au détail une prise jack par ci, une diode de redressement par là, etc. le plus simple reste encore de consacrer 10 euros dans un câble USB ↔ parallèle d'entrée de gamme, et de récupérer une LED et une résistance où tu le peux.

Discussions similaires

  1. Pilotage de périphérique depuis un navigateur
    Par vhoward99 dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 14/02/2011, 12h44
  2. Réponses: 27
    Dernier message: 25/08/2004, 22h30
  3. Pilotage de StarOffice avec builder5
    Par Superstivix dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/01/2004, 09h24
  4. Réponses: 5
    Dernier message: 14/01/2004, 20h31
  5. [AUTOMATION WORD]Pilotage Word par Delphi
    Par Sunny dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 05/12/2002, 17h09

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