Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

probléme de valeur envoyées en UART
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1127
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#21 Message par paulfjujo » sam. 16 déc. 2017 21:33 lien vers la Data-Sheet : Cliquez ici

bonsoir à tous,

il me semble bien que UART1_Write() inclue déja le test du buffer vide avant de remplir TXREG ..
à verifier sur le resulat *.asm ou *.lst
je ne rajoute d'ailleurs jamais ce test while (UART1_Tx_Idle() == 0) dans mes applications..
mais je ne depasse pas 38400 bauds, et le plus souvent tourne à 19200 bds.

J'ai remarqué pas mal de probleme avec l'association
driver USB /TLL virtual com et TeraTerm qui se met à afficher n'importe quoi au bout d'un certain temsps...
Là c'est un probleme coté Windows.
Une relance du terminal et c'est à nouveau OK (lisible)
Il peut y avoir un parametrage à faire sur le terminal : TAMPON FIFO ? ou direct ?

Interference en fonction du delay_ms , ça , c'est pas normal du tout => Quid du watchdog ?

Le TX UART est sur quel port ? RC6 ?
dans ce cas, essaie avec une led sur un autre port que RC2

Montage sur plaque d'essai ?
à FOSC=64MHz , et ~2pF entre chaque colonne de breadboard, j'ai eu l'occasion de voir de curieux
effets entre 2 pins consecutives .. active (dont 1 en PWM) mais cela ne semble pas etre ton cas

Utilise tu un quartz et PLL ou FOSC interne * PLL ?
FOSC interne peut varier beaucoup avec U alim !

Je ferai un test demain, avec un 18F26K22 à 64MHz . (pas de 18F47K40 )
Aides toi, le ciel ou Fantastpic t'aideras

probléme de valeur envoyées en UART
satinas
Passioné
Passioné
Messages : 347
Enregistré en : novembre 2015

#22 Message par satinas » sam. 16 déc. 2017 21:42 lien vers la Data-Sheet : Cliquez ici

Bonsoir Paul, j'avais lu ça,

Sometimes this function can rewrite the content of the TX register before the data from register is shifted out to the bus. If we want to be sure that we have avoided that occurrence function UARTx_Tx_Idle can be used to check if the UART module has finished the transmission of the TX register. You might be wondering why this check is not included to the existing write function - the answer is, sometimes we want to rewrite existing content of the TX register. Also in that case UART_Write becoming a blocking function which is not so good when we have no multiple threads.
if( UART1_Tx_Idle() ) {
UART1_Write( 55 );
}
https://www.mikroe.com/blog/uart-serial-communication

probléme de valeur envoyées en UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#23 Message par Jérémy » sam. 16 déc. 2017 21:48 lien vers la Data-Sheet : Cliquez ici

Bonsoir Paul,

On parlais justement de toi :sifflotte:
paulfjujo a écrit :Source du message Montage sur plaque d'essai ?

Non le circuit est déjà fait : photo ici

paulfjujo a écrit :Source du message Le TX UART est sur quel port ? RC6 ?

Oui tout a fait

paulfjujo a écrit :Source du message dans ce cas, essaie avec une led sur un autre port que RC2

J'ai une autre led test sur RC1 ? est ce que ca ira ? je peux faire un montage sur un autre PORT sinon

paulfjujo a écrit :Source du message Utilise tu un quartz et PLL ou FOSC interne * PLL ?
FOSC interne peut varier beaucoup avec U alim

OSC interne à 64Mhz

En fait j'aurais tendance à exclure un problème de terminal car sans pause de 500ms ca fonctionne parfaitement. des que j’augmente la pause entre deux envoie ça déconne de plus en plus. avec 500ms j'ai seulement les chiffres "0123" . avec "5ms" j'ai tout mes chiffres sans aucunes erreurs.
C'est quand les envoie sont lents que sa foire , d'habitude c'est l'inverse ! c'est quand on veut aller vite que sa tape dans les gamelles
C'est en faisant des erreurs, que l'on apprend le mieux !!!

probléme de valeur envoyées en UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#24 Message par Jérémy » sam. 16 déc. 2017 21:55 lien vers la Data-Sheet : Cliquez ici

Un autre problème de résolu !!!!!

Le watchdog était activé !!!!! y'a tellement de paramètres dans ces PIC18F que c'est pas évident de penser à tout !

j'a idésactivé le watchdog et ca fonctionne . a 500ms . je vais poussé un peu mes tests et je vous tiens au courant
C'est en faisant des erreurs, que l'on apprend le mieux !!!

probléme de valeur envoyées en UART
satinas
Passioné
Passioné
Messages : 347
Enregistré en : novembre 2015

#25 Message par satinas » sam. 16 déc. 2017 22:02 lien vers la Data-Sheet : Cliquez ici

Au reset, fais toujours 2ou 3 clignotements rapides de led, ça aide pour détecter ce genre de problème.

probléme de valeur envoyées en UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#26 Message par Jérémy » sam. 16 déc. 2017 22:06 lien vers la Data-Sheet : Cliquez ici

satinas a écrit :Source du message Au reset, fais toujours 2ou 3 clignotements rapides de led, ça aide pour détecter ce genre de problème.


Excellente idée !! je n'y avais pensé , car je fais clignoter une led pour voir que le programme tourne, mais pas une sequence differente au démarrage. sauf que j'avais des doutes la dessus genre avec un moteur etc ...

Je rajoute ça tout de suite dans mon code.

PS: Test effectué à 57600 bauds . avec 5ms de pause de partout ca passe sans aucune erreur !

Quelle est le risque d'augmenter la vitesse de transmission ? le nombre d'erreur ?

Re :edit à 115200 BAUDS avec 0ms de pause ( sans pause quoi) pas une seule erreur non plus . Pour le moment ça roule Je file tester mon UART 2 maintenant
C'est en faisant des erreurs, que l'on apprend le mieux !!!

probléme de valeur envoyées en UART
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1127
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#27 Message par paulfjujo » dim. 17 déc. 2017 20:43 lien vers la Data-Sheet : Cliquez ici

Jérémy a écrit :Quelle est le risque d'augmenter la vitesse de transmission ? le nombre d'erreur ?



Le risque sera surtout coté reception , lorsqu'on recoit un flux contigu de donnees , sans aucun delai inter caracteres..
l'interrupt RX consommant un certain nombre de cycle machine pour rentrer et sortir de l'interrupt..
et si il y a d'autres interrupt à traiter (autre UART , Timer ..)
il faudra aussi traiter les eventuelles erreurs OVERRUN et FRAME Error
sinon risque de blocage .

115200 Bds => 1 char toutes les 86µS
1376 cycles machine à disposition pendant le remplissage du registre reception (at FOSC=64MHz 1 cycle en 0,0625µS)

Dans le sens emission, c'est toi qui impose le rythme. No problemo
c'est celui qui est en face qui doit gerer ..
Aides toi, le ciel ou Fantastpic t'aideras

probléme de valeur envoyées en UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#28 Message par Jérémy » dim. 17 déc. 2017 20:49 lien vers la Data-Sheet : Cliquez ici

Ok merci PAul pour ces précisions. je vais essayer de m'en souvenir :sifflotte:
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité