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

Delphi Discussion :

Interface PC USB I2c FT232RL PCF8574


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut Interface PC USB I2c FT232RL PCF8574
    Bonjour,
    Malgré une doc trouvée sur le web au sujet d'écrire un programme de préférence sous Delphi, je n'arrive pas à discerner l'essentiel , c'est à dire la manière de communiquer du PC vers les broches d'entées / sorties du PCF8574.
    J'ai à ma disposition les livres de B.Kainka "j'exploite les interfaces de mon PC sous dos et windows qui se limitent au sortie série et parallèle (LPT1). En aucune façon, je ne trouve pas de tutoriel sur la manière d'opérer par le port USB;
    Il s'agit de lire des états logiques "entrant" et d'écrire pour faire sortir des états logique 1 ou 0 : commande de relais, de led par exemple.
    J'ai joint une notice mise en français en traduction automatique anglais/ français, mais il y a beaucoup de "distorsion".
    Je voudrais connaître l'essentiel pour pouvoir écrire une application à partir d'une connexion USB?
    Faut-il commencer par faire une première démarche à partir d'une RS232? Dans ce contexte, le livre de B.Kainka n'est pas trop explicite : la manière d'identifier le bon boitier PCF8574 dont les 3 pin d'adressage sont à la masse. Puis le façon de libellé entrées / sortie en lecture ou en écriture.
    Merci d'avance pour votre aide.
    J.Dudoret

  2. #2
    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 J.Dudoret

    Tu n'as pas joint la spec. Il nous faudrait au moins un lien vers celle en anglais.

    Le FT232R n'a pas de communication native I2c. Donc ton montage c'est un convertisseur USB->xxx puis un xxx->I2c et enfin le PCF8574 (xxx étant l'un des protocoles supporté par le FT232R, mais savoir le quel exactement n'a pas vraiment d'importance).

    La communication sur le bus USB doit se faire au moyen d'un driver. Développer ce driver est difficile et nécessite une connaissance en détail de la puce USB. Mais heureusement pour toi, FTDi le fabricant l'a fait. Et offre une solution plus simple en proposant un fonctionnement en mode série (port com virtuel).

    Après j'ai trouvé une doc de convertisseur USB->I2c http://www.robot-electronics.co.uk/htm/usb_i2c_tech.htm. Dans ce cas, il faut écrire une série de bytes sur le port com virtuel pour communiquer avec la puce I2c.

    Pour le PCF8574 il faut écrire un byte sur son adresse pour définir les sorties: celles à 0 seront forcées (c'est des sorties en collecteur/drain ouvert) celles à 1 seront soit des entrées soit une sortie à 1 au moyen d'un pull-up. Il faut lire un byte à son adresse pour avoir l'état des 8 pins.
    Avec les trois pins d'adressage à 0 l'adresse d'écriture est $40 (64 en décimal) et celle de lecture $41 (65 en décimal).

    Donc pour le programme Delphi et dans le cas du module que j'ai mis en lien (le tiens peut être différent), il faut un/des composants Delphi de communication série comme le TComPort.
    Après pour mettre toutes les sorties à 0 il faut écrire la chaine CHR($53) & CHR($40) & CHR($00) (ps je ne suis plus sûr du code $ pour définir un chiffre en hexa dans Delphi. Un peu rouillé sur ce point) et pour lire l'état il faut écrire la chaine CHR($53) & CHR($40) puis attendre le retour d'un char/byte sur le composant de lecture du port com (asynchrone ou synchrone comme tu veux) qui donnera l'état des 8 pins.

    L'explication:
    Écrire le char $53 donne l'ordre au convertisseur xxx->i2C d'écrire ou lire un Byte
    Écrire le char $40 renseigne l'adresse du PCF8574 (le dernier bite c'est le sens lecture/écriture), c'est le premier Byte qui sera transmit sur l'I2C
    Écrire le char $00 fixe toutes les sorties à 0, c'est le deuxième (et dernier) Byte qui sera transmit sur l'I2C

    Bonne nuit

    Delias

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut Suite FT232RL PCF8574
    Bonjour,
    Merci beaucoup pour cette première réponse :
    Je n'ai pas réussi à comprendre le "mécanisme" pour joindre le document concerné. Il s'agit bien de celui désigné par votre lien. J'ai trouvé un soft qui peut traduire un document *.pdf. , le même dossier que vous avez cité. A la fin du document, il y a le code source delphi un peu "lourd" à comprendre les différentes étapes que j'ai besoin.
    En ce qui me concerne, je n'utiliserai qu'un seul boitier.
    Je me contenterai de lire (read) la broche P0 pour recevoir des impulsions issues d'un disque optique, les compter, et en relâchant une tous les 6 impulsions . Cette procédure ne devrait pas poser de problème. Suivrait sur P1 une sortie d'autres impulsions et ainsi de suite (write).
    Pour les autres disponibles, il y aurait respectivement des entrées ou sorties.
    Je souhaiterai avoir un exemple mini pour discerner les fonctions nécessaires pour identifier un boitier, écrire un bit, lire un bit.
    Je pense que ce serait profitable aussi pour d'autres visiteurs. Si besoin , me contacter en direct si modalités exigent.
    Jacques DUDORET jacquesdudoret@sfr.fr

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut Suite : unité CPort..
    Citation Envoyé par jdudoret Voir le message
    Bonjour,
    Merci beaucoup pour cette première réponse :
    Je n'ai pas réussi à comprendre le "mécanisme" pour joindre le document concerné. Il s'agit bien de celui désigné par votre lien. J'ai trouvé un soft qui peut traduire un document *.pdf. , le même dossier que vous avez cité. A la fin du document, il y a le code source delphi un peu "lourd" à comprendre les différentes étapes que j'ai besoin.
    En ce qui me concerne, je n'utiliserai qu'un seul boitier.
    Je me contenterai de lire (read) la broche P0 pour recevoir des impulsions issues d'un disque optique, les compter, et en relâchant une tous les 6 impulsions . Cette procédure ne devrait pas poser de problème. Suivrait sur P1 une sortie d'autres impulsions et ainsi de suite (write).
    Pour les autres disponibles, il y aurait respectivement des entrées ou sorties.
    Je souhaiterai avoir un exemple mini pour discerner les fonctions nécessaires pour identifier un boitier, écrire un bit, lire un bit.
    Je pense que ce serait profitable aussi pour d'autres visiteurs. Si besoin , me contacter en direct si modalités exigent.
    Jacques DUDORET jacquesdudoret@sfr.fr
    J'ai pu installer le composant Cport dans mon compilateur Dehphi5.
    J'attends de vos nouvelle pour continuer,
    Merci d'avance
    Jacques DUDORET

  5. #5
    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 Jacques

    En Intro, avec le PCF tu travailles avec les 8 pin en parallèle. Soit en écriture pour définir leur état, soit en lecture pour avoir leur état, la représentation étant un char ou un byte comprenant l'ensemble des 8 bits. le bit de plus fort étant le P7 et le bit le plus faible étant le P0.

    En premier:
    Installer le driver du FT232R Est-ce que quand tu branches le module USB au PC, une interface Port COM virtuel apparaît dans le gestionnaire des tâches? Si oui c'est en ordre et il faut prendre son numéro. Si non il faut aller chercher le driver sur le site de FTDi.

    En second dans ton projet. Il faut mettre à minima le composant non graphique ComPort de l'onglet CPortLib.
    Ensuite toujours en mode design, il faut paramétrer le port, mettre le bon numéro et vérifier que on est bien en 8 bits de data. Le reste n'a que peu d'importance.

    Dans le code il faut ouvrir le port avant de l'utiliser, soit au lancement de l'appli soit avec un bouton: ComPort.Open;

    Quand tu veux écrire sur le PCF8574 il faut envoyer une chaine de 3 char sur le port com (ici je mets la sortie 0 du PCF à 0, les autres à 1 restent en entrées ou en sortie à 1 avec un pull-up externe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    VarByte := $FE;  //$FE -> 0b 1111 1110
    Str := #$53#$40 & Chr(VarByte);
    ComPort.SendStr(Str);
    Pour la lecture il faut de la même manière envoyer les commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Str := #$53#$41;
    ComPort.SendStr(Str);
    Puis le port vas normalement recevoir un byte et déclencher l'événement OnRxChar auquel on aura joint une routine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
    var
      Data: Byte;
    begin
      ComPort1.Read(Data,1);
      if Data & 1 then {pin P0 à 1} else {pin P0 à 0};
      if Data & 2 then {pin P1 à 1} else {pin P1 à 0};
      if Data & 4 then {pin P2 à 1} else {pin P2 à 0};
      if Data & 8 then {pin P3 à 1} else {pin P3 à 0};
      if Data & 16 then {pin P4 à 1} else {pin P4 à 0};
      if Data & 32 then {pin P5 à 1} else {pin P5 à 0};
      if Data & 64 then {pin P6 à 1} else {pin P6 à 0};
      if Data & 128 then {pin P7 à 1} else {pin P7 à 0};
     
    end;
    Ne pas oublier avant de quitter le soft de fermer le port Com: ComPort.Close;

    Fait à moitié de tête donc ne pas hésité à chercher un peu si ce que j'ai mis ne fonctionne pas du premier coup

    Delias

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut Suite FT232RL
    Bonjour,
    Le driver du FT232RL est déjà installé sur le PC. J'ai déjà une application fonctionnant avec ce type de CI, un lampemètre (analyseur de tubes électronique) piloté par PC sous Windows XP. Le module seul sans extension étant branché par le cordon USB (possédant 2 leds cms), s'allument, clignotent et s'éteignent sans message à l'écran.
    J'ai disposé ce module sur une plaque d'essai. Ainsi que le PCF8574 relié par deux lignes entrée / sortie au FT323RL ; je vais ajouter un driver de puissance et au moins une led (sortie) et un bouton poussoir pour une entrée, afin de pouvoir tester ce montage à mesure des additions.

    En passant, faut-il réaliser cette application sous DELPHI 5, 6 OU 7 ?
    Est-ce que ces compilateurs fonctionneraient sous Windows 7 ?
    Le PC sous XP est du type 64 bits 4 Go de ram dont 1 Go est réservé à la mémoire écran.

    Cordialement,
    Jacques DUDORET

  7. #7
    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 Jacques

    Tu pourrais éviter de répondre au milieu de la citation, et encore mieux vu que tu réponds au dernier message tu peux même évité de cité ma réponse de manière complète.
    Après une micro recherche sur le forum et tu auras tes réponses. -> pour ces deux choses tu as le droit à un

    La version de Delphi parmi les trois que tu propose c'est kif-kif bourricot pour l'utilisation du ComPort (après cela dépend du reste)
    Ces trois versions fonctionnent sans autre de Win95 à WinXP (quoique Win95 sans SP je ne suis pas sur à 100%) et même jusqu'au Win10 actuel avec quelques précautions (rechercher Delphi7 Win7 pour les réponses les plus pertinentes.)
    De même ton programme une fois compilé devrait fonctionner sous n'importe quel Windows de 95 à 10 (tant que tu n'as pas quelque chose d'autre dedans qui limite) en 32bits ou 64bits. Juste pour le driver du FT232 les premiers Win95 doivent être incompatibles. (Et j'ai pas cherché la version minimum de win pour ce driver. Tu dois être capable de le faire!)

    Delias

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut Suite:
    Bonjour,
    Merci pour tes réponses..
    Je suis un peu perdu pour naviguer dans cette discussion ne trouvant pas sur quel emplacement je pouvais entamer une nouvelle réponse : cette fois ci, j'ai trouvé cette possibilité à l'entête de la rubrique. Dans ce contexte, comment insère-t-on soit une image, soit un fichier pdf par exemple.

    Concernant cet interface, je reviens sur l'article que j'ai trouvé sur le web usb_i2c_srf08.exe et le code source associé en "C".
    Mon module seul équipé d'un FT232RL non raccordé à un PCF8574 est reconnu par l'exécutable désigné ci-dessus. Il reconnaît l'emplacement de la com utilisé (com3) que j'avais pu voir par le panneau de configuration rubrique système. Je me pose la question pour savoir s'il faut plutôt évoluer en C au lieu de Delphi.
    Qu'en penses-tu? Aujourd'hui, je dois m'absenter, je continuerai demain sur cet interface.
    Merci encore
    J.Dudoret

  9. #9
    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 Jacques

    A ton niveau tout ce qui se fait en C est faisable en Delphi. Donc je continue en Delphi. Sauf à aller dans le très bas niveau (en gros à écrire les drivers), Delphi n'a aucune limitation par rapport au C. D'ailleurs c'est vraiment du C pur, ou du C++ ou du C#?

    Soit tu comprends la signification des chaines de char à envoyer sur le com, soit tu oublies, car tu aura besoin de la même compréhension que tu programme en C ou en Delphi

    Delias

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut Identification port USB
    Lorsque j'ouvre le panneau de configuration, rubrique système, puis gestionnaire de périphérique \ Matériel \ Contrôleur de bus USB \ j'ai en dernière ligne "Usb Serial Converter " lorsque le module est connecté, disparait lorsque le module est débranché (Com3). De plus, il est bien actif lors d'un essai avec l'application liée au lien que tu m'as mis.

    Je vais donc compléter le montage sur une plaque d'essais avec un minimum extérieur entrées / sorties sur le PCF8574 et reformuler étape par étape l'application sous Delphi.
    Je viens de vérifier comment joindre un fichier externe ou insérer une image : c'est bien similaire à mon courriel Outlouk.
    Je te tiens au courant dès une évolution concrète.
    Bonne soirée,
    Cordialement,
    J.D

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut Suite..
    Bonjour,
    En fouillant sur le web sur le site de b.kainka, j'ai fini par trouver un exemple utilisant le FT232RL avec adjonction de I2c.
    Dans le fichier zip joint, il y a un fichier DXXUnit.pas similaire en "racine" à la DLL nommée ftd2xx.dll reconnue par le branchement du module arduino équipé d'un FT232RL.
    En exécutant le .exe contenu dans le fichier .zip, sans connexion sur le module, j'ai une msg " pilote non trouvé" ; le module étant connecté, pas d'alerte.
    J'ai disposé ce module sur une plaque d'essai avec un PCF8574A avec un minimum de charge, uniquement une led sur PO telle décrite dans l'extrait du data-sheet joint. Je vais déjà étudier chaque étape pour essayer de communiquer entre le PC et l'extérieur.
    A suivre..
    Jacques (31)
    Images attachées Images attachées
    Fichiers attachés Fichiers attachés

  12. #12
    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 Jacques

    T'as fouillé le web, mais as-tu essayé ce que je t'ai expliqué
    Je suis parti du principe que tu avais les bases de la communication sur port COM car dans ce cas la puce se fait passer pour un port COM.
    As-tu compris les bases du protocole I2C, par exemple pourquoi à partir de l'adresse de la puce qui est 010 0000 (soit $20) on utilise les adresses $40 et $41 respectivement pour l'écriture et la lecture sur la puce?

    Après j’arrête les frais j'ai l'impression de répondre dans le vide.

    Delias

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/09/2016, 14h06
  2. Connexion USB à i2C
    Par valkiry dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 25/04/2012, 09h53
  3. interface par usb
    Par fredppp dans le forum Mobiles
    Réponses: 0
    Dernier message: 22/09/2008, 09h12
  4. python et interface serie, usb
    Par altair8080 dans le forum Bibliothèques tierces
    Réponses: 1
    Dernier message: 23/11/2006, 22h34
  5. Appeler un driver USB via une interface.
    Par HR100 dans le forum Langage
    Réponses: 1
    Dernier message: 19/12/2005, 22h38

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