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 ---
- 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 ---
Modérateur : Jérémy
Ecran tactile autour d'un PIC18F87J50
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
tu bloque la reception UART pendant plus de 100mS !
essaie de deplacer l'autorisation RCIE_bit
}
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(1, CL_BLACK, 0, LEFT_TO_RIGHT, CL_BLACK, CL_WHITE);
TFT_Rectangle(70,115, 175,135);
TFT_Set_Font(TFT_defaultFont, CL_RED, FO_HORIZONTAL);
TFT_Write_Text("reception", 70, 117);
TFT_Rectangle(70,140, 120,150);
TFT_Set_Font(TFT_defaultFont, CL_YELLOW, FO_HORIZONTAL);
TFT_Write_Text(Rx_buffer, 70, 137);
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,115, 175,135);
TFT_Set_Font(TFT_defaultFont, CL_RED, FO_HORIZONTAL);
TFT_Write_Text("Pas de reception", 70, 117);
Ecran tactile autour d'un PIC18F87J50
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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 !
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 !
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 !
Ecran tactile autour d'un PIC18F87J50
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
a vous de voir
A+
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- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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
Ecran tactile autour d'un PIC18F87J50
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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
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
Ecran tactile autour d'un PIC18F87J50
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
tu peux utiliser ByteToStr
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
}
Ecran tactile autour d'un PIC18F87J50
-
Jérémy

Administrateur du site- Messages : 2750
- Âge : 46
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
Exactement Paulfjujo, j'ai pensé a cette solution aussi hier soir en m'endormant ( oui je pense trop même en dormant
).
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 ?
Exactement Paulfjujo, j'ai pensé a cette solution aussi hier soir en m'endormant ( oui je pense trop même en dormant
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 ?
Ecran tactile autour d'un PIC18F87J50
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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
Ecran tactile autour d'un PIC18F87J50
Ecran tactile autour d'un PIC18F87J50
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités



