GL865 AT+CMGS komutuna geç cevap alma

Başlatan sdonmez, 16 Aralık 2016, 09:09:03

sdonmez

Merhaba,

Stm32f4 discovery ile discovery shield kartı üzerinden GSM Click kartı ile çalışıyorum. Gönderdiğim komutlara istediğim yanıtlar dönene kadar bekletme şeklinde bir program yazdım. Aşağıda kodları görebilirsiniz. SMS gönderme adımlarının sonuna kadar sıkıntım yok. Son komut olan AT+CMGS'ye ">" karakteri dönüyor ve mesajı gönderiyorum. Sonrasında "CMGS" içeren bir değer gelmesi lazım. Fakat cevap ya hiç gelmiyor ya da geç geliyor.

Benzer işlemi PIC'de de geçen yıllarda yaptırmıştım. Böyle bir sıkıntım olmamıştı.

Birşeyi mi gözden kaçırıyorum acaba..Nedeni hakkında bilgisi olan var mı?

Teşekkürler

if(!GSMNetworkRegistered)

{

	USART_puts(USART6, "GL865_Pwrmon Check...\r\n");

	while(GPIO_ReadInputDataBit(GL865_Pwrmon))

{

	USART_puts(USART6, "GL865_Pwrmon Out 0\r\n");

	// Low Power Moda Geçmesi Gerekir. Bu durumda 1s-5s arasında bekleme yapılması gerekiyor.

Delay(0xFFFFFF);

Delay(0xFFFFFF);

Delay(0xFFFFFF);

}

	USART_puts(USART6, "GL865_Pwrmon Out 1\r\n");


buffer_temizle();


GSMResponseOK = 0;

	while(GSMResponseOK == 0)

{

	USART_puts(USART6, "\r\n-> AT\r\n");

	USART_puts(USART3, "AT\r");

	GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

}

GSMResponseOK = 0;

	// while(GSMResponseOK == 0)

	// {

	// USART_puts(USART6, "\r\n-> AT+IPR=?\r\n");

	// USART_puts(USART3, "AT+IPR=?\r");

	// GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

	// }

	// GSMResponseOK = 0;

	// while(GSMResponseOK == 0)

	// {

	// USART_puts(USART6, "\r\n-> AT+IPR=38400\r\n");

	// USART_puts(USART3, "AT+IPR=38400\r");

	// GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

	// }

	// GSMResponseOK = 0;

	// while(GSMResponseOK == 0)

	// {

	// USART_puts(USART6, "\r\n-> AT&W0");

	// USART_puts(USART3, "AT&W0\r");

	// GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

	// }

	// GSMResponseOK = 0;

	// while(GSMResponseOK == 0)

	// {

	// USART_puts(USART6, "\r\n-> AT&P0");

	// USART_puts(USART3, "AT&P0\r");

	// GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

	// }

	// GSMResponseOK = 0;

	// while(GSMResponseOK == 0)

	// {

	// USART_puts(USART6, "\r\n-> AT+IPR?\r\n");

	// USART_puts(USART3, "AT+IPR?\r");

	// GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

	// }

GSMResponseOK = 0;

	while(GSMResponseOK == 0)

{

	USART_puts(USART6, "\r\n-> ATE0");

	USART_puts(USART3, "ATE0\r");

	GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

}

GSMResponseOK = 0;

	while(GSMResponseOK == 0)

{

	USART_puts(USART6, "\r\n-> AT&K0");

	USART_puts(USART3, "AT&K0\r");

	GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

}

GSMResponseOK = 0;

	while(GSMResponseOK == 0)

{

	USART_puts(USART6, "\r\n-> AT+CPIN?");

	USART_puts(USART3, "AT+CPIN?\r");

	GSMResponseOK = WaitGSMResponse("RE", 2);

}

GSMResponseOK = 0;

	while(GSMResponseOK == 0)

{

	USART_puts(USART6, "\r\n-> AT+CGSN");

	USART_puts(USART3, "AT+CGSN\r");

	GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

}

GSMResponseOK = 0;

	while(GSMResponseOK == 0)

{

	USART_puts(USART6, "\r\n-> AT+CSQ");

	USART_puts(USART3, "AT+CSQ\r");

	GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

}

GSMResponseOK = 0;

Delay(0xFFFFFF);

	while(GSMResponseOK == 0)

{

	USART_puts(USART6, "\r\n-> AT+CREG?");

	USART_puts(USART3, "AT+CREG?\r");

	GSMResponseOK = WaitGSMResponse("0,1", 3);

Delay(0xFFFF);

}

GSMResponseOK = 0;

	while(GSMResponseOK == 0)

{

	USART_puts(USART6, "\r\n-> AT+CPMS?");

	USART_puts(USART3, "AT+CPMS?\r");

	GSMResponseOK = WaitGSMResponse("OK", 2);

}

GSMNetworkRegistered = 1;

}


	if(GSMNetworkRegistered)

