Ðăng Nhập

View Full Version : Su Dung GPS Module


longtu
22-12-2011, 09:45 AM
Chào các bạn,

Mình vừa có dịp làm việc với GPS module, một chút kinh nghiệm mình xin chia sẽ đến diễn đàn của chúng ta.

Mục đích:
- Giới thiệu loại GPS module rẻ và có bán ở VN, phù hợp với các ứng dụng nhỏ độ chính xác vừa phải.
- Cách kết nối phần cứng cho GPS module.
- Cách tách chuỗi dữ liệu cần thiết từ chuỗi dữ liệu của GPS module.
- Một số lưu ý khi vẽ mạch PCB

longtu
22-12-2011, 10:07 AM
GPS module có các hãng thông dụng sau:
- Holux
- Globalsat
- Royaltek
- Skylap
- FTech
- Simcom
- ...
Tấc nhiên là tùy thuộc vào ứng dụng mà ta chọn loại GPS module phù hợp.
Nếu các bạn cần tư vấn chọn lựa GPS phù hợp hãy liên lạc với anh Linh: http://vn-et.com
Mình cũng đã từng nhờ anh Linh tư vấn chọn lựa loại GPS phù hợp, giá cả hợp lý. Nhân đây cũng xin cám ơn anh Linh, nhờ có anh mà mình đã làm xong sản phẩm của mình.

Mình giới thiệu một số loại GPS module giá thành hạ: Khoảng 300k-400K
- M89
- GR89
- UB93
Chú ý: Giá GPS module tăng dần theo thứ tự bên trên(chênh lệch nhau khoảng vài chụp ngàn).

Phụ kiền cần thiết cho GPS module:
- Ngoài GPS module, chúng ta cần phải có GPS anten. Có 2 loại External hay Internal anten
1. External anten: Nếu bạn chòn loại anten này phải cần mua thêm RC-C-SMA connector để có thể gắn trực tiếp trên mạch PCB. Xem hình External Anten.
2. Internal Anten: Xem hình ảnh Internal Anten. Với loại này, connector cho anten nay mình không tìm được, đành phải cắt bỏ connector này. Khi cắt bỏ đầu connector sẽ có: đây lõi(tín hiệu GPS-RF) + lưới bọc bên ngoài(nối mass).

longtu
22-12-2011, 10:29 AM
Mình làm việc với UB93 GPS module, vì vậy mình trình bày kết nối phần cứng cho module này. Loại module khác cũng sẽ tương tự.
- Kết nối phần cứng: Xem hình ảnh đính kèm.
Chú ý:
+ Tùy chọn sử dụng loại External hay Internal anten. Tuy nhiên, kinh nghiệm của mình thì Internal anten(nhỏ gọn, sắp xếp đặt được ngay trên mạch PCB được) hoạt động tốt không thua kém gì External(to, dây dài để có thể kéo ra bên ngoài).
+ Chân 1PPS: chân này được nối qua 1 Led. Ý nghỉa như su:
* Led tắt: chưa thu được tín hiệu từ vệ tinh.
* Led sáng: đang dò tìm tín hiệu từ vệ tinh
* Led chớp tắt: Tín hiệu thu được từ vệ tinh là tốt.
Khi kết nối GPS thành công, cứ khoảng 1s, GPS sẽ nhận được tín hiệu từ vệ tinh và khi đó ta chỉ cần quan sát Led này chớp tắt có nghỉa là việc thu tín hiệu đã tốt.
+ Chân TX0: Chân truyền dữ liệu từ GPS module. Để có thể xử lý data từ GPS module thông qua việc giao tiếp với Microcontroller, ta sẽ dụng chân này. Tuy nhiên, GPS module sử dụng 3.3V, microcontroller thông dụng lại là 5V. Vì vậy việc thêm 2 transistor(xem hình) là cần thiết.
Ngõ ra TX_GPS sẽ đuợc nối vào chân RX của microcontroller.

longtu
22-12-2011, 11:11 AM
Việc kết nối GPS module(chân TX0) với Microcontroller qua chân RX, ta sử dụng ngắt RDA để thực hiện việc lấy chuỗi data cũng như tách lấy dữ liệu cần lấy.
Ví dụ: Chuỗi data cần lấy:
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,1 30694,004.2,W*70
Ghi nhận:
*Sau dấu "," thứ nhất: Thông tin thời gian
*Sau dấu "," thứ 2: thông tin Latitude
*Sau dấu "," thứ 4: thông tin Longitude
* ....

char GPSbuffer[70];
char GPRMC[6]={"$GPRMC"};//Nếu muốn lấy chuỗi data ta GPRMC
char Comma_position[13];
int8 check= 0;
/* Find comma in GPS datas -------------*/
Void FindComma()
{
int8 i, counter= 0;
for(i= 0;i<70; i++)
{
if(GPSbuffer[i]== ',' )
Comma_position[counter++]= i;
}
}
/*Received data from GPS module: ------------*/
#INT_RDA
Void Receive_GPSbuffer()
{
char c;
c= getc();
if(check == 69) return;
GPSbuffer[check++]= getc();
if(check<7)
{
if((GPSbuffer[check-1]) != (GPRMC[check-1]))
check= 0;
}
}
Void TimeGPS()//Vi dụ mang tính minh họa lấy thời gian từ GPS module.
{
char i;
i= Comma_position[0]; //ngay sau vị trí dấu , đầu tiên là thông tin THOI GIAN
printf("TIME(HHMMSS): %c%c:%c%c:%c%c\r\n",GPSbuffer[i+1],GPSbuffer[i+2],
GPSbuffer[i+3],GPSbuffer[i+4],
GPSbuffer[i+5],GPSbuffer[i+6]);

delay_ms(10);
}
Void LatitudeGPS()
{
char i;
i= Comma_position[2];
...
}
Vode LongitudeGPS()
{
char i;
i= Comma_position[4];
...
}
Void GetData()
{
FindComma();
TimeGPS();
LatitudeGPS();//*Sau dấu "," thứ 2: thông tin Latitude
LongitudeGPS();//*Sau dấu "," thứ 4: thông tin Longitude
//...
check= 0;//The next get GPS datas.
}

