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 :

envoie de trame hexa port serie.


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut envoie de trame hexa port serie.
    Salut

    J'essaye d'envoyer grâce à un porgrame des trames en hexa sur le port RS232. Je voudrais envoyer la trame 0xC1 mais le problème c'est que le programme la convertie en ASCII, donc en "30 78 43 31" hexa.

    Je voulais savoir comment faire pour qu'il envoie ma trame en hexa sur le port RS232 et non en ASCII?

    Merci de votre aide.

    Voilà mon programme :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
     
     
     
    int main(void)
    { 
    	int port_serie;
    	struct termios options;
    	int reception;
    	char buffer[10] = "";
     
     
    	port_serie = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
     
    	if(port_serie < 0)
    	{
    		perror("Port serie ouvert");
    		exit(-1);
    	}
     
    	else
    	{
    		printf("Port serie bien ouvert. \n");
    		printf("Port serie %d. \n", port_serie);
     
     
    		tcgetattr(port_serie, &options);
    		cfsetospeed(&options, B9600);
    		options.c_cflag |= (CLOCAL | CREAD);
    		options.c_cflag &= ~PARENB; 
    		options.c_cflag &= ~CSTOPB; 
    		options.c_cflag &= ~CSIZE; 
    		options.c_cflag |= CS8;
    		tcsetattr(port_serie, TCSANOW, &options);
    		printf("Configuration OK !. \n");
     
    		// Envoie de donnees.
    		printf("Envoie des donnees en cours ... \n");
    		if (write(port_serie, 0xC1, 1) < 0){perror("write:");}
    		printf("Envoie Termine. \n");
    		printf("Attente. \n");
    		//sleep(1);
    		printf("Fin Attente. \n");
    		// Lecture des donnees.
    		printf("Lecture des donnees en cours ... \n");
    		fcntl(port_serie,F_SETFL,10);
     
    		reception=read(port_serie,buffer,100);
    		printf("J'ai lu %d charactères: %s\n",reception,buffer);
     
    		if (reception == -1)
    			printf("Erreur lecture port serie\n");
     
    		printf("Reception fini.\n" );
     
    	}
     
    	close(port_serie);
    }

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Le programme que tu donnes ne correspond pas au problème que tu décris. Le programme envoie l'octet qui se trouve à l'adresse 0xC1. Il n'envoie pas la chaine ASCII "0xC1".

    Pour envoyer un octet 0xC1, il faut faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char data = 0xC1;
    write(port_serie, &data, 1);

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Salut,
    Merci, je viens donc de modifier mon code mais je ne reçois pas ce que je devrais recevoir. Quand j'envoie 0xC1 je devrais avoir comme réponse 0xCD ou 0xED : page 11 : http://datasheets.maxim-ic.com/en/ds/DS2480B.pdf

    Et moi je reçois rien.

    Merci

    voilà le code modifier :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
     
     
     
    int main(void)
    { 
    	int port_serie;
    	struct termios options;
    	int reception;
    	char buffer[10] = "";
    	char data = 0xC1;
     
     
    	port_serie = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
     
    	if(port_serie < 0)
    	{
    		perror("Port serie ouvert");
    		exit(-1);
    	}
     
    	else
    	{
    		printf("Port serie bien ouvert. \n");
    		printf("Port serie %d. \n", port_serie);
     
     
    		tcgetattr(port_serie, &options);
    		cfsetospeed(&options, B9600);
    		options.c_cflag |= (CLOCAL | CREAD);
    		options.c_cflag &= ~PARENB; 
    		options.c_cflag &= ~CSTOPB; 
    		options.c_cflag &= ~CSIZE; 
    		options.c_cflag |= CS8;
    		tcsetattr(port_serie, TCSANOW, &options);
    		printf("Configuration OK !. \n");
     
    		// Envoie de donnees.
    		printf("Envoie des donnees en cours ... \n");
    		if (write(port_serie, &data, 1) < 0){perror("write:");}
    		printf("Envoie Termine. \n");
    		printf("Attente. \n");
    		sleep(1);
    		printf("Fin Attente. \n");
    		// Lecture des donnees.
    		printf("Lecture des donnees en cours ... \n");
    		fcntl(port_serie,F_SETFL,10);
     
    		reception=read(port_serie,buffer,100);
    		printf("J'ai lu %d charactères: %s\n",reception,buffer);
     
    		if (reception == -1)
    			printf("Erreur lecture port serie\n");
     
    		printf("Reception fini.\n" );
     
    	}
     
    	close(port_serie);
    }

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    salut hppp01, je sais que ca commence a dater, mais a tu trouver une solution a ton problème, car je me retrouve avec le même aujourd'hui?

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 62
    Points : 162
    Points
    162
    Par défaut
    Bonjour,
    Dans l'ouverture du port série je vois un problème potentiel.
    Je vois bien l'initialisation de la vitesse de communication en sortie...
    cfsetospeed(&options, B9600)
    ... mais aucune trace en entrée.
    il faudrait rajouter :
    cfsetispeed(&options, B9600)

Discussions similaires

  1. Envois et reception d'une trame via Port Serie (com)
    Par samirraoui dans le forum VB.NET
    Réponses: 3
    Dernier message: 11/05/2015, 13h15
  2. Transmission de trames sur ports serie via ISS
    Par ZoummuoZ dans le forum ASP.NET
    Réponses: 0
    Dernier message: 08/12/2009, 09h56
  3. Problème envoie de données sur le port Serie
    Par petiteso dans le forum C#
    Réponses: 6
    Dernier message: 06/12/2007, 13h33
  4. [VBA Excel]Envoie de données sur port serie
    Par Farbin dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/08/2006, 08h05
  5. Réponses: 3
    Dernier message: 28/06/2006, 16h13

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