{

Delay(0xFFFFFF);

	USART_puts(USART6, "****** SMS Gonderiliyor\r\n");

Delay(0xFFFFFF);


GSMResponseOK = 0;

	while(GSMResponseOK == 0)

{

	USART_puts(USART6, "\r\n-> AT+CMGF=1");

	USART_puts(USART3, "AT+CMGF=1\r");

	GSMResponseOK = WaitGSMResponse("OK\r\n", 4);

}

GSMResponseOK = 0;


// while(GSMResponseOK == 0)

// {

	USART_puts(USART6, "\r\n-> AT+CMGS=\"0541xxxxxx\"");

	USART_puts(USART3, "AT+CMGS=\"0541xxxxxx\"\r");

	GSMResponseOK = WaitGSMResponse(" ", 1);

// }

GSMResponseOK = 0;

Delay(0xFFFFF);

	USART_puts(USART3, "This is the message\r");

Delay(0xFFF);

USART_SendData(USART3, 0x1A);


	while(GSMResponseOK == 0)

{

	GSMResponseOK = WaitGSMResponse("CMGS", 4);

}

}

MrDarK

Konunun gsm modül ile alakası olmasa gerek, muhtemelen besleme ve anten problemi yaşıyorsun. SMS gönderme işleminde anten üzerinden data şebekeye gidip gelirken, şebeke konumu, anten verimliliği ve besleme şartları devreye girer. Eğer bu parametrelerde sıkıntı var ise zamanlama değişecektir. Bu tarz işlemler için sabit gecikme kullanıp karar veremezsiniz. Eğer böyle bir algoritma koyduysan yanlış yapmışsın.

Dediğim parametreleri test etmek için beslemeni güçlendirip, antenini verimlileştirip konumunu değiştirebilirsin.
Picproje Eğitim Gönüllüleri ~ MrDarK

sdonmez

Teşekkürler.
Anten ve şebeke kaynaklı olacağını sanmıyorum. Sıkıntı besleme voltaji olabilir muhtemelen çünkü Discovery shield kartı üzerindeki dahili 3.3v beslemeyi kullanıyorum. Başka bir yerden beslemek bu kart üstünde mümkün değil.  GL865 in. Min besleme voltajina 3.2v. ayrıca besleme akımı da yetersiz kalıyor olabilir.

MrDarK

Alıntı yapılan: sdonmez - 16 Aralık 2016, 10:29:59
Teşekkürler.
Anten ve şebeke kaynaklı olacağını sanmıyorum. Sıkıntı besleme voltaji olabilir muhtemelen çünkü Discovery shield kartı üzerindeki dahili 3.3v beslemeyi kullanıyorum. Başka bir yerden beslemek bu kart üstünde mümkün değil.  GL865 in. Min besleme voltajina 3.2v. ayrıca besleme akımı da yetersiz kalıyor olabilir.

GL865'in anlık akım ihtiyacı 2A civarında. Discovery üzerindeki regülatör max 300ma veriyordur. Bu şekilde yaptığında gsm ile ilgili data transferlerinde mcu'na reset bile gelebilir. Muhtemelen besleme göçecektir.

Besleme kaynaklarını ayırıp gnd'leri birleştirmeni öneririm.
Picproje Eğitim Gönüllüleri ~ MrDarK

engerex

Besleme olayı biraz saçma. Şu yüzden. Bahsi geçen  DiscoveryShild ve GSM Click F4Disovery kart ile çalışacak şekilde tasarlanmış. Besleme yetmez ise harici besleme girişi konulurdu. Harici giriş yok ise besleme kaynağını değiştirmeyi deneyin.

sdonmez

Alıntı yapılan: engerex - 16 Aralık 2016, 12:18:23
Besleme olayı biraz saçma. Şu yüzden. Bahsi geçen  DiscoveryShild ve GSM Click F4Disovery kart ile çalışacak şekilde tasarlanmış. Besleme yetmez ise harici besleme girişi konulurdu. Harici giriş yok ise besleme kaynağını değiştirmeyi deneyin.

Discovery Shield üzerindeki 3.3V regulatör entegresi 800mA kapasiteli. SMS gönderme anında yetersiz kalıyor olması muhtemel.
Bu kart üzerinde 4 adet microbus yuvası var. Aynı anda bir de GPS çalıştıracağım. Bu durumda acaba nasıl davranır bu kart :)
Mikroe'ye de yazdım, ne diyecekler acaba