خدمات وبسایت آی‌سی‌تی نیـــک

طراحی و ساخت انواع پروژه‌های الکترونیکی با: میکروکنترلرavr - میکروکنترلرarm - میکروکنترلرpic و آردوینو

مقالات و آموزش‌های رایگان در سطوح پایه و حرفه‌ای برای الکترونیک و آی سی تی - ICT

دریافت اطلاعات ماژول GPS توسط میکروکنترلر avr

منتشر شده در آموزش ماژول ها

432 c ublox neo 6m gps module with active antenna 600x600

برای دریافت اطلاعات ماژول GPS ابتدا تنظیمات پورت سریال میکروکنترلر را روی حالت گیرنده با نرخ بیت 9600یا 4800(با توجه به توضیحات دیتاشیت ماژول) قرار داده با یک بیت پایان و بدون بیت PARITY در مد آسنکرون با 8بیت اطلاعات قرار می دهیم.

ادامه مطلب???

 

Boudrate gps

سپس به عنوان مثال مي خواهیم اطلاعات طول وعرض جغرافیایی را از رشته GPGLLرا دریافت کنیم براي این منظور ابتدا با دستور scanf()رشته را خوانده و در یک آرایه قرار مي دهیم:

      unsigned char Y[150];

      scanf("%s",Y);

حال با استفاده از دستورstrncmp()، از کتابخانه استاندارد string.h  شش کاراکتر اول رشته ي دریافتي را با "$GPGLL" مقایسه مي کنیم. اگر مقدار بازگشتي از تابع strncmpبرابر صفر بود یعني برابرند در غیر این صورت مي بایست دوباره تابع scanf() را تا جایی تکرار کنیم که تابع strncmpخروجی صفر به معنی برابری بدهد. برای این منظور کد بالا را به صورت زیر تکمیل مي کنیم :

       do  scanf("%s",Y);

       while(strncmp(Y,"$GPGLL",6)!=0);

دقت شود که براي کار کردن با رشته ها مي بایست توانایي کار با توابع کتابخانه string.hرا داشته باشیم فرض ما این است که خواننده این توانایي را داراست. حالا با دارا بودن رشته میبایست رشته را تفکیک نماییم.

حال میخواهیم جملات اول و دوم رشته GPGLL را که حاوی اطلاعات طول و عرض جغرافیایی میباشد را از رشته جدا کنیم. برای اینکار به شکل زیر عمل میکنیم:

       char GP[50][1],*rett;

       char Lati[10]={0} , NS[2]={0} , Long[11]={0} , EW[2]={0};

       rett= strchr(X,',');

       strcpy(GP[0],rett);

       strncpy(Lati,GP[1],9);

       strncpy(NS,GP[12],1);

       strncpy(Long,GP[14],10);

       strncpy(EW,GP[26],1);

حالا میتوانیم این جملات را روی LCD نشان دهیم و یا هر عمل تبدیلی دیگری که می خواهیم روی آن انجام دهیم. در نهایت برنامه زیر را خواهیم داشت:

       char GP[50][1],*rett , lcdbuff[16];

       char Lati[10]={0} , NS[2]={0} , Long[11]={0} , EW[2]={0};

       do  scanf("%s",Y);

       while(strncmp(Y,"$GPRMC",6)!=0);

       rett= strchr(X,',');

       strcpy(GP[0],rett);

       strncpy(Lati,GP[1],9);

       strncpy(NS,GP[12],1);

       strncpy(Long,GP[14],10);

       strncpy(EW,GP[26],1);

       sprintf(lcdbuff,"Lat:%s%s",Lati,NS);

       lcd_putsf(lcdbuff);

       sprintf(lcdbuff,"Lon:%s%s",Long,EW);

       lcd_putsf(lcdbuff);

دقت کنید برای کار روی رشته ها کتابخانه string.h را در ابتدا قرار دهید: 

      #include <string.h>

بزودی فیلمی از پروژه آماده شده کنترل GPS توسط ATmega32 به همراه سورس کد آن روی سایت قرار میگیرد.

لطفا سوالات خود را زیر همین پست اعلام کنید

 

برای مطالعه دستورهای GPS کلیک کنید.

برای آشنایی با کتابخانه String.h کلیک کنید.

 

 مطالب مرتبط :

برچسب ها:

Tags: آموزش برق و الکترونیک برنامه GPS برای avr نحوه اتصال GPS به AVR پروژه اتصال GPS به میکروکنترلر AVR کنترل GPS توسط ATmega32 دریافت اطلاعات ماژول GPS توسط میکروکنترلر avr دریافت اطلاعات ماژول GPS دریافت اطلاعات GPS انتقال دیتا از gps به میکرو

دیدگاه‌ها  

