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

Trf Click, module radio 868 Mhz
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » sam. 29 juil. 2017 18:22 lien vers la Data-Sheet : Cliquez ici

Bonjour à tous,

J'essaye de fabriquer une télécommande avec le module Trf Click composé d'un Telit LE-70.

DS du module Telit LE-70

D'un coté ma plaque EasyPIC avec ce module posé sur le MikroBUS 1 et un pic 18F46K22( DS en haut).
de l'autre en mode nomade un module Telit posé sur mon Clicker2sur le MikroBUS 2 !

La communication en mode transparent fonctionne parfaitement !

J'ai voulu approfondir un peu la chose en essayant d'utiliser le Wake-Up on radio (WOR), afin de gagner en consommation. (montage sur batterie).
Malheureusement ça ne fonctionne pas !

Comme je n'ai rien à la maison pour tester le courant j'ai volontairement exagéré les temps de pause et diminuer les temps de réveil , pour ne pas recevoir de message quand j'appuie sur mon BP. Si je reçois pas mes messages c'est que le module dort ! le HIC c'est que je reçois toujours mes messages ! :mur: exit

pour simplifier la chose, ma platine clicker2 possède 2 BP, quand j’appuie sur l'un d'eux, cela envoi un message au récepteur.
Ma platine EasyPIC reçoit le message et le traite, avec un affichage sur le GLCD. Plus pratique que le LCD pour debugger car on peu mettre plus d'infos !

D’après la DS (page 26 low power config), il faut paramétrer le registre S240.
==> - Le bit 2 pour activer le WOR
==> - le bit 0 pour sortir d'un sommeil manuellement ( préconisé au début )
==> - Les bits 3 et 4 doivent etre active aussi apparemment (page 28, le deuxieme WARNING :!!: )

Donc une valeur de 29, pour le registre d'apres ce que je crois comprendre!

