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
probléme de valeur envoyées en UART
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
C'est parti pour de la pure programmation ...... enfin presque, d'abord je dois m'assurer que tout fonctionne bien afin de ne pas avoir de surprise par la suite.
Le plus dur à mon avis sera de paramétrer mes 2 UARTs .
le premier me servira à envoyer des infos au module radio. pour que lui même les envoies au robot. Et le second pour le dialogue entre les deux pics ( écran tactile).
dans un premier temps, le premier UART . J'ai faillis y arriver du premier coup, mais à ma surprise le comportement est bizarre!
Voici le programme très simple.
Une boucle qui fais clignoter une LED pour voir que mon programme tourne à la bonne cadence.
Et un compteur qui compte de 48 à 58 . après 58 il repasse à 48 et fais un saut de ligne
J'affiche le compteur en ASCII donc les valeurs de 48 à 57 corresponde aux chiffres de 0 à 9 .
j'affiche cela sur l’écran de l'ordi avec Realterm et un câble USB-RS232 TTL3V3
Et bien bizarrement le compteur compte de 0 à 3 puis retour à 0.....
Je n'arrive pas à comprendre pourquoi il retourne apres le "3" ?
C'est parti pour de la pure programmation ...... enfin presque, d'abord je dois m'assurer que tout fonctionne bien afin de ne pas avoir de surprise par la suite.
Le plus dur à mon avis sera de paramétrer mes 2 UARTs .
le premier me servira à envoyer des infos au module radio. pour que lui même les envoies au robot. Et le second pour le dialogue entre les deux pics ( écran tactile).
dans un premier temps, le premier UART . J'ai faillis y arriver du premier coup, mais à ma surprise le comportement est bizarre!
Voici le programme très simple.
Une boucle qui fais clignoter une LED pour voir que mon programme tourne à la bonne cadence.
Et un compteur qui compte de 48 à 58 . après 58 il repasse à 48 et fais un saut de ligne
J'affiche le compteur en ASCII donc les valeurs de 48 à 57 corresponde aux chiffres de 0 à 9 .
j'affiche cela sur l’écran de l'ordi avec Realterm et un câble USB-RS232 TTL3V3
Code : Tout sélectionner
// PROGRAMME pour la télécommande-radio du robot
// DS du PIC : http://ww1.microchip.com/downloads/en/DeviceDoc/40001844D.pdf
//################################## Variables ##############################################
char Compteur ;
void main() {
// RAZ des broches
LATA = LATB = LATC = LATD = LATE = 0;
// registres des I/O
TRISA = 0xEF; // RA4 en sortie pour liaison
TRISB = 0xDF; // RB5 en sortie Pour UART-TX2
TRISC = 0xA1; // En sortie RC1 et RC2 pour led test, RC3 et RC4 pour laiison AMB et RC6 pour Tx1
TRISD = 0xF8; // En sortie RC0, RC1 et RC2 pour liaison AMB
TRISE = 0xff; // Tout en entrée
// registre analogiques
ANSELA = 0x80; // RA7 en analogique
ANSELB = 0x00;
ANSELC = 0x01; // RC0 en analogique
ANSELD = 0xA0; // RD5 et RD7 en analogique
ANSELE = 0x00;
// Registre des Pull-UP
WPUA = 0x0F; // RA0, RA1, RA2 et RA3 en Pull UP
WPUB = 0x0F; // RB0, RB1, RB2 et RB3 en Pull UP
WPUC = WPUD = WPUE =0x00;
// ----------------- Initialisation UART 1 ----------------------------------
UART1_Init(57600);
//------------------- PPS --------------------------------------------------
// Séquence de déverouillage des PPS page 218 de la DS
INTCON.GIE = 0; // On désactive les INT
PPSLOCK = 0x55; // On envoie une valeur
PPSLOCK = 0xAA; // On envoie une valeur
PPSLOCK.PPSLOCKED = 0x00; // On deverouille les PPS
//RX1PPSbits.RXPPS = 0x17;
//RX1PPS = 0x17 ; //RC7->EUSART1:RX1;
RC6PPS = 0x09; //RC6->EUSART1:TX1;
RB5PPS = 0x0B; //RB5->EUSART2:TX2;
RX2PPS = 0x0F; //RB7->EUSART2:RX2;
PPSLOCK = 0x55;
PPSLOCK = 0xAA;
PPSLOCK.PPSLOCKED = 0x01; // On verouille les PPS
INTCON.GIE = 1; // On réactive les INT
Compteur = 48 ;
while(1){
delay_ms (500);
LATC.B2 = ~PORTC.B2 ; // Clignotement d'une led pour voir le programme tourner
UART1_Write_Text (&Compteur);
Compteur++;
if ( Compteur >= 58){
Compteur = 48;
UART1_Write(10);
UART1_Write(13);
}
}
}
Et bien bizarrement le compteur compte de 0 à 3 puis retour à 0.....
Je n'arrive pas à comprendre pourquoi il retourne apres le "3" ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
probléme de valeur envoyées en UART
probléme de valeur envoyées en UART
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
satinas a écrit :Source du message Tu en penses quoi de ça ?
.
J'ai jamais entièrement compris les pointeurs, pour être honnête j'ai lu plein de truc dessus . Je pense avoir compris l'idée. Un pointeur contient l'adresse d'une variable, mais je ne comprends pas l’intérêt dans certains cas.
Pour ce cas la j'ai essayé comme ça, mais j'ai fais plein d'autre tests, avec des choses plus standard. Le résultat est toujours le même, j'ai 4 valeurs qui se suivent, puis pouf ca repart au début .
probléme de valeur envoyées en UART
On a déjà parlé des chaînes de caractères, cette fonction attend une chaîne et tu ne lui passes pas une chaîne. Si tu n'envoie pas une chaîne (qui doit être zéro terminated), alors il faut utiliser UART1_Write() et envoyer caractère par caractère.
C'est peut être pas ça le problème, mais commençons doucement :)
C'est peut être pas ça le problème, mais commençons doucement :)
probléme de valeur envoyées en UART
probléme de valeur envoyées en UART
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Je pense que j'ai un problème de timing sur l'envoie des données.
Voici une boucle et son résultat :
Même code avec une pause de 100ms
Le résultat:
Même code avec une pause de 500 ms :
L'nevoi est different suivant le timing !
Voici une boucle et son résultat :
Code : Tout sélectionner
while(1){
delay_ms (10);
LATC.B2 = ~PORTC.B2 ; // Clignotement d'une led pour voir le programme tourner
UART1_Write (Compteur);
Compteur++;
if ( Compteur >= 58){
Compteur = 48;
UART1_Write(10);
UART1_Write(13);
}
}
Même code avec une pause de 100ms
Code : Tout sélectionner
while(1){
delay_ms (100);
LATC.B2 = ~PORTC.B2 ; // Clignotement d'une led pour voir le programme tourner
UART1_Write (Compteur);
Compteur++;
if ( Compteur >= 58){
Compteur = 48;
UART1_Write(10);
UART1_Write(13);
}
}
Le résultat:
Même code avec une pause de 500 ms :
Code : Tout sélectionner
while(1){
delay_ms (500);
LATC.B2 = ~PORTC.B2 ; // Clignotement d'une led pour voir le programme tourner
UART1_Write (Compteur);
Compteur++;
if ( Compteur >= 58){
Compteur = 48;
UART1_Write(10);
UART1_Write(13);
}
}
L'nevoi est different suivant le timing !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
probléme de valeur envoyées en UART
probléme de valeur envoyées en UART
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Re,
à 9600 ou a 2400 même résultats.
J'ai fait à l’expérience ! j'ai déjà utilisé L'UART à 57600 bauds sans problème sur des PICS plus petit . Je me dis qu'avec celui la c'est le doigts dans le nez .
Le compilateur m'indique des warning quand la précision au dessus de 2% pour la com UART . A 64Mhz aucun warning !
à 9600 ou a 2400 même résultats.
J'ai fait à l’expérience ! j'ai déjà utilisé L'UART à 57600 bauds sans problème sur des PICS plus petit . Je me dis qu'avec celui la c'est le doigts dans le nez .
Le compilateur m'indique des warning quand la précision au dessus de 2% pour la com UART . A 64Mhz aucun warning !
probléme de valeur envoyées en UART
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 39 invités