# سعید 1397-11-14 15:41
سلام این خط از برنامه که rett= strchr(X,','); نوشته شده وقتی داخل برنامم مینویسم اخطار میگیره میشه راهنمایی کنید در ضمن ممنون از سایت خوبتون.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# قادر 1397-11-14 12:14
سلام ممنون از سایتتون ی سوال داشتم از خدمتتون من برنامه رو نوشتم روی میکرو اما بعد اینکه پروگرام میکنم چیزی روی lcd نمایش نمیده ، میشه سورس پروژه یا اینکه کتابخانه ای که برای gps neo6استفاده کردید چی هست.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# شیدا 1397-10-04 14:51
سلام ممنون ازمطالبتون
چطور میتونم تاریخ و زمان رو. با استفاده از ماژول gpsبخونم؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# علی اکبر 1397-04-20 17:10
مهندس خدا خیرت بده ایشالله هرچی ازدرگاه خدا میخوای بهت بده به خدا خیلی دعات کردم چندروزی بود که خیلی گیر بودم تو این gps تا برنامه ی شما رو دیدم وایده گرفتم ونشستم نوشتم وبه جواب رسیدم
در کل کاش امثال شما زیاد بود تو ایران
فدایی داری
درپناه حق
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# رسول 1397-04-08 12:05
خسته نباشید مهندس.خروجی ماژول ۳.۳ هست.باید به ۵ برسونیم برا اتصال به میکرو؟یا مستقیم وصل میشه.؟اطلاعات روی نمایشگر به هم ریخته است.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# علیرضا 1396-09-13 23:36
سلام
با تشکر
سوال 1)پایه rx ماژول رو به پایه tx میکرو وصل نمی کنید.
سوال 2)از وقفه در تنظیمات usart استفاده نمیکند
سوال 3) در روی نمایشگر دو پارامتر اول که نمایش می دهد طول و عرض جغرافیایی است.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# abbas 1396-06-08 13:07
به نقل از مدیر ارشد:
سلام دوست عزیز
متغیر x سراسری هستش و اول فایل تعریف شده
اون مورد آخر هم دو تا آرگومان هست ، که شما به اشتباه سه مورد دیدید.
موفق باشید

بله برنامه رو چک کردم فرمایش شما درست بود بنده دقت نکرده بودم.
ممنون از پاسختون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مدیر ارشد 1396-06-10 18:22
خواهش میکنم
موفق باشید ;-)
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مهدی راینی 1396-06-07 17:58
با سلام
من این کدو وارد کردم ولی روی lcd بعد پروگزام کردن هییچ چیزو نشون نمیده .اگه میشه راهنماییم کنید خیلی مهمه برام.lcd از نوع 16*2 کاراکتریه
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مدیر ارشد 1396-06-08 00:16
سلام مهدی جان تمام این برنامه ها تست شده هستند و روی سایت قرار گرفتند
شما ببینید توی کدوم یک از مراحل کار ، اشتباه داشتید
موفق باشید
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# abbas 1396-06-06 17:57
با سلام
ممنون بابت آموزشتون
بنده متوجه این خط از برنامه نمیشم
rett= strchr(X,',');
متغییر X کجا تعریف شده
کاراکتر ' کجا تعریف شده
طبق تابع char *strchr(const char *str, int c)
دوتا آرگومان باید باشه نه سه تا
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مدیر ارشد 1396-06-07 01:47
سلام دوست عزیز
متغیر x سراسری هستش و اول فایل تعریف شده
اون مورد آخر هم دو تا آرگومان هست ، که شما به اشتباه سه مورد دیدید.
موفق باشید
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# صادق شگرفی 1394-11-20 17:18
سلام

کاش می شد ایمیل و شماره این مهندسمونو می زاشتید تو سایت

من الان تو تلگرام نمی تونم باهاشون ارتباط برقرار کنم

ممنون میشم
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مدیر ارشد 1394-11-20 19:28
سلام
شماره ی ایشون رو نمیتونم بدم
ایمیلشون :


امیدوارم مشکلتون حل بشه
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# صادق شگرفی 1394-11-19 19:41
یه لطف دیگه هم بکنید اگه میشه یه راه ارتباطی با نویسنده این مطلب بهم بگید تا بتونم مستقیما سوالات و ابهاماتمو ازشون بپرسم چون دارم یه پروژه بزرگ انجام می دم و خیلی کارم گره خورده توش
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مدیر ارشد 1394-11-20 14:14
سلام
ایدی تلگرام نویسنده در مطلب قرار داده شد.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# صادق شگرفی 1394-11-19 19:34
سلام

آقای مهندس این برنامه خیلی نقص داره برادر . اگه امکانش هست سورس کاملو زحمتو بکشید قرار بدین تو سایت

من ماژولم gy-gps6mv2 هستش از شرکت u-blox اما هر چی سعی می کنم خروجی از ماژولم با برنامه بگیرم اعداد و کاراکترهای درهم برهم می ده .

شما چه مقدار کریستالو با این مدل ماژول در نظر گرفتید و با چه باود ریتی؟

من هر مقداری که تغییر دادم خروجی صحیح و درسته ماژول gps خودمو نتونستم بگیرم

ممنون میشم بگید چرا و مقادیرتون چی بوده ؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مدیر سایت 1394-11-20 14:03
سلام دوست عزیز
boud rate که برای میکرو تنظیم میکنید حتما باید با boud rate ماژولتون که تو دیتاشیتش نوشته یکی باشه و فرکانس میکرتونم هرچی که هس باید نرخ بیت یا همون باود ریت براساس اون تنظیم شه رو مقدار boud rate ماژول سورس کاملش هم بزودی قرار میدیم تو سایت
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن

4

پشتیبانی و مشاوره 24 ساعته

ictnic2

تماس با ما

  • تلگرام : ICTNIC2@

به ما بپیوندید

ما را در صفحات اجتماعی دنبال نمایید...

کاربران ثبت نامی

تا این لحظه تعداد

2415 نفر

در وبسایت تخصصی ictnic

ثبت نام و از خدمات ما استفاده می کنند.

ما را در آپارات دنبال کنید

aparat logo fa color black 275x100