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 :

Comment envoyer des trames à un microcontroleur depuis une TMemo via un port série


Sujet :

C++Builder

  1. #1
    Membre du Club Avatar de vantoff
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 85
    Points : 67
    Points
    67
    Par défaut Comment envoyer des trames à un microcontroleur depuis une TMemo via un port série
    Bonjour,

    j'aimerai savoir comment envoyer des trames depuis une TMemo vers un microcontroleur via une liaison série RS232-C

    Merci.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Pour la transmission, c'est à toi de voir avec les spécifications du Comport :
    - transmission et décodage du Memo byte à byte ?
    - transmission par buffer donc décodage de n bytes du Memo ?
    - Le Comport assure t-il toute la synchronisation ? En particulier lorsque le
    buffer a été transmis (donc vidé) ?

    ** ** ** ** ** **

    La méthode AnsiString::ToInt() permet de convertir une valeur sous forme de texte en binaire.
    Elle est polymorphe de sorte que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AnsiString N = "0xFF"; // ou bien N = "255";
    Byte r = (Byte)N.ToInt(); 
    //donne le résultat attendu pour les deux notations
    On peut donc mélanger ces notations sur une même ligne.
    Pour isoler chaque expression dans une ligne on peut faire ainsi, en supposant qu'on travaille à l'aide d'un buffer:

    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
    31
    32
    33
    AnsiString N;
    AnsiString B;
    int po;
     
    int addr = 0;
    for(int j = 0; j <Memo1->Lines->Count; j++)
        {
        N = Memo1->Lines->Strings[j];
        while(N != "")
            {
            po = N.Pos(" ");
            if((po != 0))
                {
                B = N.SubString(1, po - 1);
                N = N.SubString(po + 1, N.Length());
                }
            else
                {
                B = N;
                N = "";
                }
            Buffer[addr] = (Byte)B.ToInt();
    	addr++;
    	//Vérifier si le buffer est plein
            //Transmission du buffer
            //Attendre ?
            //...Application->ProcessMessages(); //si on fait une boucle
            addr = 0;
            //c'est reparti pour un buffer... 
            }
        }
    // Verifier si le buffer est vide, si non on transmet ce qui reste
    // Ouf !
    C'est un simple exemple à optimiser et à compléter! Attention à l'usage avec ToInt() qui ne supporte aucune erreur.
    Il faudrait apporter des modifications dans ce sens.
    Pour l'exemple, chaque expression doit y être séparée par un seul espace. (voir AnsiString::Trim() pour l'amélioration etc...)

    Comme il est tard... j'espère qu'il n'y a pas d'erreurs de ma part !

    Bonne continuation et à plus !

    NB : Je n'y connais rien mais... n'y a t'il pas une possibilité pour que le µc soit équipé en interne d'un boot sachant lire un format du type S19 (quelque chose dans ce genre là ???)

  3. #3
    Membre du Club Avatar de vantoff
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 85
    Points : 67
    Points
    67
    Par défaut
    Voici la forme de la trame que je dois envyer au micro:

    STX,"Message balise",CR,ETX soit; 02,"Message balise",CR,03 (voire code ASCII).
    c'est tous ce dont je sais. Comment faire sachant que le buffer reçois de l'hexa et l'envoi au micro en binaire, si je ne me trope?

  4. #4
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,

    Tu écris des octets donc tout dépends du message que tu souhaites envoyer.
    Les méthodes du TComPort te permettent d'écrire ces octets. Ils sont envoyé bit par bit suivant le protocol que tu lui a donné en configuration (expl: 8bits +1bit de start +1bit de stop sans parité)

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/08/2013, 15h28
  2. Réponses: 3
    Dernier message: 19/07/2013, 04h28
  3. Réponses: 5
    Dernier message: 09/10/2008, 19h14
  4. Réponses: 16
    Dernier message: 20/03/2006, 23h21

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