Transfert donnée VB2005 vers pic rs232

Résolu
chestercat Messages postés 7 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 16 septembre 2008 - 13 mars 2008 à 15:15
chestercat Messages postés 7 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 16 septembre 2008 - 14 mars 2008 à 11:50
Bonjour,

Je réalise actuellement un projet et je bloque sur la transmission de mon listview par rs232 à un pic 16f8777.
En réalité le pic reçoit les 2 premiers caractères et après il attend indéfiniment les suivants, je pense que mon apllication vb envoie tout à la suite et que le pic n'a pas le temps de tout voir.
Pourtant je travaille avec une connection 9600baud et un pic cadencé à 20Mhz.

Est-ce que quelqu'un pourrait regarder mon code VB pour me dire ce qui cloche et si tout est bon le problème viendra du pic.

Merci beaucoup de votre aide

Tig

5 réponses

sar1967 Messages postés 15 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 30 juin 2008
13 mars 2008 à 19:38
essai ca juste apres avoire envoye le premier byte:
System.Threading.Thread.Sleep(50)
ensuite le second
System.Threading.Thread.Sleep(50)
3~ etc...
si c'est bon (enfin ca devrais marcher)
tu fait une boucle

on essai tous d'apprendre ce qu'on ne sait pas .
3
tiblay Messages postés 60 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 6 janvier 2009
13 mars 2008 à 16:33
Salut,

Un Pic a 20 Mhz et 9600 Bps, ton Pic tourne a VIDE.....  tu le paie a rien faire  hi hi hi

Quelle language utilise tu ????
Est ce que tu utilise l'interrupt (PIC) pour recuperer tes BYTES ???
Quelle traitement fait tu dans le PIC ????
Tu recoit/envoie des BYTES NULL CHR(0) ???
As tu un BUFFER cote RX et si oui c'est le compilateur ou toi qui le gere

Reviens avec plus de details

Bye
0
chestercat Messages postés 7 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 16 septembre 2008
13 mars 2008 à 17:11
en fait je fais du polling des données arrivant et je les stocke dans des variables(pas un tableau).
Le seul moyen complétement tordu que j'ai trouvé est de faire un com.open et un Com.close à chaque envoi de 2 BYTE.
Je sais qu'il faudrait utiliser les interruptions mais je suis débutant et au début ça ma fait peur donc je suis partie comme ça et maintenant ça coince.

Je programme mon pic en C, donc un buffer serait un truc genre char tab[10] c'est ça?
0
tiblay Messages postés 60 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 6 janvier 2009
13 mars 2008 à 18:58
Salut,

OK pour le BUFER non ce n'est pas ca, c'est une memoire qui est cree software est qui fonctione en FIFO (first in first out), le tout fonctionne nuturellement avec l'interupt du port serie.  En C normalement tu as acces a cette fonction, et c'est le compilateur qui s'occupe du reste.  On peut bien entendu le cree (si on travaille en ASM en autre), mais quelque fois la logique de celui qui l'as cree cause probleme...... 

Pour ce qui est de ton probleme, a premiere vue cela resemble a un manque de temp du cote du PIC et tu semble perdre des BYTES.  Le fait que tu ouvre et ferme le port nous indique seulement que quand tu cree un delais entre l'envoie des bytes, le PIC semble avoir le temp de traiter l'information.  Il faudrait voir du cote du code du PIC, le probleme proviens de la gestion de la reception des BYTES.  Il faut pas oublier aussi, dans un PIC ou autre microcontroleur, le fait de declarer une variable plus  GROSSE  par exemple un LONG au lieu d'un BYTE par exemple, le temp de calcul en soufre enormement sans donner aucun autre ajout.  La quantite de donnees envoyer au micro est aussi importante.  Si la quantite est importante (> 250 BYTES) je te sugere de regarder du cote INTERUPT afin d'optimiser l'aquisition des donnees, de les mettres en memoire (dans un buffer) et les traiters pendant et apres le reception.  Tu peut mettre un delais aussi du cote PC entre chaque BYTE envoyer pour TESTER, mais cela devrais rester un TEST seulement, meme si cela fonctionne bien. 

Dans ton cas il faut eviter de BOUCLES sur le MAIN et de recuperer les BYTES a chaque fois que tu reviens au debut.  La methode NORMAL est d'activer l'interupt du port serie et des la reception de BYTES ton programme BRANCH dans la routine de l'interuption et REVIENT apres.  Il faut aussi faire attention a ne pas trop PERDRE de temps dans la routine d'interuption car quand tu est la il n'y a pas aucune autre INTERUPT EVENT qui peut etre cree.

Donne moi ta methode que tu utilise dans ton logiciel et on pourras t'aider a ameliorer ta solution

Bienvenue dans le mode des MICROCONTROLEURS,  C'est un merveilleux mode, et tu doit te donner le temps de COMPRENDRE le fonctionnement interne afin de bien l'utiliser.  C'est sur qu'il y a des differences majeur avec un PC quand tu concoit un FIRMEWARE.  Mais QUAND tu reussi, c'est beau a voir ce petit MONDE travailler.....

Fait tes TEST et reviens avec les resultats,

Bonnne chance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chestercat Messages postés 7 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 16 septembre 2008
14 mars 2008 à 11:50
Ok c'est  pas la plus classe des programmation mais pour la démo je vais essayer comme ça, je le reprendrais plus tard quand j'aurais le temps.

Merci beaucoup à tous!!
0
Rejoignez-nous