pilou007
Posts: 26
Joined: Thu Oct 05, 2017 8:43 am

[RESOLU]UART ne fonctionne pas

Mon Oct 09, 2017 2:10 pm

Salut,
Je galère grave pour faire fonctionner l'UART sur mon Raspberry Pi3...
Malgré tout ce que je trouve sur les forums, mon UART ne veut rien lire... J'ai un système externe qui crache des data surt l'UART, j'ai placé un espion avec un convertisseur UART/RS232 vers USB vers mon PC, et mon système envoie bien les données. Ca fonctionnait parfaitement avec Arduino....
Dans la config du pi3: serial on, wire on.
J'ai lancé cette commande: sudo chmod a+rw /dev/ttyAMA0
Et voici mon code, strlen contien en permanence 4 XXX XXX XXX, on dirait qu'il se mets au taquet de la vaaleur d'un int:

Code: Select all

//Open in non blocking read/write mode
    if(serialPort = open("/dev/ttyAMA0", O_RDWR | O_NONBLOCK) == -1){
        cout << "Error - Unable to open UART" << endl;
        return false;
    }
    
    fcntl(serialPort, F_SETFL, FNDELAY);
   	struct termios options;
	tcgetattr(serialPort, &options);
	options.c_cflag = B115200 | CS8 | CLOCAL | CREAD;		//<Set baud rate
	options.c_iflag = IGNPAR;
	options.c_oflag = 0;
	options.c_lflag = 0;
	tcflush(serialPort, TCIFLUSH);
	tcsetattr(serialPort, TCSANOW, &options);

    // On éteint J2_START pour lancer le processus
    Device::piloterDiscret(RELAY_ON, RELAY_ON, RELAY_ON, RELAY_ON, RELAY_ON, RELAY_OFF, RELAY_OFF); // un action qui fait que mon système externe crache  sur l'UART

    // Time Out
    time(&now);

    while(1){

        if((strLen = read(serialPort, (void*)readBuf, 511)) > 0){ //Si le buffer d'entré contient des datas
            cout << "strlen: " << strLen << endl;
            readBuf[strLen] = '\0';

            dataOk = true; // Juste pour dire qu'on a bien chargé des données
        }else{

            time(&timeAfter);

            if(timeOut = (difftime(timeAfter, now) >= RS232_TIME_OUT)) // Timeout = 5000ms
                break;
        }
        usleep(100000);
    }
    cout << "Fin récup donnée strLen: " << strLen << endl;
Merci pour votre aide
Last edited by pilou007 on Fri Oct 20, 2017 9:13 am, edited 1 time in total.

pilou007
Posts: 26
Joined: Thu Oct 05, 2017 8:43 am

Re: UART ne fonctionne pas

Mon Oct 09, 2017 3:56 pm

Alors, j'ai trouvé que sur le pi3, il ne faut plus utiliser ttyAMA0, mais ttyS0, mais bon là c'est encore pire, il n'ouvre même pas le port... Loooool

J'ai aussi désactivé la console, elle n'apparait pas dans cmdline.txt, sauf console = tty1. J'ai enlevé le shell...
J'ai vérifié que le blutooth n'était pas activé....

JumpZero
Posts: 821
Joined: Thu Mar 28, 2013 7:35 pm
Location: 127.0.0.1

Re: UART ne fonctionne pas

Mon Oct 09, 2017 4:10 pm

Bjr,
Quel uart?
Raspi 3 = 2 uart
Quel OS: Raspbian?
https://www.raspberrypi.org/documentati ... on/uart.md
--
Jmp0

danjperron
Posts: 2678
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: UART ne fonctionne pas

Mon Oct 09, 2017 11:11 pm

1 - Les dernières version de debian utilisent /dev/serial0 qui pointe vers le bon tty que ce soit un PI3 ou un autre Raspberry Pi.

2 - Le port série est de niveau TTL 3.3V et non RS-232. Si tu as branché du RS-232 sur les GPIOs il y a de forte chance que les GPIOs sont défectueux.

3- Le port série par défaux est utilisé par la console de débug. Donc il faut utiliser la commande "sudo raspi-config" , enlever la console série et activer le port série seul.

pilou007
Posts: 26
Joined: Thu Oct 05, 2017 8:43 am

Re: UART ne fonctionne pas

Wed Oct 11, 2017 7:36 am

