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 :

[Langage C] Détection périphérique sur port COM


Sujet :

Embarqué

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut [Langage C] Détection périphérique sur port COM
    Bonsoir,


    J'ai un projet ou je doit communiquer avec un MCP2200 de chez microchip. La communication est OK, mais dans un soucis de simplicité je cherche qu'au lancement de mon programme, celui-ci détecte automatiquement sur quelle port COM mon MCP2200 est connecté.

    Je travail sous windows et utilise la lib windows.h pour la communication.

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 233
    Points : 28 261
    Points
    28 261
    Par défaut
    J'ai appliqué une solution, il y a bien longtemps, interroger un à un les ports COM disponibles en envoyant une donnée bien précise, donnée qui sera reconnue par ton MCP2200 (demande d'identification par exemple) qui te répondra en conséquence.

    En gros, tu interroge chaque port, si tu n'obtiens pas de réponse, ou si tu obtiens une réponse qui n'est pas celle que tu attends, c'est que ton appareil n'est pas connecté à ce port. Si tu obtiens la seule et unique bonne réponse que tu attends, il y a de forte chance que ce soit ton appareil qui soit à l'autre bout.

    Mais il se peut qu'en C, ou qu'avec les évolutions des systèmes, il existe d'autres solutions.

  3. #3
    Membre chevronné

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Points : 1 950
    Points
    1 950
    Par défaut
    J'aurais tendance à répondre exactement la même chose que sevyc64.

    Pour moi il faut interroger chaque port et attendre un petit timeout.
    Seul hic, il me semble que sous windows il peut y avoir un sacré paquet de port COMXX, ce qui peut rendre la manip assez "crade". Du coup la détection peut devenir assez longue.

    Spontanément, je ferais comme ça sous Linux en tout cas, je n'ai aucune expérience de dev sous Windows. Mais je sais que des anciens collègues ont déjà eu cette problématique pour parler avec un device en serial, et avaient résolu le truc en sollicitant chaque port.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    C'est bien comme ça que j'ai commencé a faire, le problème est bien la détection du type de matériel. Ici je check chaque port COM et dé que l'un deux est correctement connecté, le programme débute.

    Ici ça fonctionne car je n'ai que le MCP2200 qui est connecté en COM mais si jamais un autre phériphérique branché sur un vrai port COM et qu'il est sur le port COM2 et mon MCP2200 sur le COM4 mon programme communique avec le périphérique du COM2 ce qui n'est pas génial ^^.


    Donc quand je me connecte au port série je doit aller chercher des informations sur mon périphérique et vérifier qu'il s'agit bien du MCP ?
    Mais comment je fait cela ? Lecteur des registre du MCP ?

    Le souci c'est que le projet doit etre fini pour ce mardi . Apres ca ne pose pas de probleme majeur si je sais pas vérifier que c'est bien le MCP qui est connecté vu que je n'aurai que lui sur un port COM. Mais dans le cardre d'un projet c'est toujours mieux de faire quelques petits trucs en plus ça rapporte des points en plus

  5. #5
    Membre chevronné

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Points : 1 950
    Points
    1 950
    Par défaut
    Citation Envoyé par ncurses Voir le message
    Donc quand je me connecte au port série je doit aller chercher des informations sur mon périphérique et vérifier qu'il s'agit bien du MCP ?
    Mais comment je fait cela ? Lecteur des registre du MCP ?
    Ça dépend de ton périphérique. Il faut trouver un moyen de détecter ton MCP2200 par le protocole de communication qu'il y a entre les deux. Pas d'autre solution, ou à l'inverse déterminer sur quel port est ton device connecté en COM2 et en conclure que ton MCP2200 est sur le suivant.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    La communication que j'utilise ici est celle fournie par windows.h elle permet de ce connecter a un port COM comme un descripteur de fichier, c'est limite si j'uilise par write et read pour communiquer avec le MCP. Mais d'apres la doc de microsoft cette lib ne permet que : connection, write, read , disconnection. (et du control de flux).

    Par contre quand je vais dans "gestion des périphériques" sur le COM4 dans les propriétés on peut lire : "fabricant : Microchip", Model : "MCP2200...". SI windows arrive a détecter que c'est bien un MCP, il n'y a pas moyen d'aller chercher les informations de windows directement et de tester la chaine "MCP2200" ?

Discussions similaires

  1. [WD17] Détection connexion sur port COM
    Par karim15 dans le forum WinDev
    Réponses: 1
    Dernier message: 16/10/2014, 15h44
  2. Bluetooth sur port COM, détection LabVIEW ?
    Par K-RK-S dans le forum LabVIEW
    Réponses: 19
    Dernier message: 22/07/2009, 11h53
  3. Capteur InfraRouge sur port com
    Par PoOky dans le forum Composants VCL
    Réponses: 12
    Dernier message: 12/01/2006, 16h31
  4. Write puis read sur port com
    Par chourmo dans le forum API, COM et SDKs
    Réponses: 34
    Dernier message: 21/06/2005, 18h36
  5. Problème de reception sur Port COM
    Par Revan777 dans le forum C
    Réponses: 9
    Dernier message: 19/04/2005, 22h55

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