Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

UART : ser.read() surchargé
#1

bonjour à tous,

voila je reçois d'un périphérique extérieure des paquets (115200 bps ) qui représente la distance entre le peripherique et l'obstacle en face, et je les recois sur ma raspberry via le port serie.
les distances sont cohérentes, mais par exemple si je met ma main devant il faudra plusieurs secondes avant de me donner la nouvelle distance... j'espere que vous comprennez mon probleme car mon explication est peut etre pas trop clair...

Je pense que le soucis viens de mon stockage d'octet de l'uart de ma raspberry qui est surchargé. ca expliquerait le temps d'attente pour la nouvelle distance, je ne peux pas arrété malheuresement le périphérique ou mettre un delay entre chaque envoie, non je recois tout en paquet... je dois donc trouver un moyen de vider la mémoire de de l'uart de ma raspberry pour recevoir les nouvelles donnees mais je ne sais pas comment faire ...

avez vous une idée, je code python pour info
voici mon extrait de code :


Code :
[== Indéfini ==]
import serial

ser = serial.Serial('/dev/ttyAMAO',115200,timeout=5)
reception=ser.read()

avait vous une idée pour resoudre mon probleme

merci d'avance
Répondre
#2

Bonsoir,
je n'ai pas essayé,
une vitesse beaucoup moins élevée!
par définition, le contrôle de flux est implémenté
A+
JB1
Répondre
#3

il n' y a pas un moyen de configurer le buffer du rasp ?
Répondre
#4

bonjour,
as-tu consulté ce lien:

http://poivron-robotique.fr/Liaison-UART...ry-Pi.html

ainsi que:
http://www.raspberry-projects.com/pi/pro...g-the-uart

j'ai déjà utilisé minicom mais sur une station
A+
JB1
Répondre
#5

oui j'ai déja lu ca mais ca n'explique pas comment diminuer le buffer de la raspberry Sad
Répondre
#6

Hello,

Tu as quoi comme périphérique?
Je ne pense pas que cela vienne du rasp le temps d'attente.
En série quand un buffer est trop petit ou trop lent, tu as des pertes de caractères.
Le buffer n'attend pas d'être plein pour être traité.
Pour gérer un buffer, c'est soit physique par par signal CTS et RTS , soit logique Xon-Xoff.
pour le Rasp c'est(surement) XonXoff et il est sensé envoyé un Xoff quand le buffer est au 3/4 plein et Xon quand il est "vide"

Sinon pourquoi pas!

buffersize = 10 # taille du tampon
ser = serial.Serial(0)
while(true):
x = ser.read(buffersize)

Bon courage. @+ F.B.
Répondre
#7

c'est un peu nouveau pour moi les buffer, mais si le buffer peut contenir plusieurs octets, alors le derniers par exemple de sa liste va mettre un certain temps à etre lu et donc j'ai un certain Delta avant de lire la donnée . ca expliquerait pour moi pourquoi je met plusieurs secondes pour detecter la nouvelle distance ...

j'utilise un scanner laser RPlidar qui me renvoie 5 octets qui represente la distance et l'angle.

si par exemple j'attend que mon buffer est vide alors dans le code ca fait :
Code :
[== Indéfini ==]
ser=serial.Serial('/dev/ttyAMA0',115200,timeout = 1,xonxoff=True)

while True:
     if xon == 1:
             ser=serial.Serial('/dev/ttyAMA0',115200,timeout,xonxoff=True)
     else:
             ser=serial.Serial(0)#on arrete la lecture

[...]#code
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)