Salut,
Merci pour vos réponses.
L'UART, sur le port GPIO il n'y en a qu'une pin 8&10, me trompe-je? Et oui, sur Raspbian Jessie, désolé de cet oubli. J'utilise la bibliothèque BCM2835, je code en C++.
Ok, pour le serial 0, je vais utiliser ça, c'est vrai que c'est plus générique.
Alors, je suis bien en 3,3V entre mon système et le raspi, c'est de la com de uart à uart, entre cette ligne et mon espion, effectivement, je mets un conver RS232 pour voir les choses passer.
J'ai trouver un truc tout con.... Vous me dites... Mais il faudrait peut-être que je paramètre les pin 8&10, et j'ai vu quelque part qu'il fallait les mettre toutes les deux en input, vous confirmez?

pilou007
Posts: 26
Joined: Thu Oct 05, 2017 8:43 am

Re: UART ne fonctionne pas

Wed Oct 11, 2017 5:09 pm

Bon et bien j'ai tout essayé, ça ne marche pas.... Zut!!!
Et c'est sur que c'est un problème de conf...

pilou007
Posts: 26
Joined: Thu Oct 05, 2017 8:43 am

Re: UART ne fonctionne pas

Wed Oct 11, 2017 9:10 pm

J'ai une question, j'ai trouvé ça sur forum, qu'est-ce que je dois utiliser??
bcm2835_gpio_fsel(RPI_BPLUS_GPIO_J8_08, BCM2835_GPIO_FSEL_ALT5); // UART1_TXD
Alors que moi, j'ai fait
bcm2835_gpio_fsel(RPI_BPLUS_GPIO_J8_08, BCM2835_GPIO_FSEL_INPT); // UART1_TXD

Qu'est-ce qui est le mieux? Est-ce qu'il faut vraiment configurer les GPIO14&15??

Merci

fdufnews
Posts: 284
Joined: Fri Oct 07, 2011 5:37 pm

Re: UART ne fonctionne pas

Thu Oct 12, 2017 9:05 am

L'UART étant activée nativement, il n'y a aucune raison de devoir faire ce genre de manipulation au niveau registre.
Il faudrait confirmer que tu as bien les droits sur /dev/serial0 et que la configuration (vitesse, hand-shake est pertinente).
Avant de l'utiliser dans ton application, as-tu essayé d'utiliser serial0 avec minicom (ou équivalent) en rebouclant le RX sur le TX.

pilou007
Posts: 26
Joined: Thu Oct 05, 2017 8:43 am

Re: UART ne fonctionne pas

Thu Oct 12, 2017 11:29 am

Ok, je vais tester sans rien...
Pourrais-tu m'en dire plus sur le handsake? Et comment je vérifie si j'ai bien les droits?
Non, je n'ai pas testé avec minicom, apparemment ils y en a qui disent que ça peut cramer... Il mettre une résistance de 680Ohm....
Mais je crois que si ça ne marche pas, je vais être obligé de tester ça....
Merci

flo_popup
Posts: 4
Joined: Thu Oct 12, 2017 10:00 am

Re: UART ne fonctionne pas

Thu Oct 12, 2017 12:30 pm

-Essaie de t'accorder les droits d'acces aux interfaces de communications si ce n'est pas déja fait :

Code: Select all

sudo adduser $USER dialout
-Verifie ton banchement pour l'UART, les Tx et Rx sont croisés : Tx(device1) => Rx(device2), Tx(device2)=>Rx(device1)

-Tu peux debeugger avec putty : pour l'installer :

Code: Select all

sudo apt-get install putty

Code: Select all

sudo putty
pour le lancer ! (lance le avec sudo et non par le raccourci !

Clique sur sérial puis rentre le chemin a ton interface : /dev/ttyS0 ou /dev/ttyAMA0 ou autre. Tu peux voir les interfaces en faisant

Code: Select all

sudo ls /dev


Si tu utilise un adaptateur uart => USB il se peux que ton interface soit detecté en tant qu'USB : /dev/ttyUSB0 (c'est le cas pour le miens)

Rentre ton baudrate (valeurs typiques : 9600 ou 112500)

pilou007
Posts: 26
Joined: Thu Oct 05, 2017 8:43 am

Re: UART ne fonctionne pas

Thu Oct 12, 2017 1:22 pm

Non, je n'ai pas d'adaptateur uart/usb, mais si ça continue, je sens que je vais en mettre un (en parralèle, je teste un convertisseur USB/RS485, ça marche très bien...), lol...
J'ai installé Putty, il ouvre bien une sessios sur serial0 ou tty/AMA0 mais il bloque à l'ouverture du serial1: "Unable to open connection to /dev/serial0" et "Unable to configure serial port" donc c'est bon normalement avec les changement de conf qiue j'ai fait.... Je teste une com en avec une boucle de retour entre 8&10 avec une 680 Ohms...

Ok, pour les tx/rx croisés, pas de souci avec ça.

danjperron
Posts: 2678
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: UART ne fonctionne pas

