Rapidité du port série

cs_Dagnir Messages postés 18 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 11 février 2009 - 9 févr. 2009 à 21:40
cs_Dagnir Messages postés 18 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 11 février 2009 - 11 févr. 2009 à 18:53
Bonjour

Je cherche à faire communiquer un PC avec un microprocesseur. Pour faire ca j'ai émulé un port série via un port usb.
Dans Visual Basic 2008 j'utilise un composant SerialPort.

Ca marche bien, mais j'ai des problèmes de rapidité.
Je l'utilise comme ca :

deb = GetTickCount
For i As Integer = 0 To 255 Step 1
SerialPort1.Write(car, i, 1)
Next
fin = GetTickCount

Le truc c'est que ca prend 250ms

Après que je fasse

deb = GetTickCount
For i As Integer = 0 To 19 Step 10
SerialPort1.Write(car, 0, 10)
Next
fin = GetTickCount

ou

deb = GetTickCount
SerialPort1.Write(car, 0, 255)
fin = GetTickCount

ca met dans les 15ms, seulement les valeurs recues par le microcontrolleur sont fausses.

Par exemple si j'envoie les octets par 2 je vais avoir le premier octet de bon et l'autre faux (et ca va mettre dans les 70ms, il n'y a qu'à partir de paquets de 10 octets que ca bloque à 15ms). Au dessus de 2 octets par appel de "write" les valeurs recues sont complètement fausses. D'ailleurs le microcontrolleur ne recoit pas non pls tous les octets.

J'ai fait ces mesures avec un baudrate de 162144, mais il se passe la meme chose avec des baudrates plus faibles.

Si quelqu'un peut me renseigner sur ce phénomène ou comment faire pour éviter les erreurs lors de l'envoie de plusieurs octets :)

Merci d'avance
Dagnir

2 réponses

cs_Dagnir Messages postés 18 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 11 février 2009
9 févr. 2009 à 21:47
Euh désolé pour ce post, Chrome n'a pas l'air de vouloir supporter les options de mise en page et je ne trouve pas le bouton editer
0
cs_Dagnir Messages postés 18 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 11 février 2009
11 févr. 2009 à 18:53
Bon du coup  je vais reposter une version lisible du message.

Visual Basic 2008
Composant SerialPort
Baudrate 162144
Envoi d'octets du PC à un microcontrolleur (port série émulé sur un port USB du PC).

Write est sencé envoyer les données d'un tableau d'octets, un certain nombre d'octets à partir d'un offset i.
Ceci marche très bien :

deb = GetTickCount
For i As Integer = 0 To 255 Step 1 
      SerialPort1.Write(car, i, 1)
Next
fin = GetTickCount

Le truc c'est que ca prend 250ms

Après que je fasse

deb = GetTickCount
For i As Integer = 0 To 19 Step 10 
      SerialPort1.Write(car, 0, 10)
Next
fin = GetTickCount

ou

deb = GetTickCount
SerialPort1.Write(car, 0, 255)
fin = GetTickCount

ca met dans les 15ms, seulement les valeurs recues par le microcontrolleur sont fausses.
Par exemple si j'envoie les octets par 2 je vais avoir le premier octet de bon et l'autre faux (et ca va mettre dans les 70ms, il n'y a qu'à partir de paquets de 10 octets que ca bloque à 15ms).
Au dessus de 2 octets par appel de "write" les valeurs recues sont complètement fausses. D'ailleurs le microcontrolleur ne recoit pas non plus tous les octets.
J'ai fait ces mesures avec un baudrate de 162144, mais il se passe la meme chose avec des baudrates plus faibles.
Si quelqu'un peut me renseigner sur ce phénomène ou comment faire pour éviter les erreurs lors de l'envoie de plusieurs octets :)

Merci d'avance
Dagnir
0