modem komunikace

P

puneetnepsam

Guest
-------------------------------------------------- ------------------------------

Ahoj všem,

Chci si vyzkoušet, zda můj modem reaguje na AT příkazy, nebo ne?

Předpokládáme-li i poslat příkaz "v crsm =?"
zašle mi odpověď "OK"

modem je připojen k PIC24F přes UART rozhraní ..

může mi někdo říct, jak postupovat dále ...

měla jsem to poslat AT příkazů od kódu

pokud i psát
BUF [] = "v cmgs =?"

a odeslat ji
sendUART (BUF );

a pokud mám
buf1 [] = receiveUART ();

bude mít i odezvu v buf1 [] pufru

Díky
Sexin

 
Hai puneetnepsam
Prosím zabránilo opakovaným vysíláním stejné téma v různých sekcích.Hodně štěstí

 
pranam,,,

skutečně toto téma patří do obou komunit ... y vyslaných dat
je v obou ...

 
puneetnepsam
Pokud dostanete odpověď, budete si ji kdekoliv.Hodně štěstí

 
puneetnepsam napsal:

-------------------------------------------------- ------------------------------

[...]

a pokud mám

buf1 [] = receiveUART ();bude mít i odezvu v buf1 [] pufru

[...]

Sexin
 
hi Arthur

Jsem devoloped tento kód ...... prosím náhradní čas a projít to ........#
include "p24fj256gb110.h"
#
include "serial.h"

int main ()
(
unsigned char uIdx = 0;
const unsigned char send_AT_Cmd [] = "AT CSIM =?"
unsigned char rec_cmd [20];

init_uart ();

pro (uIdx = 0; send_AT_Cmd [uIdx]! = '\ 0'; uIdx ) / / poslat AT příkazů
(
SendUSART (send_AT_Cmd [uIdx]);
)

uIdx = 0;
pro (uIdx = 0; uIdx <20; uIdx )
while (1)
(
rec_cmd [uIdx] = RecUSART ();
if (! rec_cmd [uIdx])
break;
uIdx ;
)
/ / odeslat AT příkazů
return 0;
)

am i se budou moci dostávat na odpověď od modemu v registru rec_cmd .......

kruhového bufferu portu znamená?
jaké změny, co musím udělat

 
Za prvé, kruhového bufferu je e velmi hezký konstrukt, který implementuje nárazník bez konce.Je ideální pro situace, jako je ta vaše, chcete-li dočasné ukládání zpráv neznámého, svévolné velikosti.
Dvojitým-port, myslím nárazník, které můžete nezávisle přístup ze dvou různých stran (tj., že máte "číst" ukazatel na klienta-strana, a samostatný "write" ukazatel na server-side).
Více zde:

http://en.wikipedia.org/wiki/Circular_buffer

Nemyslím si, že váš kód bude fungovat.
Na straně vysílače, myslím,
že budete potřebovat přepravu-return (CR LF) na konci AT řetězec.Je-li tomu tak, přidá "\ r \ n" na konci svého const AT řetězec.
Na straně příjemce,
a to bez ohledu na to, jak jste zavedli "RecUSART ()",
jak se zdá, jako bys buď přepsat odpověď nebo přetečení bufferu poměrně rychle.(Další nespřízněným pozorování je, že v oblasti vestavěných systémů, hlavní smyčka by nikdy konec!)
Proč jste právě udělat něco takového:
Kód:[...]init_uart ();while (1)

(/ / Hlavní smyčka by nikdy neměly být povoleny do konce!/ * TODO: figuríny přečíst Recv registru splachovacími previos žádné znaky, jako jsou

unsigned char figuríny = SBUF;

* /pro (uIdx = 0; send_AT_Cmd [uIdx]! = '\ 0'; uIdx ) / / poslat AT příkazů

(

SendUSART (send_AT_Cmd [uIdx]);

)uIdx = 0;

dělat

(

unsigned char ch = RecUSART ();if (ch! = '\ r')

rec_cmd [uIdx] = ch;

jiné

rec_cmd [uIdx] = '\ 0'; / / umístit řetězec terminačních NULLuIdx ;) while (ch! = '\ r' & & uIdx <20)/ * TODO: zde byste měli mít úplnou odpověď, mínus CRLF, nebo

pufru je plná.
Nutné dělat, co se s ním před odesláním / čtení některých

více * /

)[...]

 
kámo, díky za velmi dobrou odpověď

Ale odpověď na modem obsahuje ... 'OK' ... a nic jiného, pokud pošlu po AT příkaz
"AT CSIM"

yi pak potřeba kontrolovat '\ r'.... i coouldnt tuhle věc ...

je u mě prosím vysvětlete detailně .....
by mělo zahrnovat i tuto věc v posílání řetězec také?Přidáno po 14 minutách:eek:k ... to říkáš takhle:

int main ()
(
unsigned char uIdx = 0;

const unsigned char send_AT_Cmd [] = "AT CSIM =? \ r \ n";

unsigned char rec_cmd [20];

init_uart ();
while (1)
(/ / Hlavní smyčka by nikdy neměly být povoleny do konce!

/ * TODO: figuríny přečíst Recv registru splachovacími previos žádné znaky, jako jsou
unsigned char figuríny = SBUF;
* /

pro (uIdx = 0; send_AT_Cmd [uIdx]! = '\ 0'; uIdx ) / / poslat AT příkazů
(
SendUSART (send_AT_Cmd [uIdx]);
)

uIdx = 0;
dělat
(
unsigned char ch = RecUSART ();

if (ch! = '\ r')
rec_cmd [uIdx] = ch;
jiné
rec_cmd [uIdx] = '\ 0'; / / umístit řetězec terminačních NULL

uIdx ;

) while (ch! = '\ r' & & uIdx <20)

/ * TODO: zde byste měli mít úplnou odpověď, mínus CRLF, nebo
pufru je plná.Nutné dělat, co se s ním před odesláním / čtení některých
více * /
)
return 0;
)

Ale jsou si jisti, že v odpovědi také caarriage návrat by tam být?

 
Ne, nejsem si jistý, že budou mít přepravu v návratu.Já jen předpokládat, že jste si na tomto příkladu práce.

Pokud nebudete mít jednu, budete potřebovat nějakou jinou metodu na to, když je odpověď zcela obdržel (jako když vidíte RX-line nečinný po dobu delší než 2 znaky, nebo tak něco)., Nebo jen interpretovat znaky jak přicházejí, až smysl ...

Nebo můžete příkazem váš přístroj dát číselnou odpovědí (na rozdíl od textu), což by bylo mnohem jednodušší parsovat a interpretovat (to by se pak dostat "0" místo "OK" a tak dále).Zkontrolujte, zda vaše zařízení spec.o tom, jak to udělat.

Na předá straně však budete potřebovat řetězec ukončení znak (konfigurovatelného na některá zařízení, takže kontrola se spec.), Které se obvykle přepravu return (a ne s linií krmiv, jak jsem původně myslel).Tak právě '\ r' (CR), a ne '\ n' (LF) na konci vás AT příkazů.

Debug malý a pokusit se přizpůsobit se nové problémy, udělat nějaké vyhledávání a používat mozek více ...
Hodně štěstí!

Arthur

 
díky moc kámo .... špatně vyzkoušet tuto metodu na mém hardware ....

díky za pomoc

 

Welcome to EDABoard.com

Sponsor

Back
Top