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

Reception avec 2 UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2112
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » dim. 17 déc. 2017 09:46 lien vers la Data-Sheet : Cliquez ici

Bonjour à tous,

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 iCompteur ;
 
//#################################################################################################
//#########################################      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 ;      // 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 :shock:

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
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Reception avec 2 UART ?
satinas
Passioné
Passioné
Messages : 285
Enregistré en : novembre 2015

#2 Message par satinas » dim. 17 déc. 2017 11:02 lien vers la Data-Sheet : Cliquez ici

Bonjour, et en mettant l'init des uarts après la configuration PPS ?
Il faut lire ça aussi, utiliser UART_SET_ACTIVE(), les joies de MikroC ...
https://forum.mikroe.com/viewtopic.php?f=88&t=70574

Reception avec 2 UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2112
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » dim. 17 déc. 2017 11:59 lien vers la Data-Sheet : Cliquez ici

Merci pour ce lien .

Mon anglais n'est pas folichon, mais j'ai quand même essayé la méthode et effectivement ca fonctionne...

Mais alors cela veut dire que je ne peux pas utiliser les deux UART en même temps . Il faut activer l'un ou l'autre a tour de rôle.
C'est de l'arnaque ça !!! et ça ne m'arrange pas du tout !

Je pensais que le "membre" avait la solution , mais elle ne fonctionne pas chez moi !

C'est quand même un comble de ne pas pouvoir envoyer sur un UART1 et la ligne d'apres envoyer sur un UART2 , et qu'il faille les activer ? quand est il sur la reception sur interrutpion ? si l'un n'est pas activé ?

Pffff :mur: :mur: :mur: :mur:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Reception avec 2 UART ?
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1028
Âge : 67
Enregistré en : juillet 2015
Localisation : 01120
Contact :

#4 Message par paulfjujo » dim. 17 déc. 2017 14:27 lien vers la Data-Sheet : Cliquez ici

Bonjour Jeremy et à tous,


Bizarre, sur un 18F87J50 , je gere les 2 UART ,( 1 pour le GSM ,l'autre pour unGPS) sans avoir à utiliser
UART_Set_Active ! (qui me semble plutot dédié au RS485)
Les 2 UART cohabitent sans problemes... mais il n'y a pas de PPS dans ce PIC..

Sur la datasheet du 18F47K40 , il y a bien 2 EUSART !

Si tu as bien fait l'affectation PPS avant les Init UART
essaie de remettre les sorties TRISC6_bit et TRISB5_bit à 0 , apres les init UART.

J'avais rencontré un probleme silmilaire avec un 16F1847 ( avec PPS)

Sinon, dans le pire des cas , essaie de gerer au moin l'UART2 , via les registredu PIC
sans passer par les fonctions UART_Write MikroC.

Reception avec 2 UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2112
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#5 Message par Jérémy » dim. 17 déc. 2017 14:40 lien vers la Data-Sheet : Cliquez ici

Re,

Voici un code qui fonctionne :

► Afficher le texte


 essaie de remettre les sorties TRISC6_bit et TRISB5_bit à 0 , apres les init UART.

Bonne idée, moi aussi j'avais rencontrer ce problème mais j'ai pas pensé a refaire ça .

Si j'ai compris ce PIC , pour utiliser les broches Tx des UART on est obligé de passer par le PPS car elle n'ont pas de valeur par défaut contrairement au Rx. Ce qui est dommage, sinon j'aurai routé pour en faire en sorte de ne pas avoir a changé!

Sinon, dans le pire des cas , essaie de gerer au moin l UART2 , via les registredu PIC
sans passer par les fonctions UART_Write MikroC.
 
Oui j'ai déjà réfléchis à cette solution, l'UART2 sera moins critique, donc je pourrais modifier son fonctionnement au pire des cas.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Reception avec 2 UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2112
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » dim. 17 déc. 2017 16:14 lien vers la Data-Sheet : Cliquez ici

paulfjujo a écrit :Source du message essaie de remettre les sorties TRISC6_bit et TRISB5_bit à 0 , apres les init UART.

Sans succés !

Je vais donc passer en mode dégradé. et faire avec l'activation de l'UART
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Reception avec 2 UART ?
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1028
Âge : 67
Enregistré en : juillet 2015
Localisation : 01120
Contact :

#7 Message par paulfjujo » dim. 17 déc. 2017 20:34 lien vers la Data-Sheet : Cliquez ici

as tu aussi d'initialiser les UART avec le rajout du terme remappable
et les fonctions idoines qui vont avec..

Code : Tout sélectionner



if 
(UART1_Remappable_Tx_Idle() == 1) { 
  UART1_Remappable_Write
(_data);
 }

Reception avec 2 UART ?
Jérémy
Administrateur du site
Administrateur du site
Messages : 2112
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#8 Message par Jérémy » dim. 17 déc. 2017 20:40 lien vers la Data-Sheet : Cliquez ici

J'ai tellement de test que je ne sais plus !!! Mais oui j'ai rajouter beaucoup de fonction "remappable" .

Je galére sur autre chose maintenant ! avec cette maudite DS !! pfff je ne m'en sors pas . Et je suis vraiment une buse.

J'ai l'impression qu'il m'arrive tout les problème possible à chaque fois
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 1 invité