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

Ecran tactile autour d'un PIC18F87J50
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3260
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#51 Message par paulfjujo » mar. 19 janv. 2016 12:21

bonjour,


tu bloque la reception UART pendant plus de 100mS !
essaie de deplacer l'autorisation RCIE_bit

Code : Tout sélectionner

if (Flag_data_OK==1)      // Si la drapeau de fin de trame, on affiche le mot stocker dans le buffer
       
{
          
TFT_Set_Brush(1CL_BLACK0LEFT_TO_RIGHTCL_BLACKCL_WHITE);
          
TFT_Rectangle(70,115175,135);
          
TFT_Set_Font(TFT_defaultFontCL_REDFO_HORIZONTAL);
          
TFT_Write_Text("reception"70117);
          
          
TFT_Rectangle(70,140120,150);
          
TFT_Set_Font(TFT_defaultFontCL_YELLOWFO_HORIZONTAL);
          
TFT_Write_Text(Rx_buffer70137);

         
Flag_data_OK 0;            // on rearme notre drapeau
          
Index_Buffer 0;            // on raz l'index
          
RC1IE_bit 1;               // On autoriser l'INT

          
delay_ms(100);

          
TFT_Rectangle(70,115175,135);
          
TFT_Set_Font(TFT_defaultFontCL_REDFO_HORIZONTAL);
          
TFT_Write_Text("Pas de reception"70117);

 
        
}
Aide toi, le ciel ou FantasPic t'aidera

Ecran tactile autour d'un PIC18F87J50
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#52 Message par Jérémy » mar. 19 janv. 2016 13:36

Ne crois pas que je me foute de ce que tu dis Maï, bien au contraire, c'est juste que parfois je ne comprends pas tout, et donc je ne vois pas forcement l’intérêt tout de suite, mais seulement quand j'y suis confronté. J'apprends sur le tas et sur le tard ! :D

j'ai lu ton document qui est excellent, et je pense effectivement que le contrôle de flux est la solution, pour s'assurer une bonne communication sans pertes de données. J'ai relue l'utilisation et l'explication sur RTS et CTS, qui me semble être la bonne façon de faire. L'emetteur demande l'autorisation au récepteur avant d'envoyer.

Par contre concernant ma question, c'est Paulfjujo qui à tout juste, qui a su observer mon erreur de débutant. En effet je faisais une pause de 100ms à la réception pour avoir le temps de voir écrit "réception", quand une donnée était reçue. Donc en déplaçant l'autorisation de l'INT, cela écrasera sans bloquer le buffer le chiffre déjà écrit . Donc tout devrais rentrer dans l'ordre .

Je test ce soir en arrivant à la maison !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran tactile autour d'un PIC18F87J50
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#53 Message par Guest » mar. 19 janv. 2016 14:07

Je reviens sur la gestion des erreurs de UART promis c'est la dernière fois ;)

Voila ce que dit bigonoff sur FERR
source:page 479 de la 2eme partie du 16f877

Code : Tout sélectionner

FERR indique une erreur de trame. Ceci se produit lorsqu’au moment où devrait
apparaître le stop-bit en mode lecture, l’USART voit que la ligne de réception est à « 0 ». Ce
bit est chargé de la même façon que le bit RX9D. Autrement dit, ce n’est pas un flag à effacer,
c’est un bit qui est lié à la donnée qu’on vient de lire. On doit donc lire ce bit, tout comme
RX9D, avant de lire RCREG. Une fois ce dernier lu, le nouveau FERR écrase l’ancien. Si
vous suivez, on a donc un bit FERR vu comme s’il était le 10 ème bit du mot reçu.

a vous de voir

A+

Ecran tactile autour d'un PIC18F87J50
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#54 Message par Jérémy » mar. 19 janv. 2016 20:37

Je reviens sur la gestion des erreurs de UART promis c'est la dernière fois

pas de problème maï, tu peux continuer , c'est toujours instructif, mais je ne vois pas trop pourquoi tu parle de cette erreur, qui n'ai pas au coeur d sujet ( pour le moment lol).

Sinon le problème est réglé , ça fonctionne bien mieux sans pause dans une comm UART . C'était à prévoir lol .
Merci Paulfjujo pour la piste !.

