Je suis toujours dans les tests afin de peaufiner mes configurations.
Individuellement les 2 UARTS fonctionnent très bien en émission et en réception à 115200bauds . C'est déjà une bonne chose.
Dnas le programme final le deux UART devront cohabiter ensemble.
l'UART1 le prioritaire se chargera d'envoyer les données au module radio . ( minimum 10 fois par seconde, j’aimerais 20 fois par seconde)
l'UART 2 lui recevra les infos d'un autre PIC (mon IHM) de temps en temps, genre toutes les 500ms se sera bien ou plus ce n'est pas critique.
Que se passe-t-il se matin ??? je vais essayer d'être précis que c'est chaud a comprendre
J'ai des incompréhension sur le fonctionnement des UARTS en même temps.
Voici un programme qui fonctionne bien .
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 i, Compteur ;
//#################################################################################################
//######################################### MAIN ########################################
//#################################################################################################
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 liaison 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
ANSELC = 0x01; // RC0 en analogique
ANSELD = 0xA0; // RD5 et RD7 en analogique
ANSELB=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 ----------------------------------
UART1_Init(9600);
//UART2_Init(9600);
//------------------- 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 la séquence de déverrouillage
PPSLOCK = 0xAA; // On envoie la séquence de déverrouillage
PPSLOCK.PPSLOCKED = 0x00; // On deverouille les PPS
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
//------------------------------ INTERUPTION -------------------------------------
//----- GLOBAL
INTCON.GIE = 1; // On active toutes les INT
INTCON.PEIE = 1 ; // On active les INT périphériques
//----- UART1
RC1IE_bit = 1; // Active les Interruptions sur Rx UART 1
RC1IF_bit = 0; // RAZ flag
//----- UART2
RC2IE_bit = 1; // Active les Interruptions sur Rx UART 2
RC2IF_bit = 0; // RAZ flag
for (i=0;i<=7;i++){ // séquence de clignotement au demarrage (3 fois)
LATC.B2 = ~PORTC.B2 ;
delay_ms(100);
}
while(1){
delay_ms (500);
LATC.B1 = ~PORTC.B1 ; // Clignotement d'une led pour voir le programme tourner
UART1_Write_Text("1 ");
}
} J'initialise seulement UART1.
Je peux voir sur realterm la réception de mes "1 " qui s'affichent nickel sur la broche RC6 du PIC.
ENsuite le même code mais j'inialise aussi UART2 jsute apres UART1 comme ceci :
Code : Tout sélectionner
// ----------------- Initialisation UART ----------------------------------
UART1_Init(9600);
UART2_Init(9600); Rien de plus .
Je ne recois plus "1 " sur RC6 ????? déjà la c'est bizarre.
Quand je branche Mon cordon sur le broche RB5 qui correspond a TX2 , je vois mes "1 " apparaitre
Je commence déjà par ce problème ( car il y en a d'autre peut etre lié) . Pourquoi il y a du remmapage ?
L'initialisation se fait et ensuite je remmapage mes UARTs normalement ca devrait prit en compte ? Comment se fait il que Tx1 se retrouve sur Tx2

