Mình đang tìm hiểu về mạch điều khiển từ xa bằng SMS qua module SIM900. Mình đã tìm hiểu về các tập lệnh AT.nhưng mình không hiểu cách AVR gửi lệnh cho module ,và ngược lại,cách VDK hiểu được lệnh của module gửi qua.Các bạn làm rồi có thể hướng dẫn mình đc ko,hoặc nếu có thể cho mình một đoạn code mẫu.thanks
Thông báo
Collapse
No announcement yet.
Hỏi về giao tiếp AVR và module SIMCOM
Collapse
X
-
AVR bạn dùng UART truyền dữ liệu xuống con SIM900. Khi bạn gửi 1 lệnh xuống SIM900 thì SIM900 sẽ trả lời bạnNguyên văn bởi daaa Xem bài viếtMình đang tìm hiểu về mạch điều khiển từ xa bằng SMS qua module SIM900. Mình đã tìm hiểu về các tập lệnh AT.nhưng mình không hiểu cách AVR gửi lệnh cho module ,và ngược lại,cách VDK hiểu được lệnh của module gửi qua.Các bạn làm rồi có thể hướng dẫn mình đc ko,hoặc nếu có thể cho mình một đoạn code mẫu.thanks
VD AVR gửi dòng lệnh "AT\r" xuống SIM900. Nếu SIM900 nhận được dòng lệnh trên thì sẽ trả lời OK.
Hàm putchar() trong codevision chỉ gửi dc 1 ký tự. Dòng lệnh "AT\r" bao gồm 3 ký tự 'A', 'T', '\r' (ký tự xuống dòng)
SIM900 nhần dc dòng này nó sẽ gửi trả lại AVR các ký tự sau '\r', '\n', 'O', 'K', '\r', '\n' . Bạn dùng ngắt nhận UART nhận các ký tự này.
Tương tự cho các dòng lệnh khác như gửi tin nhắn, đọc tin nhắn, xóa tin nhắn ..v..v..Sống là để chiến đấu
-
Thông thường SIM900 gửi về kết thúc là \r\nOK\r\n. Ví dụ lệnh đọc 1 tin từ inbox của SIM.Nguyên văn bởi daaa Xem bài viếte định dùng MikroC để lập trình,trong đó có sắn các hàm ghi,đọc cả đọc text truyền qua UATR. Anh cho e hỏi tiếp là có phải các lệnh trả về của sim900 đều có cú pháp \r\n lệnh \r\n ko ạ.
int API_readmsg(int index)
{
int j=0;
if((index<=0)||(index>=66)) return -2; // tran vung nho inbox trong SIM
else
{
UART0_rx_reset();
UART0_setSearchString(OK_); //Set OK to be search string // set OK de tim kem
UART0_putsf(AT_CMGR); //Read message
UART0_putint(index); //@index
UART0_putsf(CR); //CR
UART0_rx_on(); //Receiver on, wait for acknowledge
if(API_check_acknowledge()>0 ) //Read = OK
{
j=API_decodemessage(); // giai ma tin nhan
if(j==1) return 1; // co noi dung tin nhan
else return 0; // khong co noi dung tin nhan hoac sim loi
}
else return (-1); // khong ket noi
}
}
Có lệnh sẽ chia thành nhiều đoạn. VD khi bạn gửi tin nhắn bằng lệnh "AT+CMGS=0988666333\r" lúc này chip bạn phải nhận "READY" từ SIM900 rồi mới tiếp tục gửi nội dung tin nhắn xuống. Rồi bạn lại tiếp tục đợi lệnh từ sim900 là \r\nOK\r\n. thế là kết thúc lệnhSống là để chiến đấu
Comment
-
Thanks a!! và e có 1 số ý hỏi thêm sau:
1,Hàm UART0_setSearchString(OK_),VDK dùng hàm đó làm j,có phải chờ lệnh OK gửi từ Module về? trong một số code mẫu e thấy cũng hàm đó người ta có dùng cả lệnh READY,CMTI,CR_LF(thay cho OK_),a có thể giải thích hàn này dùm e được ko ạ
2,CR trong hàm UART0_putsf(CR) là j?
3,A có thể giải thích cho e hàm giải mã tin nhắn?
4,Khi VDK đọc tn thì nó sẽ đọc đc những gì,ví dụ nội dung tn là "1234"?
Comment
-
1. Hàm UART0_setSearchString(OK_) là hàm set giá trị OK_ để VDK chờ nhận đủ OK_ thì xong 1 lệnh từ SIM gửi về, làm thế này để biết lúc nào nhận xong lệnh từ sim. ngoài OK_ ra còn có READY, CMTI, CR_LF. Các định nghĩa của nó như sauNguyên văn bởi daaa Xem bài viếtThanks a!! và e có 1 số ý hỏi thêm sau:
1,Hàm UART0_setSearchString(OK_),VDK dùng hàm đó làm j,có phải chờ lệnh OK gửi từ Module về? trong một số code mẫu e thấy cũng hàm đó người ta có dùng cả lệnh READY,CMTI,CR_LF(thay cho OK_),a có thể giải thích hàn này dùm e được ko ạ
2,CR trong hàm UART0_putsf(CR) là j?
3,A có thể giải thích cho e hàm giải mã tin nhắn?
4,Khi VDK đọc tn thì nó sẽ đọc đc những gì,ví dụ nội dung tn là "1234"?
const unsigned char flash OK[] = "OK\r\n"; //!< "OK"
const unsigned char flash CMTI[] = "+CMTI: "; //!< New Message arrived
const unsigned char flash READY[] = "> "; //!< Phone ready to receive text message
const unsigned char flash CR_LF[] = "\r\n"; //!< Carrige Return Line Feed
const unsigned char flash CUSD[] = "+CUSD: "; //!< Check tk
const unsigned char flash CPIN[] = "+CPIN: "; //!< Check sim ready
const unsigned char flash *searchFor; //!< Flash pointer
const unsigned char flash *searchStrings[6] = {OK, CMTI, READY, CR_LF, CUSD,CPIN}; //!< Initialize pointer
#define OK_ 0 //!< Used to look up in COM_setSearchString( unsigned char Response )
#define CMTI_ 1 //!< Used to look up in COM_setSearchString( unsigned char Response )
#define READY_ 2 //!< Used to look up in COM_setSearchString( unsigned char Response )
#define CRLF_ 3 //!< Used to look up in COM_setSearchString( unsigned char Response )
#define CUSD_ 4 //!< Used to look up in COM_setSearchString( unsigned char Response )
Như vậy khi bạn set giá trị nào thì VDK tìm kiếm giá trị đó.
2. CR chính là '\r' hay CR_LF là '\r\n'. Mình định nghĩa thế lần sau dùng chỉ dùng CR, hoặc LF hoặc CR_LF.
3,4. Hàm giải mã tin nhắn: Khi SIM gửi tin về cho VDK, ngoài nội dung tin nhắn ra còn có các nội dung như vị trí thứ mấy trong inbox, số điện thoại người gửi, ngày giờ... rồi mới đến nội dung tin nhắn "1234" mình cần lấy, rồi đến "\r\nOK\r\n"
Đây là các lệnh AT_command
const unsigned char flash CR[] = "\r";
const unsigned char flash AT[] = "AT\r"; //!< Say "OK" // test connection
const unsigned char flash ATZ[] = "ATZ\r"; //!< Say "OK"
const unsigned char flash ATE0[] = "ATE0\r"; //!< Echo off
const unsigned char flash AT_CMGD[] = "AT+CMGD="; //!< Delete message at index
const unsigned char flash AT_CMGR[] = "AT+CMGR="; //!< Read from index
Đoạn code đọc tin nhắn trên nếu mình cần đọc index=1 thì đoạn code
UART0_putsf(AT_CMGR); //Read message
UART0_putint(index); //@index
UART0_putsf(CR); //CR
sẽ tương đương với câu lệnh UART0_putsf("AT+CMGR=1\r");
Chúc các bạn thành công!Sống là để chiến đấu
Comment
-
Hàm UART0_rx_reset() dùng để reset bộ đệm nhận, biến đếm, các chỉ số..v..v trong ngắt nhận UART0. Khi ngắt nhận hết thì disable cái ngắt nhận này. Mỗi lần VĐK gửi lệnh đi xong, ta lại enable lên bằng hàm UART0_rx_on()Nguyên văn bởi daaa Xem bài viếtA cho hỏi là các hàm UART0_rx_reset();UART0_rx_on(); khi nào thì dùng,hình như hàm UART0_rx_on(); đc dùng sau mỗi lần VDK gửi xong lệnh?
Ah mình chỉ thêm cho bạn để bạn test cho nhanh, bạn nên nối con SIM900 qua max232 để truyền lên máy tính. Trên máy tính dùng hyperterminal để viết các lệnh AT. SIM900 gửi trả về như thế nào sẽ hiện ngay lên màn hình. Nhìn trực quan hơn.
Chúc bạn thành côngSống là để chiến đấu
Comment
-
Mình chưa làm giao tiếp với điện thoại lần nào. Nếu điện thoại có 2 chân Tx, Rx dùng để giao tiếp thì mình nghĩ có thể làm được.Nguyên văn bởi daaa Xem bài viếte định dùng 1 cái điện thoại nokia để thay cho module,ko biết tập lệnh AT của đt Nokia có khác gì của module ko a nhi?Sống là để chiến đấu
Comment
-
theo mình biết thì chưa có phần mềm mô phỏng modul simcom, tốt nhất bạn mua 1 modul sim về làm thực tế thì hơn.Nguyên văn bởi daaa Xem bài viếtmà có phần mềm nào mô phỏng hoạt động của các module simcom ko a???
modul sim900 giờ rất phổ biến, loại 300cz mình nghe nói không sản xuất nữa thì phải
mình có ít tài liệu cho bạn đây:(^_^) hoangnv.3i@gmail.com
Comment
-
Tài liệu của bạn hoang_3i rất hứu ích cho việc kết nối module SIM900 với máy tính. Về cơ bản thì tập lệnh AT của các hãng rất giống nhau. Chỉ khác nhau một số lệnh riêng. Sau khi bạn đã test kết nối với máy tính OK thì bạn kết nối với VDK không còn gì là khó khăn.Nguyên văn bởi hoang_3i Xem bài viếttheo mình biết thì chưa có phần mềm mô phỏng modul simcom, tốt nhất bạn mua 1 modul sim về làm thực tế thì hơn.
modul sim900 giờ rất phổ biến, loại 300cz mình nghe nói không sản xuất nữa thì phải
mình có ít tài liệu cho bạn đây:Sống là để chiến đấu
Comment
-
em chào các anh, board SIM900 của em khi cắm máy tính thì chạy ok, nhưng khi e giao tiếp với VĐK thì lại không được. Mong các anh giúp đỡ. Em dùng ATmega16 gửi lệnh "printf("ATD0946830790;\n"); cho nó nhưng không thể gọi được. Các anh biết lỗi gì thì giúp e với. Em cảm ơn.Nguyên văn bởi hitechvn Xem bài viếtTài liệu của bạn hoang_3i rất hứu ích cho việc kết nối module SIM900 với máy tính. Về cơ bản thì tập lệnh AT của các hãng rất giống nhau. Chỉ khác nhau một số lệnh riêng. Sau khi bạn đã test kết nối với máy tính OK thì bạn kết nối với VDK không còn gì là khó khăn.WS:
Blog:
Comment
-
Bạn thử giảm tốc độ baud xuống xem, đôi khi giao tiếp ở tốc độ cao quá cũng là nguyên nhân gây ra lỗiNguyên văn bởi quangtung112 Xem bài viếtem chào các anh, board SIM900 của em khi cắm máy tính thì chạy ok, nhưng khi e giao tiếp với VĐK thì lại không được. Mong các anh giúp đỡ. Em dùng ATmega16 gửi lệnh "printf("ATD0946830790;\n"); cho nó nhưng không thể gọi được. Các anh biết lỗi gì thì giúp e với. Em cảm ơn.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi bqvietBqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
-
Channel: Thiết bị điện tử cá nhân
hôm nay, 17:17 -
-
Trả lời cho Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
Hôm qua, 19:59 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi afrendlyCó vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
-
Channel: Thiết bị điện tử cá nhân
04-12-2025, 01:27 -
-
Trả lời cho Máy điện châm ?bởi nick22Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
-
Channel: Điện tử y sinh
01-12-2025, 13:23 -
-
Trả lời cho Làm thế nào để check IC LM358bởi thetungĐể check IC sống hay chết thì đơn giản : bạn lắp cái mạch ( khuếch đại hoặc dao động ) chạy bằng con IC đó ,nhưng vị trí IC thì lắp cái đế .... thế là cứ cắm rút thì biết . Còn không thì kiếm cái này : https://shopee.vn/Xu-M%C3%A1y-ki%E1%...di-%C4%91%E1%B...
-
Channel: Hướng dẫn tìm thông tin linh kiện
28-11-2025, 14:34 -
-
bởi ngochung90Tình hình là em có mua mạch 3s về để hàn vào khối pin 12v, hàn xong em đo tại các chân từ B-, B1, B2, B+ thì điện áp pin vẫn đủ 12,6v, nhưng tại 2 chân ra P- P+ thì đo chỉ được 6,3v là bị sao các bác, và chân P- P + này đồng thời là chân sạc xả thì mình cắm sạc xả cùng lúc được ko ạ
...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2025, 10:32 -
-
Trả lời cho Làm thế nào để check IC LM358bởi nguyendinhvanViệc đó tùy thuộc trình độ khoa học kỹ thuật công nghệ ứng dụng hiện tại thôi.
Trong datasheet,họ đưa ra nhiều thông số. Tùy theo khả năng , và những thông số họ cần, họ sẽ kiểm tra casc số đo có khớp với số liệu trong datasheet...-
Channel: Hướng dẫn tìm thông tin linh kiện
27-11-2025, 18:00 -
-
bởi kqbn9091Em có mạch AT89s8253 đang cần sửa số serial no của CHIP mà giờ lâu quá rồi không dùng keil nên không biết phải làm sao, trong khi chỉ còn file hex. Mạch nạp thì progris khi viết không sửa được số serial của IC. Rất cần bác nào còn làm về 89...
-
Channel: Vi điều khiển họ 8051
27-11-2025, 11:13 -

Comment