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

Problème avec connexion PIC et module bluetooth
Obelix
Membre
Membre
Messages : 10
Enregistré en : juillet 2018

#1 Message par Obelix » sam. 7 juil. 2018 13:06 lien vers la Data-Sheet : Cliquez ici

Bonjour,
J'essaye de faire communiquer en uart mon pic et un module bluetooth RN-41 comme cela a été fait dans ce tutoriel du site:
viewtopic.php?f=15&t=191

Voici mon code:

main:

Code : Tout sélectionner

#pragma config FOSC = INTIO67, BOREN = OFF, WDTEN = OFF, LVP = OFF 

#include <p18f45k20.h>
#include "uart.h"

void main(void) {
    
OSCCON =  0b01011100;// 4Mhz à 4MHz
    
init_uart_blue();
    
init_bluetooth();

    while(
1);

    return;
}
 


mes fonctions uart:

Code : Tout sélectionner

#include "uart.h"

void init_uart_blue()
{
    
TRISC6    0
    
TRISC7    1;
     
    
BRGH 0;        /* low/high baud rate */
    
    // On a du 4Mhz
    
SPBRG 5;      /* set the baud rate 9600 for 4 mhz clock */
    
SYNC 0;        /* asynchronous */
    
SPEN 1;        /* enable serial port pins */
    
CREN 1;        /* enable reception */
    
TX9  0;        /* 8- or 9-bit transmission */
    
RX9  0;        /* 8- or 9-bit reception */
    
TXEN 1;        /* enable the transmitter */
}

void send_uart(char data)
{
    while (!
TXIF);
    
TXREG data;
}



void UART_envoi_chaine(char *mot)
{
  
int i;
  
int c 0;
  while(
!= '\0')
  {
    
send_uart(mot[i]);
    
i++;
  }
    
}


void init_bluetooth(void)
{
    
int i =0;
    
char mode_conf[3] = "$$$";
    
char nom[7] = "SN,TEST";
    
UART_envoi_chaine(mode_conf);
    while(
i<99)
    {
        
i++;
    }
    
UART_envoi_chaine(nom);
    


uart.h

Code : Tout sélectionner

#ifndef UART_HEADER_TEMPLATE_H
#define    UART_HEADER_TEMPLATE_H

#include <xc.h> 

void init_uart_blue();
void send_uart(char data);
void UART_envoi_chaine(char *mot);
void init_bluetooth(void);
#endif 


Pour l'instant j'essaye simplement de changer le nom du module mais je n'y parviens pas :(
Je pense que je m'y prend mal lors de la communication avec le module mais je ne sais pas ce qu'il me manque, Quelqu'un aurait une idée d'ou le problème peut venir ?

Merci d'avance pour votre aide :)

Problème avec connexion PIC et module bluetooth
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 » sam. 7 juil. 2018 16:45 lien vers la Data-Sheet : Cliquez ici

Bonjour et bienvenue Obelix ,

Pour ce genre de programme une cordon de liaison RS232 USB/TTL est fortement recommandé pour voir le dialogue entre les deux devices.

Il me semble que ta déclaration du mot de configuration n'est pas bonne "$$$" . Tu créer un tableau de 3 caractères avec dedans $$$ , donc tu n'as pas de place pour stocker le terminateur de string "\0".

Il faudrait je pense déclarer ainsi . char mode_conf[4] = "$$$\0";

ensuite tu dois attendre une réponse de la part du module Bluetooth !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Problème avec connexion PIC et module bluetooth
Obelix
Membre
Membre
Messages : 10
Enregistré en : juillet 2018

#3 Message par Obelix » sam. 7 juil. 2018 17:14 lien vers la Data-Sheet : Cliquez ici

Jérémy a écrit :Bonjour et bienvenue Obelix !


Merci :)

Oui j'ai commandé un cordon uart USB mais je ne l'aurais pas avant Lundi et j'aurai bien aimé réussir à dialoguer ce week end.
J'ai réjouté comme tu me l'as conseillé une place dans le tableau pour le caractère "\0" mais je ne sais pas par contre ce qu'est sensé renvoyer le module bluetooth une fois la commande effectuée, je n'ai pas réussit non plus à le trouvé dans la documentation.
Pour l'instant j'ai seulement modifier ma fonction d'envoi de cette manière:

Code : Tout sélectionner