void main()
{
if(check == 69) GetData();
}


Code trên, chỉ là để minh hoạ cách lấy data cũng như tách lấy data cần sử dụng. Các bạn thay đổi để phù hợp với ứng dụng của mình.

longtu
22-12-2011, 11:21 AM
- Hy vọng qua các bài viết ở trên, các bạn có thể hiểu cách thức làm việc với GPS module. Từ đó tuỳ biến sử dụng cho sản phẩm của mình.
- Nếu có chổ nào chưa thật rõ ràng, các bạn cần thêm thông tin, hãy gửi email cho mình(xem chữ ký).

longtu
22-12-2011, 03:24 PM
Một số chú ý khi vẽ PCB cho đường RF và các đặt GPS module trên mạch PCB.

lambaotrung
12-03-2012, 10:30 PM
cũng rất cảm ơn bạn, nhưng mình đọc đi đọc lại bài viết của bạn máy lần..... nhưng minh chưa biết làm thế nào.... kết nói kiễu sao với PIC hay là loại VĐK nào...

vd: bạn có thể đưa lên 1 bài về những gì bạn đạt dc ở một modell cụ thể ra làm sao. và bạn đã dạt đến mức nào..

trong diễn đàn cũng có 1 bạn cũng muốn tiềm hiểu về GPS về hiễn thi tọa đô lên màn hình LCD. để đạt dc như thế mình làm sao bạn có thể giúp thêm ko.


ví dụ modell GPS kết nói với VDK kiểu gì loại gì.....

và giá trị của modell GPS đưa cho vi điều khiển dưới dạng nào... ..


mong bạn giúp nhiều hơn. chân thành cảm on.

longtu
13-03-2012, 09:42 AM
Chào Trung, mình trả lời các câu hỏi của bạn ở dưới email của bạn:

[Lâm Bảo Trung]:cũng rất cảm ơn bạn, nhưng mình đọc đi đọc lại bài viết của bạn máy lần..... nhưng minh chưa biết làm thế nào.... kết nói kiễu sao với PIC hay là loại VĐK nào...
[Tuân 2012.03.13]: Trung để ý, mình cũng đã gửi schematic cho việc kết nối giữa GPS module và Microcontroller PIC(Microcontroller khác cũng tương tự). Việc giao tiếp giữa GPS và Microcontroller chỉ đơn giãn qua chân TX. Chú ý mức điện áp chỉ 3.3V cho GPS và thường 5V cho Microcontroller(xem hình ảnh schematic đã gửi).

[Lâm Bảo Trung]:vd: bạn có thể đưa lên 1 bài về những gì bạn đạt dc ở một modell cụ thể ra làm sao. và bạn đã dạt đến mức nào..
[Tuân 2012.03.13]: Bạn mong muốn gì ở GPS module, phải chăng là lấy và sử dụng được các thông tin nhận được từ vệ tinh thông qua GPS module này: thời gian, kinh đọ, vĩ độ... Bài viết của mình đã làm được điều này rồi mà. Bạn cần xem lại đoạn code mình đã gửi lên diễn dàn, đó là code tham khảo để lấy các thông tin từ vệ tinh. Còn mục đích sử dụng thì tùy vào ứng dụng, tùy vào mục đích của bạn.

[Lâm Bảo Trung]:trong diễn đàn cũng có 1 bạn cũng muốn tiềm hiểu về GPS về hiễn thi tọa đô lên màn hình LCD. để đạt dc như thế mình làm sao bạn có thể giúp thêm ko.
[Tuân 2012.03.13]: Việc hiển thị tọa độ lên LCD cũng đơn giản như bạn muốn hiển thị 1 data nào đó lên LCD mà thôi. Bạn đã làm được đến đâu(xem các câu hỏi bên dưới)?:
- Microcontroller mà ban tìm hiểu là gì(PIC, AVR, AMR...)?
- Bạn đã sử dụng được LCD với Microcontroller chưa?
Tiếp theo bạn thay data ở trên bởi dữ liệu là tọa độ rồi cho LCD hiển thị thôi.

[Lâm Bảo Trung]:ví dụ modell GPS kết nói với VDK kiểu gì loại gì.....
[Tuân 2012.03.13]: Hình như bạn không đọc kỹ bài viết của mình, không xem các hình ảnh dính kèm về schematic...
[Lâm Bảo Trung]:và giá trị của modell GPS đưa cho vi điều khiển dưới dạng nào... ..
[Tuân 2012.03.13]: Hình như bạn không đọc kỹ bài viết của mình, không xem các hình ảnh dính kèm về schematic, đoạn code minh họa...