Je vérifie mon paramétrage avec mon Cable USB/UART et la commande AT/S( affiche tous les registre et leurs valeurs. Tout est nickel les paramètres sont bien pris en compte.

Voici mon code du coté récepteur ( plaque EasyPIC) :

Code : Tout sélectionner

/*

 PIC18F46K22 :  http://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf

 */

// connexion du  module GLCD
char GLCD_DataPort at PORTD;              // Tous le PORT D

sbit GLCD_CS1 at LATB0_bit;
sbit GLCD_CS2 at LATB1_bit;
sbit GLCD_RS  at LATB2_bit;
sbit GLCD_RW  at LATB3_bit;
sbit GLCD_EN  at LATB4_bit;
sbit GLCD_RST at LATB5_bit;

sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction  at TRISB2_bit;
sbit GLCD_RW_Direction  at TRISB3_bit;
sbit GLCD_EN_Direction  at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// Fin


//-----------------------------------     VARIABLES et CONSTANTES      ------------------------------------------------
char i, Temp, Index_Buff, Buffer_plein;
char Buffer[30];

//---------------------------------------        PROTOTYPE          ---------------------------------------------------
void Initialisation();

//---------------------------------------------------------------------------------------------------------------------
void interrupt() {

  if ( RC1IF_bit == 1 ) {  // reception UART detectée

    Temp = UART1_Read();              // On stock temporairement la variable recue

    if ( (Temp == '\r') || (Index_Buff >= 30) ){ // Verifie fin de message(Carriage Return) ou Buffer plein

       Buffer[Index_Buff] = 0;        // On rajoute un Terminateur de string
       Index_Buff = 0;                // RAZ du compteur de l'index
       Buffer_plein = 1;              // Singale que le Buffer est rempli et qu'on peut le lire
     }
    else{
       Buffer[Index_Buff] = Temp;    // On remplit le Buffer avec le caractere recu
       Index_Buff++ ;                // On incremente l'index
     }
  }
}


/*#####################################################################################################################
#####################################     PROGRAMME PRINCIPAL     #####################################################
#####################################################################################################################*/
void main() {

  ANSELA = ANSELB = ANSELC = ANSELD = ANSELE = 1;   // Tous les PORT en digitaux
  TRISA = 0b00000111;                               // RA0, RA1 et RA2 en entrée pour BP

  Glcd_Init();                                      // Initialisation du GLCD
  Glcd_Set_Font(FontSystem5x7_v2, 5, 7, 32);        // Charge la police

  UART1_Init(19200);                                // Initialise  l'UART
  Delay_ms(100);                                    // Pause de stabilisation

//------------------- Réglages INTERUTPUIONS
  RC1IE_bit = 1;                                    // Active les interruption sur reception UART
  RC1IF_bit = 0;                                    // On RAZ le drapeau
  PEIE_bit  = 1;                                    // Active les Interruption périphérique
  GIE_bit   = 1;                                    // Active les interruptinos globales
  
  Glcd_Fill
(0x00);                                  // Efface l'écran
  
  for 
(i=0;i<30;i++){                               // RAZ le buffer
      Buffer[i] = 0;
   }
 
  Index_Buff 
= Buffer_plein = 0 ;                  // RAZ des variables
  
  Initialisation
();

/*#####################################################################################################################
#######################################     BOUCLE INFINIE      #######################################################
#####################################################################################################################*/
  while(1) {

    if (PORTA.B2 == 1) {        // Réveil du module
       delay_ms(20);
       if (PORTA.B2 == 1) {
          Glcd_Write_Text("appui RA2", 0, 0, 1);
          delay_ms(100);
          Glcd_Write_Text("              ", 0, 0, 1);
          while (PORTA.B2 == 1);
       }
    }

    if (Buffer_plein == 1){                             // Si le Buffer est remplit
       Glcd_Write_Text("                  ", 1, 3, 1);  // J'efface la ligne du buffer
       Glcd_Write_Text(Buffer, 1, 3, 1);                // J'affiche le buffer
       Buffer_plein = 0;                                // Je raz le flag
      
       if 
( (Buffer[0]=='D') && (Buffer[1]=='r') && (Buffer[2]=='o') && (Buffer[3]=='i') && (Buffer[4]=='t') ){
          Glcd_Write_Text("             L_Droit", 0, 6, 1);
        }
       else if ( (Buffer[0]=='G') && (Buffer[1]=='a') && (Buffer[2]=='u') && (Buffer[3]=='c') && (Buffer[4]=='h') ){
            Glcd_Write_Text("L_Gauche            ", 0, 6, 1);
        }
      
    
}

  }

}

/*#####################################################################################################################
####################################     PROGRAMME SECONDAIRE     #####################################################
#####################################################################################################################*/
void attente_OK(){
  char Compteur=0;

  while(1){
    Compteur++;
    delay_ms(1);
    if ( ((Buffer_plein==1)&&(Buffer[0]=='O')&&(Buffer[1]=='K'))|| (Compteur>50)  ) {
         Buffer_plein = 0;
         break;
      }
   }
}

//-------------------------------      INITIALISATION DU MODULE    ----------------------------------------------------
void Initialisation(){


  UART1_Write_text("+++");    // Passage en commande mode
  attente_OK ();

  UART1_Write_text("ATS240=29\r");  // WOR activé, stand by mode activé
  attente_OK ();

  UART1_Write_text("ATS243=1900\r");  // temps de sleep
  attente_OK ();
  
  UART1_Write_text
("ATS245=10\r");  // temps d'écoute
  attente_OK ();

  UART1_Write_text("ATS247=10\r");  // temps le temps de retour en veille aprés un CR
  attente_OK ();
  
  UART1_Write_text
("ATO\r");  // passage en mode communication
  attente_OK ();

}



Le but étant de ne PAS recevoir les messages signifiant que module dort !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Trf Click, module radio 868 Mhz
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#2 Message par Jérémy » dim. 30 juil. 2017 09:33 lien vers la Data-Sheet : Cliquez ici

Je suis passé en mode "adressé sécurisé" ( adressed secured mode).

Tout fonctionne bien . je donne des Identifiants un numéro de réseau . la détection est nickel .
J'essaye d'endormir mon module .... impossible.

Il dort 2 secondes et se reveil 10ms. j'envoie un message qui prend quelques millisecondes seulement. DOnc j'ai peu de chance de le recevoir .... surtout en appuyant 10 fois de suite .

Et ben si je le reçois 10 fois de suite !!!! forcement ça fonctionne pas. J'ai lu environ 10 fois la DS ; Je l'ai traduite (merci google) paragraphe par paragraphe.....

Je suis presque sur d'avoir bon !
Sur le net je ne trouve rien a propos de ça !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Trf Click, module radio 868 Mhz
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » dim. 30 juil. 2017 17:06 lien vers la Data-Sheet : Cliquez ici

Je ne comprends vraiment pas !!!! Mode pétage de câble !!!!
ce qui me saoule le plus c'est un truc devrait être simple et que ca vire au cauchemar !!!

je vais essayé de demander sur futura pour voir, il y pas mal de crack en radio !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Trf Click, module radio 868 Mhz
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#4 Message par paulfjujo » lun. 31 juil. 2017 15:06 lien vers la Data-Sheet : Cliquez ici

bonjour Jeremy,



Au vu de ton init du module,
As-tu essayé de modifier l'ordre d'envoi des commandes
par exemple d' émettre en dernier la commande WOR ...

comme on le ferait pour mettre un PIC en sommeil
La commande Sleep en dernier .
Aide toi, le ciel ou FantasPic t'aidera

Trf Click, module radio 868 Mhz
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#5 Message par Jérémy » lun. 31 juil. 2017 16:24 lien vers la Data-Sheet : Cliquez ici

Bonjour PAul,

Merci d'avoir prit le temps de regarder :

Au vu de ton init du module,
As-tu essayé de modifier l'ordre d'envoi des commandes
par exemple d' émettre en dernier la commande WOR ...

Non je n'ai pas essayé. C'est une bonne idée ! Je suis pret a tout tenter !

Merci
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Trf Click, module radio 868 Mhz
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » mer. 2 août 2017 10:45 lien vers la Data-Sheet : Cliquez ici

Bonjour,

Test négatif PAul !

Mais agréablement surpris car J'ai eu une réponse de Telit ce matin.

Dear Jeremy,
wake up on radio works with HW low power enabled.
So, you have to set sleep module in HW low power also. (put stand by pin to Vcc)
After it, the sender must send radio frame with very long preamble (ATS204 register) in order to increase the probability to detect the sleeping module
Refer to page 27 of Star network user guide for more details


Je comprends qu'il faille que je passe mon module en Stand by avec la broche hardware. C'est plutôt bon signe ! je vous tiendrais au courant de mes tests !
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 49 invités