chestercat
Messages postés7Date d'inscriptionsamedi 2 février 2008StatutMembreDernière intervention16 septembre 2008
-
13 mars 2008 à 15:15
chestercat
Messages postés7Date d'inscriptionsamedi 2 février 2008StatutMembreDernière intervention16 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.
sar1967
Messages postés15Date d'inscriptionsamedi 7 avril 2007StatutMembreDernière intervention30 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
tiblay
Messages postés60Date d'inscriptionmercredi 9 novembre 2005StatutMembreDerniè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
chestercat
Messages postés7Date d'inscriptionsamedi 2 février 2008StatutMembreDernière intervention16 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?
tiblay
Messages postés60Date d'inscriptionmercredi 9 novembre 2005StatutMembreDerniè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
Vous n’avez pas trouvé la réponse que vous recherchez ?