mong bạn giúp nhiều hơn. chân thành cảm on.
[Tuân 2012.03.13]: Không ai giúp bạn được nếu như bạn chưa thật sự cố gắng, chưa tìm hiểu kỹ. Tấc cả các câu hỏi trên của bạn mình cho rằng bài viết của mình đã trả lời được hết rồi, hãy đặt câu hỏi cho đúng vấn đề, tấc cả mọi người trên diễn dàn này đều sẵn sàng giúp đở.

lambaotrung
14-03-2012, 10:06 PM
máy bác ơi cho em làm phiền.....

cái chuyện làm modull để từ từ rành rẻ về PIC thì hay làm. bày giờ em muốn làm 1 bài tập về truyền nhận dữ liệu từ PIC này sang PIC kia ( PIC1 đến PIC2) qua cổng RS232.

em truyền 1 số "123 " , hay 1 chử cái " A " đi và dùng ngắt RDA thì mình làm tốt và hiện thị giá trị lên LCD tốt.

nhưng khi em truyền 1 mãng char string[]=" PICVIETNAM ";
dùng lệnh Printf(string); nói chung thì no truyền đi dc.

nhưng ở phần PIC nhận thì em chỉ nhận dc có chứ "P" khi em dùng lệnh

IN=getc(); thì chi hiện chử 'P' á. . // khai bao char IN[10];

khi dùng lệnh gets(IN); thì nó đơ luôn. ko hiện hồn chử gì lên LCD cả.

các bác giúp em chổ này và bác Longtu ơi bác giúp noi rõ hơn về việc tìm dấu " , ". nhé anh. thật tình thi em chậm tiêu lam. đoạn code của bác em đọc tởi đọc lui 2 ngày mà chưa nghộ ra dc nhiều.


em kết nói 8bit với LCD qua portD.

tienchuan
17-03-2012, 12:22 AM
máy bác ơi cho em làm phiền.....

cái chuyện làm modull để từ từ rành rẻ về PIC thì hay làm. bày giờ em muốn làm 1 bài tập về truyền nhận dữ liệu từ PIC này sang PIC kia ( PIC1 đến PIC2) qua cổng RS232.

em truyền 1 số "123 " , hay 1 chử cái " A " đi và dùng ngắt RDA thì mình làm tốt và hiện thị giá trị lên LCD tốt.

nhưng khi em truyền 1 mãng char string[]=" PICVIETNAM ";
dùng lệnh Printf(string); nói chung thì no truyền đi dc.

nhưng ở phần PIC nhận thì em chỉ nhận dc có chứ "P" khi em dùng lệnh

IN=getc(); thì chi hiện chử 'P' á. . // khai bao char IN[10];

khi dùng lệnh gets(IN); thì nó đơ luôn. ko hiện hồn chử gì lên LCD cả.

các bác giúp em chổ này và bác Longtu ơi bác giúp noi rõ hơn về việc tìm dấu " , ". nhé anh. thật tình thi em chậm tiêu lam. đoạn code của bác em đọc tởi đọc lui 2 ngày mà chưa nghộ ra dc nhiều.


em kết nói 8bit với LCD qua portD.
đọc xog bài của bạn mih cũng đơ lun, hehe :D
bây h bạn làm từ từ cho hắn khỏi đơ :D
bạn muốn kiểm tra bên gởi đã gởi được hay chưa thì test qua Hyper Terminal đã nhé, nếu nhận OK hết rồi hãy kết nối với PIC để xử lý
Bên Pic nhận thì làm ngược lại, lấy Hyper gởi xuống chuỗi gì đó rồi cho hiện lên LCD
Xong 2 cái, bạn cắm lại vs nhau là OK thôi,
Nhớ đấu chéo 2 dây TX và RX nhé
p/s: bày vẻ bạn đủ thứ để cho có việc làm+ lần sau nên tạo chủ đề mới để hỏi nhé, làm loãng topic của a longtu :D
Thân.

lambaotrung
19-03-2012, 11:37 AM
cám ơn các anh.

hiện em đã làm tốt việc nhận và xử lý tách chuổi dữ liệu qua rs232 giữa 2 PIC. côi như phần cần cơ bản em đã làm xong.

bày giờ quay lại đoạn chuỗi giữ liệu của bác Longtu.
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,1 30694,004.2,W*70

sau dấu ',' thứ 1: là thời gian ok em hiểu.
sau dấu ',' thứ 2: là vĩ độ " latitude " A,5133.82 đoạn này em ko hiểu.
sau dấu ',' thứ 4: là kinh độ " longitude" N,00042.24 đoạn này cũng ko hiểu.

ở 2 đoạn kia là các con số phần tích thế nào anh longtu. nếu như ở miền nàm thi nằm trong khoảng
- longitude: 105 độ, 55' 37.04" E.
- latitude: 10 độ 08' 59.07" N. " là tọa độ của máy tính em cung cấp vì máy laptop có card wwan + GPS.

như vậy em so sanh với đoạn code cua modull GPS đưa ra thì em ko hiểu luôn.. híc bác longtu giúp em. giải thích thêm nhe. cảm ơn bác longtu và các bác đã có những lời khuyên cho em và em đã thành công. hihi

