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++Builder Discussion :

[TComport] communiquer avec un PIC


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [TComport] communiquer avec un PIC
    bonjour,
    j'utilise le composant pour communiquer avec un pic sur le port serie, j'ai fais un premier test avec l'emission d'un seul octet puis attente de 5s, mon prog en c++ builder fonctionne nikel, mais aprs j'ai testé l'emission de 3 octets concecutif, et la, ca ne marche pas comme je voudrais.
    L'emission ce fait a 19200 bauds depuis mon pic donc une attente d'environ 52 micro seconde entre chaque bit.
    je ne comprends pas j'envoie 01100001 01100010 01100011 puis j'attends 5s et je recommance l'envoie...
    mon programme m'affiche (en decimal) : 97 98 99 97 -30 -29 -31 98 99...
    Je ne comprends pas ou est le probleme dans le programme ???
    j'ai bien reglé baudrate a 19200, parity a none et un seul bit bit de stop, par contre je ne sais pa quoi mettre dans TimeOuts...

    voila je vous remercie d'avance... A+

  2. #2
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Pourrais-tu nous donner des précisions sur la façon dont tu gères la réception ?

    Cordialement,

    Arnaud

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    oui voici le code que je me sert pour faire la reception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
    {
       // unsigned char *Buf = new unsigned char [Count];
        char Buf[512];
        if (Count == 0) return;
        memset(Buf, 0, 512);
        ComPort1->Read(Buf, Count);
        ListBox1->Items->Add((int)Buf[0]);
    }
    j'ai aussi essayé en utilisant un unsigned char * a la place de char, mais cela ne change rien (je m'en douté un pe...)

    voila

    Balises [Code] rajoutées par Greybird
    Pensez-y à l'avenir

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 208
    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 208
    Points : 11 686
    Points
    11 686
    Par défaut
    Essaye plutot ça dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count) 
    { 
     unsigned char *recept = new unsigned char [Count];
     ComPort1->Read (recept, Count);
     
       for(int i = 0; i < Count; i++)
        Memo1->Text = Memo1->Text + IntToHex(StrToInt(recept[i]), 2) + ' ';
     
     Memo1->Text = Memo1->Text + "\r\n";
     
     delete [] recept;
     recept = NULL;
    }
    L'affichage se fera en hexa ensuite si ça ne fonctionne pas et je pense que ça ne fonctionnera pas, règle la vitesse de transmission de ton PIC à 9600 bits par seconde. Personnellement je n'arrive à communiquer, avec un PIC16F628, qu'a cette vitesse et je ne sais pas encore pourquoi ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    ba je viends de tester en passant la vitesse a 9600 bits /s, j'ai un truk un pe mieux mais je ne comprends pas du tous les valeurs que je recois ... en gros je devré recevoir 61, 62 et 63 61 .... (en hexa) et la je recois A1 B2 EC A1 B2 ....au moins les valeurs sont cyclique mais pas reelement ce que je ve avoir ....

    he sinon j'utilise un PIC 16F84A avec un quartz de 4MHz et un max 232 pour l'interfacage avec le pc.

    A+

  6. #6
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 208
    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 208
    Points : 11 686
    Points
    11 686
    Par défaut
    Je vais demander à ce qu'on déplace cette discution qui s'éloigne de C++ Builder.

    Afin de mettre au point le dialogue µC <-> PC, il faut partir sur des bonnes bases.

    Pour répondre à ta première question "Problème avec WaitForEvent" dans un message privé, je t'ai envoyé un e-mail avec le projet C++ Builder 5 à l'intérieur. Je fais un copié collé ici :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        ComPort1->Events = TComEvents(); // Effacer tous les évenements
        ComPort1->Connected = true;
     
        TComEvents Ev;
        Ev << evRxChar;
        ComPort1->WaitForEvent (Ev, 0, 5000);
        // Attend un événement OnRxChar ou 5 secondes avant de continuer le traitement
        // Si un évenement OnRxChar arrive, on viendra lire le nombre d'octet reçut
        // Si les 5 secondes sont écoulées on écrira une phrase sur le Caption de la TForm
     
     
            // Y a t il eu des octets d'arrivés ?
            if (Ev.Contains(evRxChar))
             {
              // Oui
              Form1->Caption = IntToStr(ComPort1->InputCount ()) + " octets";
              // Poursuite du traitement en conséquence
             }
            else 
             {
              // Non
              Form1->Caption = "Les 5 secondes se sont écoulées";
              // Poursuite du traitement en conséquence
             }
        ComPort1->Connected = false;
    }
    //---------------------------------------------------------------------------
    Chez moi ça fonctionne très bien sans aucune erreur, j'ai testé avec 2 PC reliés entres eux par le port série COM1.
    Je pense que le problème vient du microcontrôleur PIC16F84A et je te conseil d'utiliser un PIC16F628 pour plusieurs raisons:

    - Il est adapté dans ton cas, il possède un périphérique de communication série.
    - Il coûte moins cher 4.50€ contre 9.10€, Electronique diffusion (Avenue Lobbedez Arras)
    - Il est plus performant, 3 Timers, Entrées comparateurs, Capture/Compare/PWM module, Voltage reference module.
    - Il est compatible broche à broche avec le PIC16F84(A)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TComport] communiquer avec un s7 200
    Par kirty dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/11/2005, 19h50
  2. Réponses: 7
    Dernier message: 27/09/2005, 10h38
  3. TComPort, problème avec RxOnChar
    Par davinout dans le forum Composants VCL
    Réponses: 5
    Dernier message: 03/06/2005, 08h25
  4. [Lisp] Communiquer avec une fonction en c++
    Par Nadine dans le forum Lisp
    Réponses: 5
    Dernier message: 10/01/2005, 20h15
  5. Communication RS232 avec un PIC via delphi
    Par JeanPh dans le forum API, COM et SDKs
    Réponses: 22
    Dernier message: 09/08/2004, 22h56

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