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

Utilisation de CTS et RTS en UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » ven. 26 mai 2017 09:24 lien vers la Data-Sheet : Cliquez ici

Bonjour à tous,

Voila un petit moment que je galère avec ma communication UART entre mon PIC et mon module radio.

Je me dis que la solution peut éventuellement se trouver dans l’utilisation des 2 broches à ma disposition : qui sont RTS et CTS .

Mais j'ai l'impression que je m'y prends mal, car j'ai toujours des bugs ! Je me mélange les pinceaux car mon module radio est un transceiver, donc il reçoit et émet a tour de rôle. j'ai lu pas mal de truc sur le NET, mais toujours dans un seul sens.

Je vais prendre que la partie satellite de mon montage pour être simple .

Le satellite reçoit une commande de la centrale, et doit renvoyer une réponse. Rien de bien compliquée a priori mais pourtant..... :cry:

Voici un schéma vite fait . Tout n'y ai pas, mais c'est pour simplifier et montrer les connections.
Sans titre.jpg


est ce qu'un personne à l'aise peut m'indiquer comment je dois gérer ces deux broches RTS et CTS ?
Ce n'est pas la première fois que je pose une question la dessus, mais ce n'est toujours pas clair pour moi. :oops:
Si vous aviez des petites explications avec ce serait génial !

Voici une partie du code (l'essentiel)
La broche RTS ( RB3) est une entrée
La broche CTS ( RB5) est une sortie

Code : Tout sélectionner

//##############################################################################
//####################### BOUCLE PRINCIPALE     ################################
//##############################################################################
 while(1){

  //----------------     Reception d'une trame     -----------------------------
  if (Data_prete == 1){
      Data_prete = 0;

      Led_R = 1;

      while (RTS == 1){asm nop;}
      CTS = 0;
      
      
//Envoi de la réponse               // Peut etre raccourci a voir !!
      UART_Write(0x02);  // Start
      UART_Write(0x01);  // Commande
      UART_Write(0x03);  // Nbe de DATA Bytes
      UART_Write(0x6A);  // Channel
      UART_Write(0x63);  // destination adresse
      UART_Write(Identifiant);  // payload
      UART_Write(0x09^Identifiant);  // CS
      
      CTS 
= 1;
      delay_ms(10);
      Led_R = 0;

   }
 }
 


Et enfin voici ce que dit la DS du module RAdio :
Sans titre1.jpg


Merci !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Utilisation de CTS et RTS en UART
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1129
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » ven. 26 mai 2017 15:22 lien vers la Data-Sheet : Cliquez ici

bonjour Jeremy

tu as un lien sur la datasheet de l'AMB8626..
et un exemple de datagramme/chronogramme échange TX,RX,CTS,RTS ?

j'ai actuellement 2 x 16F1847 en test liaison via I2C, mais je peux eventuellement faire des test en liaison UART + Pin RTS,CTS ..à la place
La problematique que j'entrevoie est le PIC UART Hardware ne gere pas nativement CTS et RTS , comme doit le faire (vu de dehors) l'AMB8626.
on a coté PIC emission que les flags TXIF, bit TMRT,bit TSR qui sont INTERNE
et RCIF bit interne.
La gestion RTS et CTS doit donc se faire au niveau protocole, avant de penser au niveaux interruptions .
Bref, un bon cas d'etude.. :mur:

J'attends mon Scanquad 50.. ça pourra aider ..
Aides toi, le ciel ou Fantastpic t'aideras

Utilisation de CTS et RTS en UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » ven. 26 mai 2017 15:34 lien vers la Data-Sheet : Cliquez ici

tu as un lien sur la datasheet de l'AMB8626..

Non pas de lien car il faut s'inscrire pour l'avoir . Mais je peux te le fournir ICI :
AMB8626_MA_3_8.pdf


un exemple de datagramme/chronogramme échange TX,RX,CTS,RTS ?

Qu'entends-tu par la ?
Je peux e faire ca, mais il faudrait que je sache ce que tu attends

D’après tes dires , cela parait encore plus compliqué que ce que javais prévu !

Je pensais que quand l'AMB8626 était "disponible" il mettait son RTS à 0 .
Sachant le Module disponible le PIC peut envoyer des données au module pour que celui-ci les envois par radio . Avant de les envoyer par radio il léve son RTS, pour qire qu'il est occupé et donc cela ne sert à rien de lui écrire a nouveau .
Une fois l'envoi par voie radio fini, il remet à 0 son RTS pour dire qu'il à nouveau prêt !

Mais je dois me gourrer, car tu parles de protocole ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Utilisation de CTS et RTS en UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » ven. 26 mai 2017 15:53 lien vers la Data-Sheet : Cliquez ici

Veux tu le programme satellite complet ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Utilisation de CTS et RTS en UART
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1129
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#5 Message par paulfjujo » ven. 26 mai 2017 18:05 lien vers la Data-Sheet : Cliquez ici

protocole .. voir page 4

Veux tu le programme satellite complet ?


pourquoi pas, si je peux "simuler" le comportement de l'AMB dans un des PIC
et essayer le tout avec dans une maquette avec les 2 PIC16F1847 ..


sur le forum Microchip

K42 - New generation of PIC18
UART. No USART any more. Only asynchronous operations. 2-byte read FIFO.
Support for external protocols, such as DMX512 and DALI, which includes
on-the-fly hardware checksum calculation.
It has hardware implementation of flow control with RTS/CTS pins.
Aides toi, le ciel ou Fantastpic t'aideras

Utilisation de CTS et RTS en UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » ven. 26 mai 2017 23:46 lien vers la Data-Sheet : Cliquez ici

J'ai mis en commentaires ce qui n'est pas utile encore ! n'en tiens pas compte .

Voici le programme principale, il parait long mais c'est a cause de la machine d'état de la reception UART .

► Afficher le texte


Et voici la partie configuration du module qui est dans un header .h
► Afficher le texte


Mon module maitre, envoie en permanence une demande de vie de mon satellite . toutes les 500 ms il envoie ceci :

- Le module esclave porte l'identifiant "1".
- Le module maitre l'identifiant 99 ou 0x63
- Le canal est toujours le 0x6A

Code : Tout sélectionner

      //Envoi de la requete au destinataire
      
UART_Write(0x02);          // Start
      
UART_Write(0x01);          // Commande
      
UART_Write(0x03);          // Nbe de DATA Bytes
      
UART_Write(0x6A);          // Channel
      
UART_Write(0x01);          // destination adresse
      
UART_Write(0x01);          // payload
      
UART_Write(0x6A);          // CS 


Une fois le message envoyé le maitre attend soit :
- Un ack de reception . il sait donc que le module es bien allumé
- Un non_ACK, pas e connexion détectée
- ou un time-out pour éviter tout blocage .

Le module satellite reçoit cette demande ( si il est à portée radio ou allumé) et réponds a son tour au maitre, afin que le maitre puisse connaitre le RSSI . Au passage le satellite allume une led.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Utilisation de CTS et RTS en UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#7 Message par Jérémy » sam. 27 mai 2017 08:42 lien vers la Data-Sheet : Cliquez ici

Bonjour ,

Merci ! Paul pour le lien explicatif, c'est celui qui explique le mieux je trouve ! J'ai presque tout compris :sifflotte:

En respectant les indications de ton lien , j'ai fait un programme similaire mais avec une simulation de centrale, car je possède deux platines de tests équipés de PIC 16F1847 avec le module.

Le but finale est celui ci :
La centrale envoie toutes les 150 ms une "demande de vie" à un satellite . Il y en aura 8 maximum au total .
Donc chaque satellite recevra une demande toutes les 8*150 = 1.2secondes . Mais avant ça , il faudrait déjà que j'arrive à obtenir un comportement fiable avec 1 seul satellite !

Je simule donc la centrale avec une platine test, qui envoie une "demande de vie" toutes les 500ms, à 1 seul satellite ( le Numéro 1).
Ici je ne tiens pas encore compte de l'accusé de reception pour être le plus simple possible.
► Afficher le programme principale


► Afficher le Header de configuration


Ça fonctionne presque bien. Disons que ca marchotte ! et je n'arrive pas à trouver la coquille !
Je fais clignoter une LED verte sur le module centrale quand il émet une demande, et rouge sur le recepteur quand il à reçu et envoyé la réponse.
Le module satellite est obligé d'envoyer une réponse à la centrale pour pour que celle ci puisse avoir son RSSI ! Sinon je pourrai me contenter un accusé de reception pour savoir que mon satellite est allumé ou à portée .( Ce serait plus simple et j'ai pense de plus en plus même si le fait de voir le RSSI est un très gros avantages).