tienchuan
19-03-2012, 11:09 PM
@ Trung : vì làm code minh họa ví dụ nên chắc a longtu ghi nhầm đó, bạn cộng thêm 1 để lấy các giá trị đó, tức vĩ độ sau dấu phẩy thứ 3, kinh độ sau dấu phẩy thứ 5,... còn chữ A sau chuỗi thời gian báo hiệu cho biết thời gian thu được có hợp lệ hay chưa (A: có,V:ko),còn các chữ cái N - Bắc; W - Tây; E - Đông; S - Nam để chỉ hướng.
Bạn coi thêm định dạng chuỗi GPRMC trong chuẩn NMEA quy định để biết thông tin của chuỗi.
Còn về vấn đề tọa độ của Module gởi về , ở đây mih nói module sim 548C vì đang dùng, nếu dùng module khác, bạn coi datasheet module gởi về chuẩn gì, tra chuẩn, để biết thông tin của chuỗi.
Ở đây mih lấy cái chuỗi ở trên làm lun, chuỗi GPRMC.
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,1 30694,004.2,W*70
Trong đó:
+ kinh độ(ddmm.mmmm) : 5133.82=51 độ+33.82 phút=51,5637độ
+vĩ độ(dddmm.mmmm):00042.24=0 độ+ 42.24 phút=0,704độ
Sau lên gg sợt cái là qua tới bên London lun, chắc nhà a longtu ở gần đó :D
p/s:mọi người coi giúp e đổi đúng chưa mà sao đi xa quá :D

lambaotrung
20-03-2012, 09:44 AM
chưa hiễu về công thức tính toán kinh độ ,vĩ độ cũa bác.

kinh độ: (ddmm.mmmm): " độ độ phút phút. phút phút phút phút ".
cách quy đổi 5133.82= 51 độ+ 33.82 phút =51,5637 độ bác....
em chưa hiểu, bác nói rõ hơn về cách tính đi.

bac nay len GG lam sao search ra vi tri cua minh test xem minh dung hay sai bac.

em dung URL nay tim ma ko dc: http://www.google.com/maps?q=[1]+[2]&t=m&z=16
[1] kinh do= 5133.82
[2] vi do= 00042.24

e dua du lieu nhu tren vao doan URL kia ong GG bo tay.

lambaotrung
20-03-2012, 11:23 AM
may bac oi trong protues cua minh co mo phong dc su giao tiep truyen thong RS232 giua Microcontroller va PC ko cac bac.. chi giup em nha hom bua em len youtube em xem 1 doan video anh kia lam dc chuyen do. ket hop voi mot phan mem viec bang Visua C# de goi 1 chuoi qua RS232 nhung chi la ao. thui.

longtu
20-03-2012, 02:15 PM
may bac oi trong protues cua minh co mo phong dc su giao tiep truyen thong RS232 giua Microcontroller va PC ko cac bac.. chi giup em nha hom bua em len youtube em xem 1 doan video anh kia lam dc chuyen do. ket hop voi mot phan mem viec bang Visua C# de goi 1 chuoi qua RS232 nhung chi la ao. thui.

To Trung: Trung tạo 1 luồng khác về vấn đề nay nhé. Luồng này, nên chỉ nói về GPS thôi.

lambaotrung
21-03-2012, 11:19 AM
ah. sorry cac bac.

lambaotrung
26-03-2012, 09:33 AM
@ Trung : vì làm code minh họa ví dụ nên chắc a longtu ghi nhầm đó, bạn cộng thêm 1 để lấy các giá trị đó, tức vĩ độ sau dấu phẩy thứ 3, kinh độ sau dấu phẩy thứ 5,... còn chữ A sau chuỗi thời gian báo hiệu cho biết thời gian thu được có hợp lệ hay chưa (A: có,V:ko),còn các chữ cái N - Bắc; W - Tây; E - Đông; S - Nam để chỉ hướng.
Bạn coi thêm định dạng chuỗi GPRMC trong chuẩn NMEA quy định để biết thông tin của chuỗi.
Còn về vấn đề tọa độ của Module gởi về , ở đây mih nói module sim 548C vì đang dùng, nếu dùng module khác, bạn coi datasheet module gởi về chuẩn gì, tra chuẩn, để biết thông tin của chuỗi.
Ở đây mih lấy cái chuỗi ở trên làm lun, chuỗi GPRMC.
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,1 30694,004.2,W*70
Trong đó:
+ kinh độ(ddmm.mmmm) : 5133.82=51 độ+33.82 phút=51,5637độ
+vĩ độ(dddmm.mmmm):00042.24=0 độ+ 42.24 phút=0,704độ
Sau lên gg sợt cái là qua tới bên London lun, chắc nhà a longtu ở gần đó :D
p/s:mọi người coi giúp e đổi đúng chưa mà sao đi xa quá :D


bác ơi bác giải thích rõ hơn về tính toán tọa độ dc ko bác.. em ko hiểu máy về tọa độ đó

longtu
26-03-2012, 10:13 AM
bác ơi bác giải thích rõ hơn về tính toán tọa độ dc ko bác.. em ko hiểu máy về tọa độ đó

- Step 1: Từ chuỗi data $GPRMC...bạn sẽ có được dữ liệu về kinh độ và vĩ độ.
Ví dụ:
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,1 30694,004.2,W*70
Trong đó:
+ Kinh độ(ddmm.mmmm) : 5133.82=51 độ+33.82 phút=(51 + 33.82/60) phut= 51.563666
+ Vĩ độ(dddmm.mmmm):00042.24=0 độ+ 42.24 phút=(00 + 42.24/60) phút= 0.704
Chú ý: Dấu ngăn cách thập phân là dấu ".".
Step 2: Vào: http://www.google.com/maps
Step 3: Nhập Kinh độ và vĩ độ: (51.563666,0.704)

