سیم کارت GSM - GPRS میکروکنترلر AVR

کنترل و کاهش بسته‌های ارسالی توسط ماژول GPS-neo6m

gps-neo6-eficinency--digispark-
نوشته شده توسط معین صابری

مکان‌یابی با ماژول gps ، موقعیت‌یابی و تعیین محل یک جسم از دیرباز بحثی مهم به شمار می‌رفته است. امروز به مدد وجو ماهواره‌های مختلف، به سادگی و رایگان می‌توان موقعیت هر جسمی را تعیین نمود. شرکت ublox با تولید ماژول‌های مختلف مکان‌یابی، یکی از شرکت‌های پیشرو در زمینه تولید تجهیزات مکان‌یابی ماژول Gps است. یکی از ماژول‌های پر استفاده این شرکت، ماژول Ublox Neo6M است که در اکثر پروژه‌های مکان یابی می‌توان رد این ماژول را مشاهده نمود. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

 


بررسی ماژول Ublox-Neo6m


ماژول Ublox Neo6M پس از روشن شدن، داده‌های خود در غالب فرمتی تحت عنوان (NMEA (National Marine Electronic Association که توسط نیروی دریایی ایالات متحده بنا نهاده شده است، به ما ارسال می‌نماید. ماژول gps، داده‌های خود را تحت این فرمت به صورت بسته‌های با نام‌های زیر ارسال ‌می‌نماید:

  • RMC
  • GLL
  • GSA
  • GSV
  • VTG

هر کدام از بسته‌های فوق، شامل فیلدهای اطلاعاتی هستند که بیانگر طول جغرافیایی، عرض جغرافیایی، سرعت، ارتفاع از سطح دریا، جهت حرکت، تعداد ماهواره‌های قابل رویت، نوع ماهواره‌ها، میزان خطای مکانی و…. را ارائه می‌دهند. از آنجاییکه پس از اتصال ماژول gps به تغذیه، کلیه دادههای فوق دائما به میکروکنترلر از طریق رابط سریال UART ارسال می‌گردند، با توجه به حجم پایین حافظه میکروکنترلرها، ممکن است بافر سریال میکروکنترلر به سرعت پر شده و کار پردازش داده‌های دریافتی با اختلال مواجه گردد؛ چراکه می‌توان انتظار داشت که بافر سریال میکروکنترلر از نوع بافر حلقوی بوده و پس از پر شدن بافر، داده‌های جدید از ابتدا بر روی بافر نوشته شده و اطلاعات قبلی از دست بروند. به همین جهت، بهینه‌سازی داده‌های دریافتی از سوی ماژول gps، نیازی جدی محسوب می‌گردد. خوشبختانه این مشکل توسط طراحان این ماژول پیشبینی شده و می‌توان تعیین نمود که چه داده‌هایی از سوی ماژول ارسال گردند و داده‌های غیر لازم، فیلتر گردند.

اتصالات ماژول GPS با میکروکنترلر AVR - دیجی اسپارک

 

ارسال دستورات

 به همین جهت، با ارسال دستورات مشخص به ماژول، می‌توان از ارسال پکت‌ها، مانع شد. به طور کلی، داده RMC بهینه ترین داده‌ها شامل طول، عرض، سرعت و… را ارایه می‌دهد. بنابراین، با ارسال دستورات زیر، می‌توان از ارسال سایر بسته‌ها توسط ماژول gps جلوگیری نمود:

 

$PUBX,40,GLL,0,0,0,0*5C\r\n

$PUBX,40,GSA,0,0,0,0*4E\r\n

$PUBX,40,GSV,0,0,0,0*59\r\n

$PUBX,40,VTG,0,0,0,0*5E\r\n

$PUBX,40,GGA,0,0,0,0*5A\r\n

با ارسال دستورت فوق به ماژول gps، هر یک از بسته‌های غیر از بسته RMC فیلتر شده و دیگر ارسال نمی‌گردند. بدین ترتیب، میکروکنترلر تنها فیلدهای اطلاعاتی حاوی بسته RMC را دریافت خواهد نمود و این امر سبب سبک شدن بافر سریال شده و فرآیند جداسازی اطلاعات دریافتی از ماژول، بسیار کوتاه خواهد شد.

شماتیک اتصالات ماژول GPS با میکروکنترلر AVR - دیجی اسپارک

 


کد AVR تحت محیط کدویژن


در زیر کدهای پروژه قرار گرفته شده است. کدها تحت میکروکنترلر AVR Atmega16 و محیط کدویژن Codevision، توسعه یافته است:

 

/*********************************************
This program was produced by the
CodeWizardAVR V1.23.8c Standard
Automatic Program Generator
© Copyright 1998-2003 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:office@hpinfotech.ro

Project : 
Version : 
Date    : 4/22/2019
Author  : Moeen Saberi                       
Company :                                 
Comments: 


Chip type           : ATmega16
Program type        : Application
Clock frequency     : 8.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*********************************************/

#include <mega16.h>

// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
GICR|=0x00;
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;
// فرامین مربوط به توقف ارسال داده‌های اضافی توسط ماژول
      printf("$PUBX,40,GGA,0,0,0,0*5A\r\n");//GGAتوقف ارسال بسته ‌های
      delay_ms(700);       
      //********************************
      printf("$PUBX,40,GLL,0,0,0,0*5C\r\n");");//GLLتوقف ارسال بسته ‌های
      delay_ms(700);
      //*********************************  
      printf("$PUBX,40,GSA,0,0,0,0*4E\r\n");//");//GSAتوقف ارسال بسته ‌های
      delay_ms(700);
      //********************************
      printf("$PUBX,40,GSV,0,0,0,0*59\r\n");//");//GSVتوقف ارسال بسته ‌های
      delay_ms(700);
      //*******************************
      printf("$PUBX,40,VTG,0,0,0,0*5E\r\n");");//VTGتوقف ارسال بسته ‌های
      delay_ms(700);  
//*********************************************************************

while (1)
      {
      // Place your code here

      };
}

 

 


وسایل مورد نیاز


ماژول مکان یاب NEO6MV2 GPS جی پی اس Gy-GPS6MV2

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

 

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۳ دیدگاه