Thu Oct 12, 2017 7:14 pm

J'ai relu tout le post et je n'ai pas vu que tu as configuré ton port série.

sur un terminal, utilise

sudo raspi-config, interfacing options, P6 serial, Non pour login shell, Oui pour serial port hardware.


pour verifier si tes GPIOs en mode série fonctionnent, branche GPIO14 & 15 ensemble et utilise un programme de communication.

sudo apt-get update
sudo apt-get install minicom
minicom -D /dev/serial0 -b 115200

Si tu tapes quelque chose tu devrais avoir un echo.

pilou007
Posts: 26
Joined: Thu Oct 05, 2017 8:43 am

Re: UART ne fonctionne pas

Fri Oct 13, 2017 8:02 am

Salut, Merci pour ta réponse.
Donc si, j'ai paramétré mon port série.
Et merci pour cette façon simple d'utiliser minicom, c'est laa première fois que je vois ça de façon aussi simple....
Et donc le résultat est que ça marche, si je mets un résistance de 680Ohms entre Tx/Rx, j'ai bien un echo que je n'ai pas si je l'enlève...
Donc mon port est correctement configuré...
Ca doit venir de mon prog alors??? Je vous tiens au courant...

Merci

pilou007
Posts: 26
Joined: Thu Oct 05, 2017 8:43 am

Re: UART ne fonctionne pas

Fri Oct 20, 2017 9:08 am

Salut à tous,
Ca y est, Yesssssss ça marche... looool
Bon effectivement, ça venait de mon porgramme.

Dans cette ligne:

Code: Select all

strLen = read(serialPort, (void*)readBuf, 511)
La fonction read renvoie un int et moi, j'avais mis strLen en unsigned int.... Je ne sais pas pourquoi, mais c'est ça qui me foutait le bazard.
En regardant de plus près, dans ma boucle while, strLen renvoyait constamment 2 700 000 enfin il me semble, (avec des chiffres à la place des 0) mais ça devait être 2 147 483 647, ce qui est la valeur maximum d'un int signé.... et de temps en temps, strLen me renvoyait des valeurs comme 72, 292, .... bref mes données....
A partir du moment ou j'ai mis un unsigned int, strLen me renvoie 0 en permanence sauf quand je lis mes données....

Donc je ne comprends pas pour quoi un renvoi d'unsigned int dans un int ne marche pas (lorsque c'est 0)... Bref de plus de temps en temps, il me renvoie -1 et donc oui,là c'est normal que ça ne passe pas....

Bref erreur sur une variable....
Merci pour tout.

Calvin-pi78
Posts: 46
Joined: Sat Jan 28, 2017 10:59 pm

Re: [RESOLU]UART ne fonctionne pas

Wed Oct 25, 2017 7:11 pm

Pour votre Arduino, connectiez-vous les pins de la facon suivante ?

Image

J'ai fait comme ceci (en adaptant pour un pi3) mais, je ne détecte pas ttyACMA0, est-ce normal ?
Aucune ligne n'apparait avec ls /dv/tty*, est ce normal, pouvez vous m'aider ?

danjperron
Posts: 2678
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: [RESOLU]UART ne fonctionne pas

Wed Oct 25, 2017 8:57 pm

Est-ce que ton Arduino est une version 3.3V. Si oui tout est OK!

Sinon tu vas te réveiller un matin et tu n'auras pas de communication et la broche du RX du Raspberry Pi sera grillée.

Sur la sortie TX de l'arduino ajoute un réducteur de tension avec deux résistances.
L'arduino envoie le signal en 5V et il faut 3.3V pour le Pi.

Code: Select all

Arduino TX ─────[ 2K ]────┬────────── PI RX
                          │
                          └────[3k3]──── GND

Si tu as une nouvelle version de debian utlise /dev/serial0 au lieu de /dev/ttyAMA0 puisque pour le Pi3 c'est /dev/ttyS0. l'avantage de /dev/serial0 c'est que cela marchera pour n'importe quel PI avec une nouvelle version de debian.

Calvin-pi78
Posts: 46
Joined: Sat Jan 28, 2017 10:59 pm

Re: [RESOLU]UART ne fonctionne pas

Thu Oct 26, 2017 7:08 am

Comment connaitre la tension de notre Arduino ?

Sur le TX Arduino je mets une résistance de 2k Ohm relié au TX Rpi et, une autre résistance relie au TX Rpi de 3 k ohm?

Comment avez vous fait le calcul ? Et on ne fait rien du côté rx ?

pilou007
Posts: 26
Joined: Thu Oct 05, 2017 8:43 am

Re: [RESOLU]UART ne fonctionne pas