jamaicatrang
26-03-2012, 11:31 AM
em đang làm về module thu tín hiệu gps hiển thị trên lcd.
em sử dụng avr atmega16, lcd16*2, module thu holux m_9129.
Anh longtu cho em hỏi: để hiển thị tín hiệu thu đc lên máy tính em có sử dụng thêm MAX232, em không biết cách kết nối giữa 4 linh kiện trên với nhau, em phải làm tn?
a giúp e vs nhé! thank

longtu
26-03-2012, 11:46 AM
em đang làm về module thu tín hiệu gps hiển thị trên lcd.
em sử dụng avr atmega16, lcd16*2, module thu holux m_9129.
Anh longtu cho em hỏi: để hiển thị tín hiệu thu đc lên máy tính em có sử dụng thêm MAX232, em không biết cách kết nối giữa 4 linh kiện trên với nhau, em phải làm tn?
a giúp e vs nhé! thank

Tôi gợi ý bạn như sau, bạn sẽ tự mình tìm hiểu tiếp để hoàn thành sản phẩm của mình:
- Microcontroller AVR + GSP module: Giao tiếp với nhau qua các chân TX và RX. Tuy nhiên, ban chỉ cần xử dụng chân GPS_TX + MCU_RX để nhận dữ liệu từ GSP module. (Chân GPS_RX: dành cho việc upload firmware, thông thường việc này dành cho nhà sãn xuất...).
Chú ý: Microcontrller AVR có VCC là bao nhiêu Voltage? Và GPS_TX có mức điện áp ở mức 1 và o là bao nhiêu? Có đủ để MCU hiểu không?
- Microcontroller + LCD: Bạn sử dụng Text LCD cho việc hiểu thị nội dung data GPS. Hãy tìm hiểu cách sử dụng Text LCD và các kết nối với MCU, firmware điều khiển...

Bạn không cần sử dụng Max232 nếu như không cần giao tiếp giửa MCU và PC.

Thân,

jamaicatrang
26-03-2012, 03:08 PM
cảm ơn a!
anh ơi! để kết nối với max232 với MCU, thì làm tn ạ?
giúp em với!

longtu
26-03-2012, 04:23 PM
cảm ơn a!
anh ơi! để kết nối với max232 với MCU, thì làm tn ạ?
giúp em với!

Bạn là sinh viên ngành gì vậy? Tôi đoán bạn không phải sinh viên ngành điện tử. Hơn nữa, trong luồng này, chúng ta đang tập trung nói về các sử dụng GPS module mà thôi. Các câu hỏi như bạn(về max232 và MCU) bạn nên tìm kiếm trên diễn dàn picvietnam, internet... hay mở 1 luồng khác với mục đích này nhé.

PS: Bạn tham khảo ở đây: http://www.mikroe.com/eng/chapters/view/17/chapter-4-examples/#c4v13

Thân,

jamaicatrang
26-03-2012, 04:44 PM
uki!
sorry nhé! thank

jamaicatrang
27-03-2012, 09:06 AM
anh longtu ơi! cho e hỏi là: em dung module holuxm_9129 thì có giống vz con Ub-93 ko ah?
do điện áp vào của MCU là 5v ko tương thích vs module GPS , em có phải mắc thêm tranzitor ko?

longtu
27-03-2012, 09:55 AM
anh longtu ơi! cho e hỏi là: em dung module holuxm_9129 thì có giống vz con Ub-93 ko ah?
do điện áp vào của MCU là 5v ko tương thích vs module GPS , em có phải mắc thêm tranzitor ko?

Bạn cần phải đọc kỹ những bài viết ở luồng này từ đầu đến bài của bạn, đừng bỏ xót bạn nhé. Nó sẽ có ích cho bạn, với lại chỉ nên hỏi những gì mà chưa có bài viết trả lời thôi. Dừng lặp lại câu hỏi đã có trả lời bạn nhé.

PS: Xem lai:
#3: http://www.picvietnam.com/forum/showpost.php?p=52473&postcount=3
#20: http://www.picvietnam.com/forum/showpost.php?p=55129&postcount=20

lambaotrung
27-03-2012, 06:15 PM
bác longtu cho em hỏi cái này.

trong chuổi GPRMC của GPS gởi về.
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4 ,230394,003.1,W*6A

vậy làm sao mình biết chuổi đó kết thúc.

với lại trong hàm RDA có đoạn này em khổi hiểu
if(check<7)
{
if((GPSbuffer[check-1]) != (GPRMC[check-1]))
check= 0;
}
bác long tứ giải thích giúp em nhá.

longtu
27-03-2012, 09:27 PM
trong chuổi GPRMC của GPS gởi về.
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4 ,230394,003.1,W*6A
vậy làm sao mình biết chuổi đó kết thúc.


Data nhận được từ vệ tinh luôn bắt đầu bởi ký tự "$". Bạn dựa vào đây để biết bắt đầu 1 chuỗi data mới hay là kết thúc chuỗi data trước.


với lại trong hàm RDA có đoạn này em khổi hiểu
if(check<7)
{
if((GPSbuffer[check-1]) != (GPRMC[check-1]))
check= 0;
}

Đoạn code ngắt RDA này của tôi nhằm mục đích chỉ xét chuỗi $GPRMC(từ $ đến C có 6 ký tự). Vì vậy, ngay khi xét 1 chuỗi data mới, tôi cần lấy dủ 6 ký tự đầu tiên của chuỗi này rồi mới kiểm tra xem có phải là chuỗi $GPRMC hay không. Vì vậy mới có đoạn code if(check<7)...

