cs_Dagnir
Messages postés18Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention11 février 2009
-
9 févr. 2009 à 21:40
cs_Dagnir
Messages postés18Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention11 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 :)
cs_Dagnir
Messages postés18Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention11 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 :)