Thu Oct 26, 2017 8:04 am

Salut
Regarde la doc de ton Arduino, c'est le B-A BA de ce genre de manip....
Ensuite concernant les résistances, c'est un simple pont diviseur, encore une fois, je t'invite à te former à travers des doc s simple que tu trouve sur internet... Electronique pour les nuls ou autres...
Maintenant oui, le Rasp fonctionne en 3,3V, mais moi en face, je n'ai pas un Arduino, j'ai un système industriel...
Bon courage

totoharibo
Posts: 3388
Joined: Thu Jan 24, 2013 8:43 am

Re: [RESOLU]UART ne fonctionne pas

Thu Oct 26, 2017 10:08 am

+1 pilou007

J'ai mes chicoufs chez moi : même problème : "je veux", "je sais pas"
http://fabrice.sincere.pagesperso-orang ... ricite.htm

c'est Niveau : Première et terminale STI (cours de Physique Appliquée)

ça valorise non ?

(Un journée où on n'a rien appris est une journée perdue)

fdufnews
Posts: 284
Joined: Fri Oct 07, 2011 5:37 pm

Re: [RESOLU]UART ne fonctionne pas

Thu Oct 26, 2017 10:51 am

Calvin-pi78 wrote:
Thu Oct 26, 2017 7:08 am
Sur le TX Arduino je mets une résistance de 2k Ohm relié au TX Rpi et, une autre résistance relie au TX Rpi de 3 k ohm?
Tu as bien regardé le "dessin"?
La résistance de 2k est placée entre TX Arduino et RX RPi.
La résistance de 3k est placée entre Rx RPi et la masse

danjperron
Posts: 2678
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: [RESOLU]UART ne fonctionne pas

Thu Oct 26, 2017 11:54 am

Un diviseur de tension avec deux résistances ce calcule facilement!

Image

Deux résistances peuvent ce convertir en une seule résistance attaché à une source de tension moins élevé.

Vout = Vin * ( R2/(R1+R2))
Rout = 1/(1/R1 + 1/R2)

Donc si

Vin = 5V
R1 = 2K
T2 = 3k3

J'ai donc

Vout = 5V * (3300Ω / (2000Ω + 3300Ω)) = 3,11 V
et la résistance résiduelle sera
R = (R1*R2) / (R1+R2) = ( 3300Ω * 2000Ω) / (2000Ω + 3300Ω) = 1370 Ω

Vous remarquerez que les unités , ohm et tension, sont les bonnes pour le résultat.

Donc le diviseur de résistance ce remplace par une tension de 3,11V avec une résistance en série de 1370 ohm.

C'est le théorème de Thévenin.

Calvin-pi78
Posts: 46
Joined: Sat Jan 28, 2017 10:59 pm

Re: [RESOLU]UART ne fonctionne pas

Thu Oct 26, 2017 1:07 pm

Code: Select all

GND (Arduino ou Rpi) ________|3k3|________ Pi RX                     Pi TX
                                             |                         |
                                             |                         |
                                           |2k|                        |
                                             |                         |
                                             |                         |
                                        Arduino TX                 Arduino RX
Donc, c'est bien cela ?

GND du quel ?

Pi TX et Arduino Rx sont relié simplement ?

danjperron
Posts: 2678
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: [RESOLU]UART ne fonctionne pas

Thu Oct 26, 2017 1:37 pm

Oui cela est parfait sauf que le GND est seulement un. Les deux systèmes utilisent un seul ground donc il faut absolument que le GND de l'Arduino et celui du Raspberry Pi doivent être branchés ensemble.

Calvin-pi78
Posts: 46
Joined: Sat Jan 28, 2017 10:59 pm

Re: [RESOLU]UART ne fonctionne pas

Thu Oct 26, 2017 8:33 pm

J'ai tout relié avec des résistances précises au Ohm près, mais, cela ne marche pas...

En faisant ; ls /dev/tty*, aucun device n'apparait ! Est-ce normal ? que faire ?

danjperron
Posts: 2678
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: [RESOLU]UART ne fonctionne pas

Thu Oct 26, 2017 8:58 pm

Relis le forum au complet. Il y a les instructions pour activer le port série.

sudo raspi-config, interfacing options, P6 serial, Non pour login shell, Oui pour serial port hardware.
cette instruction fonctionne si tu as une version récente de debian.

sinon vérifie le fichier /boot/config.txt. Il faut que la ligne "enable_uart=1" y soit.

Aussi utilise /dev/serial0 qui est un link pour le port série.( /dev/ttyS0 pour le Pi3 ou /dev/ttyAMA0 pour les autres).

Return to “Français”

Who is online

Users browsing this forum: No registered users and 6 guests