Bạn thấy đó, chỉ cần tập trung suy nghỉ là bạn có thể tự trả lời câu hỏi của bạn được rồi. Cố gắng suy nghĩ thêm nhé.

Thân.

lambaotrung
28-03-2012, 12:46 AM
Đã giải quyết dc vấn đề bất đầu 1 chuổi và biết khi nó kết thúc một chuỗi là mình tra xét " $ " nếu có dấu $ thì bất đầu ghi các giá trị đó vào 1 mãng thứ 2 và kết thúc ghi khi gấp dấu $ tiếp theo và các giử liệu đó sẽ nạp chòng và Mãng thứ 2 . em đả làm dc sao 1 buổi chiều mày mò viết cách tính... cảm ơn bác longtu nhiều.

dc cải tiếng lại từ code của bác longtu

ở đây thì em tìm dấu ','. mình có thề tìm dấu gì tùy ý mình như: $ ,*,# ...
VOID saudau_1()
{
CHAR I;
char trunglap[7];
i=comma_position[0]; //
int a;
for (a=0;a<comma_position[0];a++) // nó sẽ tăng mãng trunglap[] lên đến khi gập
// dấu ',' kế tiếp và gáng vào 1 mãng có tên
//là mãng : và gang cac gia tri
//
trunglap[a]=mang[i++]; // nếu trong chuổi có 1 dấu ',' hay 1 "$" thì có
//thể thay như thế này " tringlap[a]=mang[a];
//
/// "mang[]" <=> GPSbuffer[] cua bác longtu vi em viết theo ý của em
}
lcd_putcmd(0x80);
printf(lcd_putchar,trunglap); // xuat chuoi ra man hinh LCD.
// chung ta ko the dung printf de ep keu mang ky tu vao lcd_putchar.
}

với cách này em đã tách 1 chuổi lớn thành nhiều chuổi nhỏ hơn.
vị du: $abcd $cdft $1234
các bác xem có cách nào đơn giản hơn chi giúp em.

lambaotrung
28-03-2012, 12:58 AM
sáng ra tìm lại lai thì thấy hàm này có vấn đề.

nếu 1 chuổi gởi đi chí có 1 ký tự mình muốn tìm như " $ " thi nó ko tìm dc chuổi đó.

bui ngoc vu
28-03-2012, 11:58 PM
Xin chào cả nhà!Mình đang làm đề tài về điều chế FSK dùng vi điều khiển PIC,phát đi ở tần số 8MHZ.Bác nào có kinh nghiệm thì chia sẻ cho mình một chút.Cám ơn rất nhiều!

longtu
02-05-2012, 01:21 PM
Có nhiều bạn email hỏi tôi như sau:

1. Mình đã mắc theo sơ đồ của bạn nhưng tại sao led hiển thị trạng thái của GPS không hoạt động.
2. Có cách nào để biết được module GPS Holux-ub93 còn sống hay đã chết không
Nếu bạn có lời khuyên hay kinh nghiệm gì khi làm việc với module GPS này thì chia sẻ với mình được không. Thank bạn nhiều


Tôi trả lời các bạn như sau:
Về module GPS UB93 rất dễ dàng sử dụng, chỉ cần thiết kế đúng:
- Kết nối đúng các chân
- Đặt biết là chú ý đường mạch in cho đường RF nối với anten(http://www.picvietnam.com/forum/showpost.php?p=52482&postcount=6)
- Lắp anten cho module
- Thêm nữa đặt module ở ngoài trời(để đảm bảo module thu tín hiệu tốt nhất)
Kết quả: Lập tức chân 1PPS tạ ra xung, ta nối chân này với Led sẽ thấy led này chớp tắt. Điều này cũng có nghĩa là UB93 đã lấy được thông tin từ vệ tinh mỗi 1 giây. Đây cũng chính là cách kiểm tra module UB93 có hoạt động tốt hay không.

Về kinh nghiệm sử dụng:
- Tôi tạo ra luồng này, với tấc cả những kinh nghiệm của tôi trong lúc sử dụng. Nếu bạn nào đọc kỹ, và đừng bỏ sót, các bạn sẽ thấy rằng các bố trí từ phần, từng mục của tôi đang trả lời các câu hỏi của 1 nguời mới bắt đầu tìm hiểu 1 sãn phẩm mới:
Ví du:
+ Đầu tiên: giới thiệu
+ Cách kế nối phần cứng
+ Cách viết Firmware để tách chuỗi data
+ Lưu ý khi vẽ mạch in

Các bạn cũng nên làm như thế mỗi lần chia sẽ. Tôi cũng mong rằng các bạn nào đã và đang làm ứng dụng này và cả các ứng dụng mới khác, hãy cùng chia sẽ kinh nghiệm, post bài để những nguời đi sau nhanh chóng nắm bắt.
Quan điểm của tôi là "Cho đi để còn nhận về" vì thế không có gì là dấu điếm hay không chia sẽ đuợc cả.

Thân,

thanhsonvn90
16-05-2012, 02:26 PM
+ Chân TX0: Chân truyền dữ liệu từ GPS module. Để có thể xử lý data từ GPS module thông qua việc giao tiếp với Microcontroller, ta sẽ dụng chân này. Tuy nhiên, GPS module sử dụng 3.3V, microcontroller thông dụng lại là 5V. Vì vậy việc thêm 2 transistor(xem hình) là cần thiết.
Ngõ ra TX_GPS sẽ đuợc nối vào chân RX của microcontroller.
Có thực sự cần thiết không bạn? Mình nghĩ 3v3 được coi là mức cao trong chuẩn TTL, do đó VDK có thể nhận được bt

hgkq
02-10-2012, 06:12 PM
Chào bạn Longtu! bạn đã làm về SIM908 rồi bạn có thể tư vấn cho mình tí kiến thức: SIM908 chạy được nhưng 1phut mới connect được với Vệ tinh, đem anten vào trong phòng cách vách tường 2 mét là tịt luôn, dùng S2 thì thì connect vèo vèo, không biết modun SIM908 thu yếu hay thế nào, đã thử với SIM908 thứ 2 vẫn bị, đã tìm mọi cách, ... hay mình phải chọn loại GPS nào thu tốt hơn?!

nguyenluong
18-10-2012, 12:20 AM
Bác Longtu cho em hỏi, giờ mình có dữ liệu từ vệ tinh rồi, giờ muốn hiển thi vị trí lên bản đồ thì mình làm sao, gôgle maps chẳn hạn. Xin cảm ơn.

longtu
18-10-2012, 01:02 PM
Bác Longtu cho em hỏi, giờ mình có dữ liệu từ vệ tinh rồi, giờ muốn hiển thi vị trí lên bản đồ thì mình làm sao, gôgle maps chẳn hạn. Xin cảm ơn.

Bạn cần theo doi và đọc toan bộ luồng nay sẽ thay câu hỏi của bạn tôi đã trả lời rồi.
http://www.picvietnam.com/forum/showpost.php?p=55123&postcount=18

Thân

nguyenluong
18-10-2012, 04:53 PM
Ý em hỏi làm sao mà giống như điện thoai di động đó. Tức là mình không cần nhập tọa độ bằng tay nữa. Mình viết chương trình liên kết với gôgle máp, hiển thị liên tục luôn

kjlkt
30-10-2012, 12:07 AM
#65: http://spkt.net/diendan/showthread.php?16149-Module-thu-nh%E1%BA%ADn-s%C3%B3ng-GPS-GSM/page7

bạn tham khảo thêm ở page này nhé. Mình cũng đang tìm hiểu về phần GPS này.

HaiAu2005
15-11-2012, 05:04 AM
#65: http://spkt.net/diendan/showthread.php?16149-Module-thu-nh%E1%BA%ADn-s%C3%B3ng-GPS-GSM/page7

bạn tham khảo thêm ở page này nhé. Mình cũng đang tìm hiểu về phần GPS này.

Xin cho hỏi làm sao có thể liên hệ được với người làm cái đề tài ở trang spkt trên??? Trang spkt.net dường như đã đóng cửa thì phải vì không thể đăng ký được.

tay mơ
10-12-2012, 10:33 PM
cám ơn bạn @longtu vì những thông tin, mình xem qua trang bạn giới thiệu http://vnettech.com.vn và thấy giới thiệu nhiều hãng/loại module , ko biết ở Sài gòn có thể kiếm mua đc ko (đã xem qua website của tme và chipltr nhưng ko phong phú bằng )
- tiếc là mình chỉ mua 1-2 module và rất ngại việc chuyển phát từ HN vào

vo_cam
25-12-2012, 07:58 PM
cám ơn bạn @longtu vì những thông tin, mình xem qua trang bạn giới thiệu http://vnettech.com.vn và thấy giới thiệu nhiều hãng/loại module , ko biết ở Sài gòn có thể kiếm mua đc ko (đã xem qua website của tme và chipltr nhưng ko phong phú bằng )
- tiếc là mình chỉ mua 1-2 module và rất ngại việc chuyển phát từ HN vào
bạn có thể vào trang này http://www.linhkienvienthong.com/ để tìm, nếu cần thiết thì chuyển từ HN vào cũng nhanh mà.

vo_cam
25-12-2012, 08:06 PM
Chào bạn Longtu! bạn đã làm về SIM908 rồi bạn có thể tư vấn cho mình tí kiến thức: SIM908 chạy được nhưng 1phut mới connect được với Vệ tinh, đem anten vào trong phòng cách vách tường 2 mét là tịt luôn, dùng S2 thì thì connect vèo vèo, không biết modun SIM908 thu yếu hay thế nào, đã thử với SIM908 thứ 2 vẫn bị, đã tìm mọi cách, ... hay mình phải chọn loại GPS nào thu tốt hơn?!
Do chất lượng module nữa đó bạn ah!
Thêm nữa là trên S2 thì nó có thuật toán xử lý dữ liệu một chút nữa

pvtrung90
27-04-2013, 04:37 PM
Anh longtu có thể nói rõ hơn về vấn đề thiết kế mạch giám sát hành trình dùng SIM908 được kg anh? Cách kết nối giữa VĐK(PIC) với SIM908.
Anh có tài liệu nào liên quan về vấn đề này cho em xin tham khảo với nhé.Thanks anh!
mail: phvantrungdtvt@gmail.com

pvtrung90
03-05-2013, 08:33 PM
Với Sim908, bạn cần đọc kỹ tài liệu kỹ thuật của nó, tôi đã có gửi ở đầu luồng này và có nhắc nhỏ đọc đi đọc lại nhiều lần.
- Tôi chỉ sử dụng chân GPS_TXD: vì chỉ có nhu cầu cần lấy data từ vệ tinh. Chân GPS_RX chỉ sử dụng khi update firmware, thông thường việc nhà để nhà sãn xuất làm.
- Tốc độ mặc định của GPS module của SIm908 là 115200 bps. Tuy nhiên có thể dễ dàng thiết lập lại tốc độ này bằng lệnh AT: AT+CGPSIPR=<rate> //Set Baud rate
- Đinh dạng dữ liệu đầu ra cũng dễ dàng thiết lập bằng lệnh AT: AT+CGPSOUT=<mode>
- Sử dụng lệnh AT để lấy dữ liệu GPS bất cứ lúc nào( AT+CGPSINF=<mode>). Thậm chí cho phép/không cho phép GPS chạy(AT+CGPSPWR).
- Ban đầu khi thiết kế phần cứng, tôi có ý định sử dụng riêng 2 bộ UART như vậy, 1 cho GSM và 1 cho GPS. Tuy nhiên, khi làm việc thực tế trên SIm908. Tôi không cần sử dụng UART GPS nữa. Vì có thể kiểm soát dữ liệu bằng lệnh AT rồi(như trình bày ở trên). Mỗi lần minh gọi lệnh [AT+CGPSINF=<mode>], dữ liệu GPS sẽ xuất ra UART GSM.
Vì vậy, tôi sử dụng UART GPS + RS232 + PC để truyền lệnh AT điều khiển SIm908. Điều này rất có lợi:
- Khi cấu hình ban đầu cho Sim908: Vì các lệnh này chỉ cần cấu hình 1 lần duy nhất, thiết lập sẽ được lưu lại trong bộ nhờ không bay hơi trong Sim908.
- Kiểm tra/Thử nghiệm/Test các lệnh AT: Tấc nhiên là bạn phải viết được đoạn code có thể làm việc này. Ví dụ thế này: Khi ban sử dụng siow.exe trong CCS để truyền data xuống MCU qua UART GPS, MCU sẽ tạo hàm có thể truyền lệnh AT này xuống Sim908 qua UART GSM.

Anh longtu mình có thể bỏ UART GPS thì mọi dữ liệu lấy từ vệ tinh về đều được gửi qua chân TX SIM908 truyền về PIC rồi từ PIC gửi về PC được không anh?

vulan1507
30-05-2013, 01:14 PM
Chào bạn pvtrung90.
Mình hiện cũng đang nghiên cứu về định vị tọa độ dùng SIM908 giao tiếp với vdk Pic16f887.
và mình cũng dùng lệnh "AT+CGPSINF" để lấy dữ liệu từ SIM trả về, khi mình test trên Terminal thì OK ko vấn đề gì cả
Bạn cho mình hỏi mã dữ liệu SIM gửi về có phải là mã ASCII hay ko mà khi mình lấy dữ liệu gửi về thông qua vdk Pic xử lý rồi đem ra hiển thị trên LCD thì nó không hiểu đó là mã ASCII. nên nó ko vào chương trình chính được gì cả??Ko biết khi làm vè SIM này bạn có gặp phải vấn đề trên hok??
Mong bạn có thể chia sẽ ít kinh nghiệm của mình
Cảm ơn rất nhiều.
mình đau đầu vì vẫn đề này luôn tới giờ vẫn chưa tìm ra nguyên nhân lun.
Kết nối giữa PIC và SIM thì TXD_pic=RXD_sim,RXD_pic=TXD_sim

duyanhshmily
18-03-2014, 11:30 PM
Mình đang làm đề tài liên quan đến vấn đề GPS, không hiểu sao mình khi mình gửi lệnh AT+CGPSINF=0 thì chỉ nhận được 0,0.000000,0.000000,0.000000,00000000000000.000,0, 0,0.000000,0.000000
Bạn nào giúp mình với. Có tài liệu liên quan gửi cho mình với
gmail: duyanhshmily@gmail.com
Cảm ơn các bạn!

takado
17-05-2014, 09:04 AM
mình cũng bị như vậy nhưng không ai giúp đỡ cả giá trị chỉ nhận được toàn là 0 thôi mình chưa biết cách làm nó hiển thị kinh độ và vĩ độ

sangtx1992
16-07-2014, 10:10 PM
Data nhận được từ vệ tinh luôn bắt đầu bởi ký tự "$". Bạn dựa vào đây để biết bắt đầu 1 chuỗi data mới hay là kết thúc chuỗi data trước.


Đoạn code ngắt RDA này của tôi nhằm mục đích chỉ xét chuỗi $GPRMC(từ $ đến C có 6 ký tự). Vì vậy, ngay khi xét 1 chuỗi data mới, tôi cần lấy dủ 6 ký tự đầu tiên của chuỗi này rồi mới kiểm tra xem có phải là chuỗi $GPRMC hay không. Vì vậy mới có đoạn code if(check<7)...

Bạn thấy đó, chỉ cần tập trung suy nghỉ là bạn có thể tự trả lời câu hỏi của bạn được rồi. Cố gắng suy nghĩ thêm nhé.

Thân.


Bac Longtu cho minh hoi
minh lam ve mang GSM ve SMS minh ket noj PIC vs PC, SIM900 vs PC giao tiep deu duoc het. nhug ket noi hai thang lai thi khong duoc. minh cug da kiem tra truyen nhan thi TX sim900 truyen duoc. minh nghi la do sai muc dien ap RXs(PIC) vs TX(Sim900) nhug chua co cach giai quyet. mong ban giup do