void init_bluetooth(void)
{
    
int i =0;
    
char mode_conf[4] = "$$$\0";
    
char nom[7] = "SN,TEST";
    
UART_envoi_chaine(mode_conf);
    while(
i<200)
    {
        
i++;
    }
    
UART_envoi_chaine(nom);
    

Mais le nom n'a toujours pas changé :(

Problème avec connexion PIC et module bluetooth
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » sam. 7 juil. 2018 17:29 lien vers la Data-Sheet : Cliquez ici

je n'ai pas réussit non plus à le trouvé dans la documentation.


Sans la documentation pas besoin d'aller plus loin . Tu n'arriveras a rien !
Il faut savoir ce que dois renvoyé le module , et ce qu'il faut lui envoyé !

Ton lien de PIC n’est pas bon , il renvoie sur une université à Montpellier mais il faut être inscrit . Il te faut la DS de ton PIC , et celle du module BT sans ça tu avances a l'aveugle et surtout dans le mur :mur: :-D

Autre trucs fait clignoter une led pour voir si la configuration de ton OSC est bonne, et cela permet de visualiser l'avancé dans le programme ! surtout avec des commandes bloquantes

ta boucle de temporisation est plutôt bizarre , pourquoi ne pas faire un delay ?
Tu n'as pas de librairie UART ? car la aussi il faut s'assurer que l'UART est bien configurer ( avec le cordon ce sera plus rapide.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Problème avec connexion PIC et module bluetooth
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2586
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#5 Message par paulfjujo » sam. 7 juil. 2018 19:00 lien vers la Data-Sheet : Cliquez ici

bonsoir Obleix

Obelix = Asterix20 ?
tu devrais prendre AssuranceToutRix
ça craint moins pour le PIC ou les interfaces..

Essaie un dialogue avec terminal ...
pour bien saisir le fonctionnement du RN41 ( en lisant sa datasheet et appliquant strictement les commandes prevues
... quand c'est bon, tu peux passer sur ton PIC avec un taux de resussite surement plus grand.
Aide toi, le ciel ou FantasPic t'aidera

Problème avec connexion PIC et module bluetooth
Obelix
Membre
Membre
Messages : 10
Enregistré en : juillet 2018

#6 Message par Obelix » sam. 7 juil. 2018 19:44 lien vers la Data-Sheet : Cliquez ici

Bonjour,

Oui c'est bien moi Asterix20 :-D
Désolé pour leliens mort, voici la datasheet du pic: http://ww1.microchip.com/downloads/en/D ... 01303H.pdf et celle du module bluetooth: http://ww1.microchip.com/downloads/en/D ... -v1.0r.pdf
Les LED sont allumés à la fin du programme donc je ne pense pas que le pic soit bloqué.
Par contre j'ai suivi vos conseils et j'ai téléchargé une application Serial Monitor pour dialogué avec le module, au début la LED du module est allumée, puis lorsque j'envoi la commande $$$ alors elle clignote beaucoup plus vite et je reçois le message CMD, cependant, une fois cela fait, lorsque j'essaye de rentré des commandes comme SN ou R,1 alors rien ne se passe et aucune réponse du module :(

EDIT:Je viens aussi de me rendre compte que lorsque j'envoi $$$ avec mon PIC, les led du module bluetooth ne clignotent pas plus vite comme c'était le cas avec le logiciel, je ne sais pas si c'est lié mais le programme met énormément de temps pour envoyer les trois caractères (plusieurs minutes)

Problème avec connexion PIC et module bluetooth
Obelix
Membre
Membre
Messages : 10
Enregistré en : juillet 2018

#7 Message par Obelix » dim. 8 juil. 2018 11:20 lien vers la Data-Sheet : Cliquez ici

Bonjour,
J'aurais encore une question: étant donné que je n'étais pas sur de mon uart, j'ai téléchargé des bibliothèques déjà prêtes sur internet, mais lorsque j'envoi la commande $$$\r\n alors je ne reçois pas CMD en réponse. A part la masse et le Vdd je n'ai connecté rien d'autre que le Rx et le Tx sur le module bluetooth, ne manquerait il pas quelque chose à brancher?

Problème avec connexion PIC et module bluetooth
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2586
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#8 Message par paulfjujo » dim. 8 juil. 2018 19:39 lien vers la Data-Sheet : Cliquez ici

bonsoir


voici ma config RN41 en aveugle ..
c'est à dire , sans test de retour ...mais avec une bonne tempo entre commande et retour !
à noter l'envoi de la commande e, 3 x '$' et non "$$$"..
et la partie connection (avec test retour!)
J'utilise UART2 pour VOIR le dialogue entre PIC et RN41
ça aide BEAUCOUP !

en face du RN41 , j'ai un phone Android..


Code : Tout sélectionner




void  BT_Configure_en_aveugle
()
 {
    UART2_Write_Text("Configure RN41-EEEC");   // Name of device , last 4 digit adress added to the name
    UART2_Write(13);               // CR
    UART1_Write('$'); UART1_Write('$');UART1_Write('$'); // Enter command mode
    Delay_ms(1000);
    UART1_Write_Text("S-,RN41");   // Name of device , last 4 digit adress added to the name
    UART1_Write(13);               // CR
    Delay_ms(1000); ;
    UART1_Write_Text("SO,18F_");             // Extended status string
    UART1_Write(13);                          // CR
    Delay_ms(1000); 
  
//the device will initiate a connection to the pre-stored remote address immediately upon
   //power up ,If disconnect occurs,the device will attempt to re-connect until successful.
    UART1_Write_Text("SM,0");                 // was 0 Set mode (0 = slave, 1 = master, 2 = trigger, 3 = auto, 4 = DTR, 5 = ANY)
    UART1_Write(13);                          // CR
    Delay_ms(1000);   
    UART1_Write_Text
("SA,0");                 // Authentication (1 to enable, 0 to disable)
    UART1_Write(13);                          // CR
    Delay_ms(1000);   
    UART1_Write_Text
("SU,19.2");              //  UART speed 19200 bauds
    UART1_Write(13);                          // CR
    Delay_ms(1000); 
    UART1_Write_Text
("ST,255");              //  ST,255 sets remote configuration to Allways 
    UART1_Write(13);                          // CR
    Delay_ms(1000);   
    UART1_Write_Text
("SP,1234");              // Security pin code (mikroe)
    UART1_Write(13);                          // CR
    Delay_ms(1000);  
    UART1_Write_Text
("SR,D8952F3FF710");      // Store remote Archos43 address, 12 hex digits, (6 bytes)
    UART1_Write(13);                          // CR
    Delay_ms(1000);  
    UART1_Write_Text
("R,1");              // Reset RN41 pour prendre en compte les modifs
    UART1_Write(13);                          // CR
    Delay_ms(1000); 
 
}
 
 
 void Connect_RN41
()
 {
  //  accede au mode commande
    UART2_Write_Text("CONNECT TO aRCHOS D8952F3FF710");   // connect to Archos  
    UART2_Write(13);                          // CR
     UART1_Write('$');
    UART1_Write('$');
    UART1_Write('$'); // Enter command mode
    Delay_ms(1000);   BT_Get_Response() ;
    UART1_Write_Text("C,D8952F3FF710");   // connect to Archos  
    UART1_Write(13);     
    Delay_ms
(1000);   BT_Get_Response() ; 
   
// wait for 18F_NEW_PAIRING  
    UART1_Write_Text("---");                  // Security pin code (mikroe)
    UART1_Write(13);                          // CR
     Delay_ms(1000); BT_Get_Response() ; 
}


void BT_Get_Response() 
{
  if (DataReady1==1)
   {
   UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle);
    UART2_Write(TAB); 
    UART2_Write_Text
(buffer);
    UART2_Write(CR); 
    buffer
[0]=0;
    DataReady1 = 0;
   }             
 
} 
 
 
 
 
 
.. main program
 
  PMD0
.UART2MD=0;  // USART2 enable
  UART2_init(19200);           // Initialize UART2 module
  RCSTA2.CREN = 1;  
  IPR3
.RC2IP=1;     // high priority level
  IPR3.RC2IP=1;     // high priority level
  PIE3.RC2IE = 0;   //disable UART2 RX interrupt 
  DataReady2 = 0;

   txt=TEXTE;
  UART2_Write(CLS);
  UART2_Write_Text ( "Bluetooth Click RN41-EEEC Configuration 26/04/2014 \r\n");
   UART2_Write_Text("Init UART2 OK");         //  Send message on connection
  UART2_Write(13);              // CR
  
  DataReady1 
= 0;
  RC1IE_bit = 1;                 // Enable UART RX interrupt
  PEIE_bit = 1;                 // Enable Peripheral interrupt
  GIE_bit  = 1;     
  
  BT_Configure_en_aveugle
();
  Connect_RN41();
  
  UART_Set_Active
(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle); 
  UART2_Write_Text
("Bluetooth Click Connected!");   //  Send message on connection
  UART2_Write(13);          // CR
  
 

Aide toi, le ciel ou FantasPic t'aidera

Problème avec connexion PIC et module bluetooth
Obelix
Membre
Membre
Messages : 10
Enregistré en : juillet 2018

#9 Message par Obelix » dim. 8 juil. 2018 22:11 lien vers la Data-Sheet : Cliquez ici

Bonjour,
Je vous remercie, je vous tiens au courant dès que j'ai du nouveau


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités