Je rencontre quelques difficulté à effectué un "REPORT" de transmission UART !
Je m'explique :
N'arrivant pas à piloter proprement mon module GSM2 ( encore lui, croyez moi ça me saoule aussi) afin de faire un tuto explicite ,
j'ai décidé de relier mon câble USB/TTL au PIC par la liaison UART2 et mon PIC au module GSM2-click par l'UART1 .
PC <-- câble --> PIC (UART2) <--> PIC (UART1) --> Module GSM2-Click
Comme j'aime bien me tracasser l'esprit, je souhaite également affiché le tout sur un LCD !
En littérale avec un exemple cela donne !
Depuis mon logiciel hyper terminal, j'envoie une commande simple disons "AT" ( peut pas faire plus simple
Je souhaite donc affiché cette commande sur une ligne du LCD .
Donc mon UART2 va recevoir cette commande via une INTerruption RX, puis mon UART1 va envoyer cette même commande sur le TX UART1 pour aller au module.
Le module doit répondre "OK" ( en théorie) . donc l'UART1 va recevoir cette réponse par INTerruption sur le RX, et l'UART 2 doit envoyer cette réponse à mon PC par un envoie de l'UART2 via le câble. et la réponse doit s’afficher sur le LCD bien entendu !
Je n'arrive pas a obtenir ce comportement, je n'en suis pas trés loin mais quelque chose doit m’échapper, j'ai tellement le nez dedans que je ne trouve pas !
PS: pas de baud-rate nécessaire la valeur est déjà enregistré dans le module !
Re-PS: je joue des bip pour me faciliter la tache , c'est mioeux que des LEDs ! Cela ne gène en rien l'UART
Voila ou j'en suis :
Code : Tout sélectionner
/*
Tutoriel du module GSM2 pour : http://www.FantasPIC.fr
lien command AT du module M95 : http://www.quectel.com/UploadImage/Downlad/M95_AT_Commands_Manual_V1.2.pdf
Data-Sheet du PIC 18F46K22 : http://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf
version du 16/02/17
*/
#define PWRKEY RE1_bit
// Connexionsdu LCD
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
// Variables
short ReponseID = -1;
char Valeur=0;
char tmp2, Index_buffer2, F_buffer2_plein ;
char tmp, Index_buffer1, F_buffer1_plein ;
int i;
char Buffer1[50]={0};
char Buffer2[50]={0};
//##############################################################################
// Lecture des données dans le buffer UART par INT
void interrupt(){
if (RC1IF_bit == 1) { // Si INT UART détecté
tmp = UART1_Read(); // On récupere et stock la donnée
if (tmp == 13){
Buffer1[Index_buffer2] = tmp;
Index_buffer1 = 0;
F_buffer1_plein = 1;
}
else {
Buffer1[Index_buffer1] = tmp;
Index_buffer1++;
}
}
if (RC2IF_bit == 1) { // Si INT UART détecté
tmp2 = UART2_Read(); // On récupere et stock la donnée
if (tmp2 == 13){
// Buffer2[Index_buffer2] = tmp;
Buffer2[Index_buffer2] = 0;
Index_buffer2 = 0;
F_buffer2_plein = 1;
}
else {
Buffer2[Index_buffer2] = tmp2;
Index_buffer2++;
}
}
}
//##############################################################################
//########################### MAIN #####################################
//##############################################################################
void main(){
ANSELA = ANSELB = ANSELC = ANSELD = ANSELE = 0; // Tous en numerique
TRISA = TRISB = TRISC = TRISD = TRISE = 0; // Tous en sortie
LATA = LATB = LATC = LATD = LATE = 0; // RAZ des sorties
//------------------------------------------------------------------------------
// Réglages de l'interruption sur Reception UART
GIE_bit = 1; // Active toutesl es INT
PEIE_bit = 1; // Active les INT peripherique
RC1IE_bit = 1; // Active les Interruptions sur Rx UART 1
RC2IE_bit = 1; // Active les Interruptions sur Rx UART 2
//------------------------------------------------------------------------------
UART1_Init(9600); // Initialisation de l'UART1 à 9600 bauds
UART2_Init(9600); // Initialisation de l'UART2 à 9600 bauds
Sound_Init (&PORTC, 2 );
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
delay_ms(200);
PWRKEY = 0; // Mise à zéro
Delay_ms(2000); // Maintenir à 0 pendant plus de 2S
PWRKEY = 1; // Allume le module
Delay_ms(2000); // Le temps de congiguration code pin etc ..
PWRKEY = 0;
for (i=0;i<3;i++){
Sound_Play(1000, 200);
Delay_ms(100);
}
F_buffer1_plein = 0;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"Rx:");
Lcd_Out(2,1,"Tx:");
//##############################################################################
//####################### BOUCLE PRINCIPALE ################################
//##############################################################################
while(1) {
if (F_buffer2_plein == 1){
F_buffer2_plein = 0;
Lcd_Out(2,4," "); // j'efface la deuxieme ligne
delay_ms(50);
Lcd_Out(2,4,Buffer2);
UART1_Write_Text(Buffer2);
UART1_Write(13);
}
if (F_buffer1_plein == 1){
F_buffer1_plein = 0;
Lcd_Out(1,4," "); // j'efface la premiere ligne
delay_ms(50);
Lcd_Out(1,4,Buffer1);
UART2_Write_Text(Buffer1);
UART1_Write(13);
}
}
} Si vous avez une meilleure méthode ou idée , je suis preneur !
Merci de m'avoir lu !


Par contre je mets énormément de volonté et d’acharnement dans ce que j'entreprends !