Problema di comunicazione con SIM900

Buongiorno, sto testando un modulo GSM SIM900, da applicare ad Arduino. Lo sto testando con il software Terminal di Laurtec; il problema che ho è che io digito il comando AT e lui dovrebbe rispondermi OK e invece mi risponde AT. Non capisco perchè ogni tanto, durante i tentativi mi risponde OK

Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato

[REGOLAMENTO] Come usare questa sezione del forum

Il comando inviato al modulo deve avere il terminatore di riga New Line, detto anche New Line Feed (LF) incluso.

@FabrizioF : a quanto già scritto da J-M-L, aggiungo che ... essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà (eventuali risposte verrebbero cancellate), quindi ti consiglio di farla al più presto. :wink:

Come indicato da cotestatnt, invii il corretto terminatore di linea? Perché quei moduli sono piuttosto semplici da usare, puoi scaricarti il manuale dei comandi AT e vedere la sintassi di ogni singolo comando :wink:

Guglielmo

Ciao Guglielmo ti spiego:
carico in un array il comando compreso di numero
char pippo[22] = {'A','T','D','+','3,'9','1','2','3','4','5','6','7','8','9','6',';','\r','\n'};
poi tramite qualche riga di programma converto in ascii e trasmetto carattere per carattere
al sim900, avendolo settato in 9600 baud come la mia trasmissione; invio tramite un pic16f690; carico un carattere per volta nel registro TXREG

Questo problema l'ho risolto, grazie. C'è un'impostazione da spuntare e dopo funziona perfettamente TERMINAL

puoi condividere il codice?

PS: puoi scrivere il tuo array di caratteri come cString. Sarà null-terminated, il che semplifica la navigazione.

char pippo[] = "ATD+3912xxxx7896;\r\n";
for(char*ptr = pippo; *ptr; ptr++) Serial.write(*ptr);

una prova per farmi squillare il mio cell (ho cammuffato il numero dopo 39

char pippo[22] = {'A','T','D','+','3','9','1','2','3','4','5','6','7','8','9','0',';','\r','\n'}; //array
 for (n = 0; n < 19; n++)
             {
             c = pippo[n];
             c2 = (int)c;
             Trasmissione(c2);



unsigned char Trasmissione(unsigned char valore) 
     {
     
     //INIZIO TRASMISSIONE
     Routine_Ritardo(100);  //Assestamento linea
     RCIE = 0;  //Disabilitazione interrupt ricezione      
     TXEN = 1;  //Abilitazione trasmissione seriale     
     Routine_Ritardo(50); //Assestamento linea
     
        while (TXIF) {TXREG = valore;}    
     Routine_Ritardo(50); //Assestamento linea          
      
      //FINE TRASMISSIONE  

     //SETTAGGIO RICEZIONE
     TXEN = 0;  //Disabilitazione trasmissione seriale
     Routine_Ritardo(50); //Assestamento linea              
 //    RCIE = 1;  //Abilitazione interrupt ricezione    
     
     return 0;      
     }

potresti semplicemente fare

  while (!TXIF);          // attendere che TXREG sia vuoto
  TXREG = valore;

non funziona. La chiamata non parte

devi ancora attivare la trasmissione seriale.

è sempre stata attivata. Puoi vedere dalla funzione che ho inviato

ho perfino fatto una prova drastica: nel momento della trasmissione tra pic e sim, ho messo il puntale positivo del tester sul pin tx e il negativo a massa, infatti si vede la lancetta oscillare energicamente sui 2/ 4 volt più o meno. Ho paura che dimentico qualcosa come carattere da inviare al sim per far partire la chiamata

puoi descrivere la tua configurazione?

porta pic tx settata come uscita; porta pic rx settata come entrata
BRGH = 1; SPBRG = 51; //Settaggio per velocità di comunicazione (9600 baud rate)
tralascio la ricezione perchè l'ho disabilitata per il momento
collegamento da porta tx pic a porta rxd sim900, in serie con una resistenza da 2k7, una da 15k verso massa
Il resto si può leggere nella funzione postata poco fa

esplorare qualcosa del genere?

void trasmissione(const char* messaggio) {
  RCIE = 0;                   // Disabilitazione interrupt ricezione
  TXEN = 1;                   // Abilitazione trasmissione seriale
  Routine_Ritardo(50);        // Assestamento linea

  for (const char* ptr = messaggio; *ptr; ptr++) {
    while (TXIF == 0);        // Attendere che TXREG sia vuoto
    TXIF = 0;
    TXREG = *ptr;
  }

  //SETTAGGIO RICEZIONE
  TXEN = 0;                 // Disabilitazione trasmissione seriale
}

void setup() {
  ... // config
  trasmissione("ATD+3912xxxx7896;\r\n");
}

void loop() {}

non ho scritto l'ultima funzione perchè non ho capito a cosa serve...comunque non funziona. Ho provato e riprovato col simulatore di mplab il mio programma e vedo che i caratteri convertiti in ascii arrivano ad essere trasmessi; non so se è la stringa giusta perchè non trovo nessuna documentazione di questo sim900, se non un articolo postato su laurtec che però è limitato

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.