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 :

Pb de transmission en rs232 avec un prog en C


Sujet :

C

  1. #1
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut Pb de transmission en rs232 avec un prog en C
    Salut à tous,

    Je développe sous Linux avec Emacs+gcc, et j'ai un problème bizarre...

    J'ai un pc sous windoze qui me sert à envoyer des données avec l'hyperterminal par le port COM1 avec un cable null modem (complet) à mon pc sous Linux (Mandrake 9.1 avec Gnome 2.2.0)

    Tout marche bien, les caractères que je tape sur mon windoze s'affichent sur la bécane Linux dès que j'appuie sur "enter" (je suis en mode canonique de lecture par ligne). 8)

    MAIS dès que je tape trois fois de suite le même caractère, à l'affichage sous Linux, le troisième caractère est systèmatiquement erroné et si j'en tape plus de trois, à partir du troisième, ça alterne erreur, bon, erreur, bon, erreur... :
    Sachant que quelquesoit le caractère, la même erreur se produit Le caractère faux n'étant pas le même à chaque fois bien sûr...

    J'espère avoir été clair dans mes explications...

    Quelqu'un a-t-il une suggestion ou un début d'idée qui pourrait m'éclairer : :

    Merci d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Février 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Février 2003
    Messages : 55
    Points : 97
    Points
    97
    Par défaut Re: Pb de transmission en rs232 avec un prog en C
    C'est peut être une histoire de taille du tampon mémoire par défaut?

  3. #3
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 362
    Points
    1 362
    Par défaut
    On pourrais voir la déclaration et le remplissage de la chaîne stp.

  4. #4
    Membre habitué Avatar de monnoliv
    Homme Profil pro
    Opticien-ébéniste: lunettes de WC
    Inscrit en
    Août 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opticien-ébéniste: lunettes de WC

    Informations forums :
    Inscription : Août 2003
    Messages : 139
    Points : 195
    Points
    195
    Par défaut
    Cela arrive aussi lorsque les vitesses de transmission ne sont pas exactement les mêmes des deux cotés. Diminue la vitesse des deux cotés pour voir...

    BàT,

  5. #5
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Le plus simple c'est que je mette tout le code (c'est pas long ), voilu :

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    /*Oo_______________________________________________oO
           Program name : serie1
           Date : 24/09/2003
     
           Version : 0.3
    OOoo_______________________________________________oO*/
     
    #include <unistd.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <stdio.h>
    #include <string.h>
     
    #define BAUDRATE B9600
    #define MODEMDEVICE "/dev/ttyS0"
     
    #define FALSE 0
    #define TRUE 1
     
    volatile int STOP=FALSE; 
     
    int main(int argc, char *argv[])
    {
     int fd,res;
     struct termios oldtio,newtio;
     char buf[12],c;
     
     fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); 
     if (fd <0) 
       {
         perror(MODEMDEVICE);
         return(-1);
       }
     
     tcgetattr(fd,&oldtio);
     bzero(&newtio, sizeof(newtio));
     
     newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
     newtio.c_iflag = IGNPAR | ICRNL;
     newtio.c_oflag = 0;
     newtio.c_lflag = ICANON;
     newtio.c_cc[VINTR]    = 0;
     newtio.c_cc[VQUIT]    = 0;
     newtio.c_cc[VERASE]   = 0;
     newtio.c_cc[VKILL]    = 0;
     newtio.c_cc[VEOF]     = 4;
     newtio.c_cc[VTIME]    = 0;
     newtio.c_cc[VMIN]     = 1;
     newtio.c_cc[VSWTC]    = 0;
     newtio.c_cc[VSTART]   = 0;
     newtio.c_cc[VSTOP]    = 0;
     newtio.c_cc[VSUSP]    = 0;
     newtio.c_cc[VEOL]     = 0;
     newtio.c_cc[VREPRINT] = 0;
     newtio.c_cc[VDISCARD] = 0;
     newtio.c_cc[VWERASE]  = 0;
     newtio.c_cc[VLNEXT]   = 0;
     newtio.c_cc[VEOL2]    = 0;
     
     tcflush(fd,TCIFLUSH);
     tcsetattr(fd,TCSANOW,&newtio);
     
     while (STOP==FALSE)
       {     
         res = read(fd,&buf,1); 
         buf[res]='\0';
         printf("%s",buf);
     
         if (buf[0]=='z') STOP=TRUE;
     
     
         bzero(&buf,12);
       }
     
     tcsetattr(fd,TCSANOW,&oldtio);
     
     return(0);
    }
    Oui je sais, il n'y a aucun commentaire, mais quand je fais seulement des petits progs, je commente à la fin quand ça marche

    [Balises CODE ajoutées par Anomaly - les commentaires ne sont pas nécessaires, les balises CODE le sont ]

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    j ai pas de reponses pour toi desole !
    mais je voulais te demander de le commenter car j apprend maint le C systeme !
    sinon n oubliez pas de lui donner des suggestions sur son probleme voila
    ++

  7. #7
    Mau
    Mau est déconnecté
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Salut,

    j'ai pratiquement le meme programme mais j'ai :

    buf[res]=0; au lieu de buf[res]='\0';

    essaye ca a défaut d'une vrai explication...

  8. #8
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Le buf[res]=0 au lieu de ='\0' ne change rien, j'ai déjà essayé

    Ce problème est vraiment bizarre...
    A moins que l'hyperterminal de Windows n'envoie pas correctement les données : :

    Je pourrais peut-être essayer avec une autre appli, mais laquelle : A part l'hyperterminal je n'en ai pas d'autre

    Pour .:dev:. si tu bosses sur Linux, si tu regardes avec 'man termios' et autres, tu as pas mal d'infos (mais pas tout... ) sur les fonctions système et autres.

    Et merci Anomaly d'avoir mis les balises code que j'avais oublié

  9. #9
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Après moult essais, j'ai enfin trouvé, le bug venait... d'hyperterminal

    J'en ai eu marre, j'ai cherché un autre programme de communication avec les ports série, et j'ai trouvé le petit soft COM vers. 7.6 qui marche nickel chrome

    Je transmet donc l'info : ne JAMAIS faire ses tests avec l'hyperterminal...

    No comment...

    Merci quand même pour vos réponses 8)

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

Discussions similaires

  1. communiquer par rs232 avec access 2000
    Par john.dbc dans le forum Access
    Réponses: 3
    Dernier message: 21/09/2006, 13h06
  2. shadres: communication avec le prog
    Par Fa7 dans le forum OpenGL
    Réponses: 2
    Dernier message: 22/03/2006, 10h14
  3. Transmission de variable avec GET et header
    Par spirou dans le forum Langage
    Réponses: 10
    Dernier message: 03/01/2006, 19h04
  4. 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
  5. Problème avec un prog tcl autonome
    Par jaabouc dans le forum Linux
    Réponses: 3
    Dernier message: 04/06/2004, 21h13

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