Allez la prochaine étape, simuler l'envoi de 8 octets du transceiver vers le PIC écran( PIC18FJ) . et les affichés à l’écran bien sur .

Il me reste plus qu'a trouver ma routine pour envoyer 8 octets en appuyant sur un bouton :D
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran tactile autour d'un PIC18F87J50
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#55 Message par Jérémy » mar. 19 janv. 2016 21:59

Quand je veux envoyé un octet , je dois bien transformer mon octet en un string ?
ce string comportera 3 chiffres ( car l'octet peut aller de 0 à 255) que je devrai envoyé . il s’arrêtera en arrivant sur mon terminateur ?
Il me faut donc creer une routine qui transforme mon octet ( qui est une variable) et qui l'envoie sur en UART
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran tactile autour d'un PIC18F87J50
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3260
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#56 Message par paulfjujo » mer. 20 janv. 2016 10:56

bonjour,


tu peux utiliser ByteToStr

void ByteToStr(unsigned short input, char *output);
Reçoit en entrée, un octet non signé et le converti en chaine de caracteres.
La chaine de sortie a une longueur de 4 caracteres, incluant le zero terminateur de chaine.
La sortie est justifiée/cadrée à droite avec remplissage de blancs pour les positions inutilisées


Code : Tout sélectionner


char Table
[4];
unsigned char Valeur;


void CRLF()
{
UART1_Write(13);UART1_Write(10);
}

//test
for (Valeur=0;Valeur<255,Valeur++)
byteToStr(Valeur,Table);
UART1_Write_Text(Table);
CRLF(); // optionnel retour à la line
}
Aide toi, le ciel ou FantasPic t'aidera

Ecran tactile autour d'un PIC18F87J50
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#57 Message par Jérémy » mer. 20 janv. 2016 11:24

Bonjour à tous,

Exactement Paulfjujo, j'ai pensé a cette solution aussi hier soir en m'endormant ( oui je pense trop même en dormant :shock: ).

si je décode ton petit code: il m'envoie sur l'UART des chiffres allant de 0 à 255 avec un CRLF a chaque fois. Je verrais donc un compteur défilé de 0 à 255 sur mon écran .

Je m'y colle ce soir , mais il me vient uen question pratique .
Est il préférable de faire 8 boucles qui envoie un octet chacune OU un seul envoi de 8 octets d'un coup a la suite ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran tactile autour d'un PIC18F87J50
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3260
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#58 Message par paulfjujo » mer. 20 janv. 2016 12:10

Est il préférable de faire 8 boucles qui envoie un octet chacune OU un seul envoi de 8 octets d'un coup a la suite ?



c'est toi qui decide du comment !
si tu veux envoyer 8 valeurs d'un coup, il serait preferable de mettre entre elles un delimiteur
pour qu'à l'autre bout , tu puisse les separer à nouveau (si tel est le cas)
A ce moment là , tu peux utiliser un sprintf


Code : Tout sélectionner


char txt
[40];

sprintf(txt,"% 3d;% 3d;% 3d;% 3d;% 3d;% 3d;% 3d;% 3d\r",val1,val2,val3,val4,val5,val6,valda,VallS_Emmanuel); 
UART1_Write_Text
(txt);
 


les 8 valeurs sont alors separées par un point virgule , cadrees à droites avec des blancs, et un terminaleur CR
Aide toi, le ciel ou FantasPic t'aidera

Ecran tactile autour d'un PIC18F87J50
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 53
Enregistré en : août 2015
Localisation : Dans l'est de la France

#59 Message par sylvain54 » mer. 20 janv. 2016 14:02

sprintf(txt,"% 3d;% 3d;% 3d;% 3d;% 3d;% 3d;% 3d;% 3d\r",val1,val2,val3,val4,val5,val6,valda,VallS_Emmanuel);


je vois que l'on ne manque pas d'humour sur le forum !! :mrgreen:

exit

Ecran tactile autour d'un PIC18F87J50
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#60 Message par Jérémy » mer. 20 janv. 2016 15:01

:bravo: , moi j'ai bien aimé , au début j'ai cru à une erreur de copier coller, et j'ai compris un peu après la blague !
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 2 invités