Aide communication serie ( option DTR)
Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

Aide communication serie ( option DTR)



  1. #1
    invited91dce06

    Aide communication serie ( option DTR)


    ------

    je communique avec une carte arduino avec un pc sous ubuntu, et je veux éviter un reset de la carte à chaque ouverture du port série. Pour ca je veux mettre le DTR==OFF
    Comme j'utilise la fonction open() pour ouvrir le port serie, je sais pas ou fixer le DTR

    Merci pr votre aide

    -----

  2. #2
    Jack
    Modérateur

    Re : Aide communication serie ( option DTR)

    Et pourquoi DTR provoquerait-il le reset de l'arduino?

    De plus, il faudrait que tu précises à quelle librairie appartient cette fonction open().

    PS: on n'est plus dans le domaine du forum électronique que dans celui de l'informatique => je transfère cette discussion
    Dernière modification par Jack ; 06/03/2013 à 11h16.

  3. #3
    invited91dce06

    Re : Aide communication serie ( option DTR)

    jai remarqué que pour pouvoir communiquer avec ma carte arduino(en utilisant un programme C et une connexion serie/usb) je devais aussi demarrer un programme d'emulation de terminale(ex: minicom); sinon ca marche pas. Donc pour remedier a cela j'ai lu quelque part qu' il fallait Empêcher le RESET de la carte Arduino.
    En faisant mes recherches je suis tombé sur un bout de code du type
    Code:
    exec("mode com3: BAUD=9600 PARITY=N data=8 stop=1 xon=off dtr=off");
    comme moi j'utilise la fonction open() et une structure termios pour ouvrir le pport serie /dev/ttyACM0 je voulais savoir comment utiliser le paramtres "dtr=off"

  4. #4
    invited91dce06

    Re : Aide communication serie ( option DTR)

    voici le lien pour jetter un coup d'oeil http://benjamin-balet.info/developpe...hp-et-arduino/

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Aide communication serie ( option DTR)

    regarde cet exemple:
    http://www.eyetap.org/~tangf/files/serial_write.c
    Dans la fonction change_baud, on trouve comment accéder à DTR.

    A+

  7. #6
    invited91dce06

    Re : Aide communication serie ( option DTR)

    okk merci jack

  8. #7
    invited91dce06

    Re : Aide communication serie ( option DTR)

    Hélas ca change rien. Quelqu'un saurait t-il comment faire pour communiquer avec arduino via PC sans etre obligé de démarrer aussi minicom ou tout autre emulateur de ce type

  9. #8
    Jack
    Modérateur

    Re : Aide communication serie ( option DTR)

    J'avoue ne pas comprendre du tout pourquoi il faut lancer un terminal sur le PC. Normalement, si le terminal est ouvert, il n'est plus possible d'accéder au port série.

    A+

  10. #9
    invited91dce06

    Re : Aide communication serie ( option DTR)

    Normalement, si le terminal est ouvert, il n'est plus possible d'accéder au port série.
    Tu a tout a fait raison, c'est pour ca que une partie des bytes que je doit recevoir avec mon code en C , s'affiche sur l'emulateur minicom et l'autre partie est affiché par mon programmeC.

    au fait j'avais fais la commande suivante pr utiliser le port
    Code:
     chmod a+w /dev/ttyACM0
    le probleme ne viendrait il pas de la.? Merci

  11. #10
    Jack
    Modérateur

    Re : Aide communication serie ( option DTR)

    c'est pour ca que une partie des bytes que je doit recevoir avec mon code en C , s'affiche sur l'emulateur minicom et l'autre partie est affiché par mon programmeC.
    Ce que je ne comprends toujours pas, c'est comment la fonction fopen de ton programme en C a pu te retourner autre chose que NULL vu que la ressource est déjà exploitée par le terminal.

    A+

  12. #11
    invited91dce06

    Re : Aide communication serie ( option DTR)

    Ce que je ne comprends toujours pas, c'est comment la fonction fopen de ton programme en C a pu te retourner autre chose que NULL vu que la ressource est déjà exploitée par le terminal.
    Et moi donc

    Bon cela dit j'ai reglé mon probleme. C'est a dire que a present je peux envoyer et recevoir sans demmarer un emulateur de port serie.
    J'ai just placer sleep(3) apres l'ouverture du port
    Code:
    fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY);
    	if (fd == -1)
    	{
    		//ERROR - CAN'T OPEN SERIAL PORT
    		printf("Error - Unable to open UART. Ensure it is not in use by another application\n");
    	}
    	fcntl(fd, F_SETFL,0);
    	sleep(3);

  13. #12
    invited91dce06

    Re : Aide communication serie ( option DTR)

    Bonjour les amis,
    voila y a une semaine de cela j'etais content car le code suivant me permettait de faire communiquer Raspberry et Arduino. De retour de vacance j'y comprend plus rien. J'arrive a envoyer vers arduino mais je reçois rien ( probleme donc avec le read). Quand j'enleve le fcntl(fd, F_SETFL,0) et que j'imprime errno j'ai toujours EAGAIN. Quelqu'un pourrait il me dire ce qui ne vas pas avec le code suivant . ( CE CODE FONCTIONNE PARFAITEMENT ENTRE PC-Arduino)

    Merci

    Code:
    #include <stdio.h>
    #include <unistd.h>			//Used for UART
    #include <fcntl.h>			//Used for UART
    #include <termios.h>		        //Used for UART
    #include <sys/time.h>
    #include <inttypes.h>
    #include <sys/ioctl.h>
    #include <errno.h>
    
    extern int errno;
    int main() {
    
    	
    	int fd = -1;
    	struct termios options;
    	tcgetattr(fd, &options);
    	cfsetispeed(&options, B9600); //<Set baud rate
    	cfsetospeed(&options, B9600); //<Set baud rate
    	options.c_cflag |= (CLOCAL | CREAD); 
        	options.c_cflag &= ~PARENB; 
        	options.c_cflag &= ~CSTOPB; 
        	options.c_cflag &= ~CSIZE; 
        	options.c_cflag |= CS8; 
        	tcsetattr(fd,TCSANOW,&options);
    	
    	fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY);
    	if (fd == -1)
    	{
    		//ERROR - CAN'T OPEN SERIAL PORT
    		printf("Error - Unable to open UART. Ensure it is not in use by another application\n");
    	}
    	fcntl(fd, F_SETFL,0);
    	int i=0;
    	//partie TX
    	unsigned char tx_buffer[20];
    	unsigned char *p_tx_buffer;
    	p_tx_buffer = &tx_buffer[0];
    	*p_tx_buffer++ = '<';
    	*p_tx_buffer++ = 'E';
    	*p_tx_buffer++ = 'T';
    	*p_tx_buffer++ = '_';
    	*p_tx_buffer++ = 'P';
    	*p_tx_buffer++ = ':';
    	*p_tx_buffer++ = 'O';
    	*p_tx_buffer++ = '>';
    
    	sleep(2);
    	int wri = write(fd,&tx_buffer[0], (p_tx_buffer - &tx_buffer[0]));
    	if (wri < 0)
    				{
    					printf("UART TX error\n");
    				}
    	printf("%d\n", wri);
    
    	sleep(1);
    
    	char rx_buffer[256] = {0};
    	
    	int rx_length = -1;
    	do {
                    errno = 0;
    		rx_length = read(fd,rx_buffer,255);
                    printf("errno : %d \n", errno);
    	}	
    	while (rx_length < 1);
    	printf("%i bytes read %s\n",rx_length,rx_buffer);
    
    	return 0;
    
    
    
    }

  14. #13
    polo974

    Re : Aide communication serie ( option DTR)

    Citation Envoyé par Jack Voir le message
    Ce que je ne comprends toujours pas, c'est comment la fonction fopen de ton programme en C a pu te retourner autre chose que NULL vu que la ressource est déjà exploitée par le terminal.

    A+
    bof, nous on balance de partout en même temps sur le même tty (vrai, usb ou pseudo) et ça rentre...
    l'ouverture n'est pas exclusive. et donc en écriture, pas de problème, par contre en lecture, c'est la bagarre et les octets passent par-ci ou par-là, mais à quoi bon lire (parfois)...
    par contre sur les lp, c'est une autre histoire...

    il faut voir du coté des autres signaux de contrôle.
    Code:
     man stty
    Jusqu'ici tout va bien...

  15. #14
    Jack
    Modérateur

    Re : Aide communication serie ( option DTR)

    bof, nous on balance de partout en même temps sur le même tty (vrai, usb ou pseudo) et ça rentre...
    Ce ne sont pas des méthodes à encourager en tout cas

  16. #15
    polo974

    Re : Aide communication serie ( option DTR)

    Citation Envoyé par Jack Voir le message
    Ce ne sont pas des méthodes à encourager en tout cas
    C'est sûr...
    Mais bon, on peut ouvrir plusieurs fois le même périph /dev/tty* sans que ça ne cause de souci.
    C'est quand on s'en sert que ça risque de poser problème ...

    Mais là, le pb vient probablement plus des signaux de contrôles ou des setting du tty qui ne fonctionne pas toujours (quasiment jamais) comme un bête pipe bidir.

    Il suffit de voir ce que donne un stty -a -F /dev/... pour se rendre compte de la quantité de sources de problème potentiels, pardon de paramètres disponibles.
    Jusqu'ici tout va bien...

  17. #16
    invited91dce06

    Re : Aide communication serie ( option DTR)

    Merci j vais essayé ca

  18. #17
    invited91dce06

    Re : Aide communication serie ( option DTR)

    Bonjour

    j'ai ca comme resultat pour la commande. Mais je t'avous que j ne sais pas ce qu'il faut que je regarde

    ssty -a -F /dev/...
    speed 9600 baud; rows 0; columns 0; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
    eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
    werase = ^W; lnext = ^V; flush = ^O; min = 0; time = 0;
    -parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts
    -ignbrk -brkint -ignpar -parmrk inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff
    -iuclc -ixany -imaxbel -iutf8
    -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
    -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt
    -echoctl -echoke

  19. #18
    invited91dce06

    Re : Aide communication serie ( option DTR)

    stty -a - F /dev/....
    rectification de la commande

  20. #19
    invited91dce06

    Re : Aide communication serie ( option DTR)

    Je reviens vers vous ( surtout vers Jack)

    bon j'ai résolu le fameux problèeme du port serie/usb arduino raspberry

    pour cela j'ai utilisé la configuration suivante

    options.c_cflag = B9600 | CS8 | CLOCAL | CREAD; // baud rate
    options.c_iflag = IGNPAR | ICRNL;
    options.c_oflag = 0;
    options.c_lflag = 0;
    J'ai enlevé les parametre PARENB et CSTOPB

  21. #20
    polo974

    Re : Aide communication serie ( option DTR)

    Citation Envoyé par la doc
    ICRNL Convertir CR en NL en entrée, ....
    donc ça veut dire qu'il sera impossible de communiquer en pur binaire (en entrée) (pour un dump par exemple).

    Est-ce donc vraiment nécessaire de transcoder le cr en nl ?

    Perso, je préfère configurer le port par un stty, ainsi, un changement de config ne nécessite pas une recompilation, mais c'est une histoire de gout...

    Tu peux récupérer une config avec un stty -g -F /dev/...
    (qui renvoie un truc du genre 6c02:5:4bf:8831:3:1c:7f:15:4:0 :1:ff:11:13:1a:ff:12:f:17:0:ff :0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 )

    Et la remettre en place avec un stty -F /dev/... <la chaine avec tout plein de nombres et :>

    Tu peux faire un raz de la structure (pour être certain qu'une option ésotérique ne triane pas) en remplaçant tous les nombres par des 0 et faire suivre avec tes options à toi:
    sttydef='0:0:880:0:0:0:0:0:0:0 :1:0:0:0:0:0:0:0:0:0:0:0:0:0:0 :0:0:0:0:0:0:0:0:0:0:0 stop ^S start ^Q'
    stty -F /dev/... $sttydef 9600 ...
    (ici, en fait, il y a cs8, clocal et cread prépositionnés dans ma structure, mais on peut toujours les contredire dans la suite de la commande...)
    Jusqu'ici tout va bien...

  22. #21
    invited91dce06

    Re : Aide communication serie ( option DTR)

    Merci polo974 je vais essayer de faire des recherches dans cette direction

Discussions similaires

  1. BTS Communication visuelle option Multimedia
    Par invite42fcdbfc dans le forum Orientation après le BAC
    Réponses: 1
    Dernier message: 12/02/2012, 17h27
  2. BTS Communication visuelle option Multimedia
    Par invite42fcdbfc dans le forum Orientation après le BAC
    Réponses: 0
    Dernier message: 11/02/2012, 13h53
  3. IUT info communication option CO
    Par invite17b65caf dans le forum Orientation après le BAC
    Réponses: 0
    Dernier message: 11/03/2008, 08h39
  4. BTS Communication Visuelle (Option Multimedia)
    Par inviteaaea585c dans le forum Orientation après le BAC
    Réponses: 4
    Dernier message: 20/02/2008, 14h01
  5. DUT info-communication, option journalisme
    Par inviteb1469bdd dans le forum Orientation après le BAC
    Réponses: 0
    Dernier message: 10/11/2007, 21h07
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...