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" ?