Le hic c'est que des fois la led rouge de reception arrête de clignoter au rythme de l’émission, puis reprend ! Elle arrete aléatoirement allant de 1 coup a plus de 30 secondes.

J'ai donc branché un cable USB/TLL, pour regarder ce que reçoit mon PIC pendant ces bug ? et surprise il reçoit bien la commande qui devrait faire clignoter ma led , mais elle clignote pas !.

J'en ai déduis qu'il s'agissait de ma partie reception qui posait problème. Mais ou mon PIC pourrait-il se bloquer pour ne pas faire clignoter ma LED quand l'UART recoit la bonne commande ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Utilisation de CTS et RTS en UART
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#8 Message par Jérémy » ven. 2 juin 2017 19:15 lien vers la Data-Sheet : Cliquez ici

Bonjour ,

Pfff toujours la galère avec mes modules radio !!!! le résultat n'est pas à la hauteur de mes espérances , surtout en termes de fiabilité d’information. Je pense que cela vient de mon programme car ce sont des modules de qualité de professionnel .

Avec 1 envoi toutes les secondes les modules a 3 mètres loin de l'autre avec antenne externe, et des fois j'ai des ratés ! :furieux: :furieux: :furieux: Même en utilisant CTS et RTS.
Je pense que je vais reprendre tout mon code de puis le début ! car franchement je les traumatises pas trop . au final il devra aller beaucoup plus vite .

Peut etre aussi que le Hard est un facteur gravant de dysfonctionnement de l'UART ce n'est pas impossible !
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 2 invités