یکی از معروف ترین ماژول های ارتباطی GSM/GPRS ماژول Sim900 می باشد که در بسیاری از کاربردهای صنعتی ، نیمه صنعتی و تجاری از آن استفاده می گردد. با استفاده از این ماژول کارهای بسیاری از قبیل تماس تلفنی و ارسال/دریافت sms گرفته تا برقراری ارتباط با اینترنت و ارسال/دریافت دیتا میتوان انجام داد. استفاده از این ماژول در کنار میکروکنترلر به علت سادگی ارتباط و دستورات ، مرسوم بوده و باعث کنترل هوشمند پروژه می شود.
معرفی ماژول sim900
یک ماژول ارتباطی بدون سیم کوچک و فوق العاده است که توسط شرکت SimCom تولید می شود. این ماژول از چهار باند GSM/GPRS پشتیبانی می کند. دارای هسته پردازشی قدرتمند ARM926EJ-S می باشد که در یک بسته بندی SMT ( تکنولوژی روی سطح بورد ) ارائه می شود. از این ماژول می توان در کاربردهای M2M ( ماشین به ماشین ) با ابعاد کوچک و توان مصرفی پایین استفاده نمود. شکل زیر این ماژول را نشان می دهد.
معرفی ویژگی ها و امکانات ماژول Sim900
ویژگی های عمومی
چهار باند ۸۵۰/۹۰۰/۱۸۰۰/۱۹۰۰ مگاهرتز
دریافت GPRS کلاس ۸ و ۱۰
ایستگاه GPRS کلاس B
ابعاد : ۲۴ در ۲۴ در ۳ میلیمتر
وزن : ۳٫۴ گرم
ولتاژ کاری : ۳٫۴ تا ۴٫۵ ولت
دمای عملکرد : ۳۰- تا ۸۰+ درجه سانتیگراد
ویژگی های پیام کوتاه
قابلیت ارسال/دریافت به صورت Point to Point و MT ( مخفف Mobile Terminated ) و MO ( مخفف Mobile Originated ) و قابلیت ارسال یک sms به چند گیرنده در دو فرمت متنی ( text ) و پروتکل PDU ( مخفف protocol description unit )
ویژگی های دیتا
GPRS کلاس ۱۰ : دریافت تا ۸۵٫۶kbps ( دانلود ) و ارسال تا ۴۲٫۸kbps ( آپلود ) تحت پروتکل TCP/IP
ویژگی های صدا
دارای سه نوع کدبندی Half rate ، Full rate ، Enhanced Full rate به صورت AMR ( مخفف Adaptive Multi-Rate Audio Codec ) و قابلیت عملکرد در حالت هندزفری
رابط ها
رابط سیم کارت خارجی ۳ ولت / ۱٫۸ ولت
رابط ورودی/خروجی صدای آنالوگ
رابط های سریال SPI و UART
واحدهای RTC ، PWM و ADC
پایه های ورودی/خروجی قابل برنامه ریزی
بلوک دیاگرام ماژول sim900
تشریح پایه های Sim900
نام | شماره پایه | توضیحات |
PWRKEY | ۱ | دکمه ریست/روشن کردن ماژول |
VBAT | ۵۵,۵۶,۵۷ | ورودی تغذیه مثبت ماژول |
GND | ۱۷,۱۸,۲۹,۳۹,۴۵,۴۶,۵۳,۵۴,۵۸,۵۹,۶۱,۶۲,۶۳,۶۴,۶۵ | ورودی تغذیه منفی ماژول |
VRTC | ۲۶ | تغذیه پشتیبان برای ساعت |
STATUS | ۶۶ | تعیین وضعیت برقراری تغذیه |
NETLIGHT | ۵۲ | تعیین وضعیت ارتباط با شبکه |
RXD | ۱۰ | پایه دریافت دیتای سریال |
TXD | ۹ | پایه ارسال دیتای سریال |
SIM_VDD | ۳۰ | پایه های ارتباط با سیم کارت |
SIM_DATA | ۳۱ | |
SIM_CLK | ۳۲ | |
SIM_RST | ۳۳ | |
SIM_PRESENCE | ۳۴ | |
MIC_P | ۱۹ | پایه های ورودی میکروفن |
MIC_N | ۲۰ | |
SPK_P | ۲۱ | پایه های خروجی اسپیکر |
SPK_N | ۲۲ | |
RF_ANT | ۶۰ | پایه آنتن |
تذکر : پایه ۵۲ طبق جدول زیر وضعیت سیستم را نشان می دهد.
طراحی مدار بورد راه انداز ماژول Sim900
الف) طراحی منبع تغذیه
این ماژول برای کار نیاز به یک منبع با ولتاژ بین ۳٫۴v تا ۴٫۵v دارد. همچنین مقدار متوسط جریان مصرفی آن در حالت بیکاری ۲۲mA و در حالت کار (مانند ارسال پیامک) ۴۰۰mA می باشد.
نکته مهمی که در اینجا وجود دارد پیک بالای جریان لحظه ای این ماژول است. در شکل زیر موج جریان این ماژول را مشاهده می کنید. مطابق این شکل موج ماژول SIM900 به صورت لحظه ای جریانی تا حدود ۲A مصرف می کند. در پیک جریان ولتاژ منبع تغذیه نباید بیشتر از ۴۰۰mV افت کند زیرا باعث ریست شدن ماژول می گردد.
برای تامین این پیک جریان استفاده از دو خازن تانتانیوم موازی با ظرفیت های ۱۰۰uF و ۱۰۰nF در مسیر تغذیه ماژول الزامی است.
همچنین برای تغذیه مدار و ماژول میتوان از رگولاتور LM317 به صورت مدار پیشنهادی زیر استفاده کرد :
ب) طراحی مدار POWER KEY
روشن/خاموش کردن ماژول از طریق پایه PWRKEY میسر می شود. این پایه از داخل پول آپ بوده و بنابراین پس از اعمال ولتاژ به ماژول برای روشن کردن آن بایستی پایه PWRKEY را برای مدت حداقل یک ثانیه صفر کنیم. برای خاموش کردن ماژول نیز به همین صورت عمل می کنیم. در صورتی که بخواهیم این کار را به صورت دستی انجام دهیم از مدار شکل زیر استفاده می شود. که در آن TVS1 نقش محافظتی دارد و میتوان آن را حذف نمود.
برای کنترل روشن/خاموش کردن ماژول توسط میکروکنترلر میتوان از مدار زیر استفاده کرد :
ج) اتصال ماژول به میکرو
همانطور که گفته شد این ماژول از طریق پورت سریال UART ارتباط برقرار می کند. در شکل زیر حداقل سیم بندی مورد نیاز برای ارتباط این ماژول با میکروکنترلر را مشاهده می کنید.
مشخصات فریم پروتکل UART برای برقراری ارتباط :
- تعداد بیت های ارسالی : ۸ بیت
- تعداد Stop Bit : 1 بیت
- نوع Parity : غیرفعال
سرعت ارتباط ( Buad Rate ) : سرعت ارتباط با ماژول یکی از باودریت های استانداد بین محدوده ۱۲۰۰تا ۱۱۵۲۰۰ می تواند باشد. ماژول سرعت ارتباط را به طور خودکار تشخیص می دهد ( AutoBauding ). برای این کار کافی است در ابتدا یکبار کاراکتر ‘A’ را به ماژول ارسال کنیم.
د) مدار اتصال به سیم کارت
بورد راه انداز Sim900
معرفی دستورات AT Command
ماژول SIM900 دستوراتی را به صورت کاراکترهای Ascii دریافت می کند و به همان صورت نیز به آنها پاسخ می دهد. در ابتدای همه دستورات دو کاراکتر AT ارسال می شوند لذا به مجموعه آن دستورات AT Command گویند. در انتهای هر دستور نیز کاراکتر Enter باید ارسال شود تا ماژول دستور مورد نظر را انجام داده و پاسخ آن را ارسال نماید.
مثال : دستور AT
این دستور برای تست سلامت ارتباط با ماژول می باشد. ماژول در پاسخ به این دستور OK می دهد.
AT[Enter] OK
مثال : دستور AT+CSQ
ماژول در پاسخ به این دستور دو عدد را بر می گرداند. عدد اول قدرت سیگنال آنتن با عددی بین ۰ تا ۳۲ و عدد دوم نشان دهنده جزئیاتی است که برای ما در اینجا اهمیتی ندارد.
AT+CSQ[Enter] +CSQ: 14,0 OK
مثال : دستور AT+CBC
ماژول در پاسخ به این دستور سه عدد را برمی گرداند. عدد اول نشان دهنده در حال شارژ بودن باتری است. عدد دوم نشان دهنده میزان شارژ باتری با عددی بین ۰ تا ۱۰۰ است و عدد سوم ولتاژ باتری را بر حسب میلی ولت نشان می دهد.
AT+CBC[Enter] +CBC: 0,100,4338
نکته : کاراکتر [Enter] در کد Ascii برابر با ۱۳(hex) می باشد. به این کاراکتر LF ( مخفف Line Feed ) نیز گفته می شود و در زبان سی nn\ معادل آن است.
انواع AT Command
یک دستور AT را میتوان به چهار صورت زیر نوشت :
۱-دستور تست ( Test Command ) : در این حالت دستور به صورت زیر به ماژول داده می شود و ماژول لیست پارامترها و محدوده تغییرات آن ها را در پاسخ به این دستور برمیگرداند.
AT + <x> = ?
۲-دستور خواندن ( Read Command ) : در این حالت دستور به صورت زیر به ماژول داده می شود و ماژول مقادیری که روی آن تنظیم شده است را در پاسخ به این دستور برمیگرداند.
AT + <x> ?
۳-دستور نوشتن ( Write Command ) : در این حالت دستور به صورت زیر به ماژول داده می شود و مقادیری که بعد از مساوی ارسال می شود درون ماژول تنظیم می شود.
AT + <x> = <...>
۴-دستور اجرایی ( Execution Command ) : در این حالت دستور به صورت زیر داده می شود و هیچ پارامتری برای آن وجود ندارد و ماژول فقط دستور را اجرا می کند.
AT + <x>
معرفی پرکاربردترین AT Command ها
الف – دستورات عمومی
دستور | توضیح |
AT |
تست سلامت ارتباط با ماژول |
ATI |
نمایش مشخصات ماژول |
ATE |
فعال/غیرفعال کردن اکو |
ATA |
پاسخ دادن به تماس ورودی |
ATH |
رد کردن تماس ورودی |
AT+CSQ |
نمایش قدرت سیگنال شبکه |
AT+CBC |
نمایش ولتاژ تغذیه ماژول |
AT+GMR |
نمایش مشخصات firmware |
AT+CIPIN=”xxxx” |
بازکردن شماره پین |
AT+IPR |
مشخص کردن باودریت ماژول |
ب – دستورات تنظیم زمان
دستور | توضیح |
AT+CCLK? |
خواندن زمان کنونی ماژول |
AT+CCLK=”YY/MM/DD,HH:MM:SS+02” |
تنظیم زمان و تاریخ |
پ – دستورات ذخیره شماره تلفن
دستور | توضیح |
AT+CPBS=”ON” | آماده سازی ماژول برای ذخیره شماره |
AT+CPBW=1,”+۹۸*”,number,”NAME” | ذخیره شماره number با نام دلخواه NAME در خانه اول حافظه سیم کارت |
AT+CNUM | نمایش شماره سیم کارت در صورت وجود |
AT+CPBS=”SM” | انتخاب دفترچه تلفن حافظه سیم کارت |
AT+CPBR=1,5 | نمایش از مکان ۱ تا ۵ حافظه انتخاب شده |
ت – دستورات تماس صوتی Voice Call
دستور | توضیح |
AT+CHFA? | بررسی تنظیمات کانال صوتی ( ۰:Handset , 1:Aux ) |
ATA | پاسخ دادن به تماس ورودی |
ATH | رد کردن تماس ورودی |
ATD+NUM; | تماس با شماره ی NUM |
ATDL | شماره گیری مجدد آخرین تماس |
ATLX | تنظیم بلندی صدای اسپیکر ( X بین ۰ تا ۹ ) |
ث – دستورات پیام کوتاه SMS
دستور | توضیح |
AT+CMGF=1 |
تنظیم حالت نمایش روی Text Mode |
AT+CSCS=”GSM” |
تنظیم فرمت نمایش ( Character Set ) |
AT+CNMI=2,1,0,0 |
تنظیم نمایش sms جدید به محض دریافت آن |
AT+CSAS=0 |
ذخیره تنظیمات sms روی پروفایل شماره ۰ |
AT+CMGS=”+۹۸…”[Enter] > yourMessage[ctrl+z] |
فرستادن sms |
AT+CMGW[Enter] > yourMessage[cntl+z] |
ذخیره sms |
AT+CMSS=1,”+۹۸…”,۱۴۵ |
ارسال sms ذخیره شده از قبل |
AT+CMGDA=”DEL READ” |
پاک کردن sms های خوانده شده |
AT+CMGDA=”DEL ALL” |
پاک کردن همه sms ها |
ج – دستورات عمومی تنظیم اینترنت GPRS
دستور | توضیح |
AT+CGATT=1 | اضافه کردن قابلیت GPRS |
AT+CIPMUX=0 | تنظیم نوع اتصال Single Connection |
AT+CIPMUX=1 | تنظیم نوع اتصال Multiple Connection |
AT+CIPMODE=0 | تنظیم نوع اتصال روی نرمال ( غیر شفاف ) |
AT+CIPMODE=1 | تنظیم نوع اتصال روی شفاف (Transparent) |
چ – دستورات GPRS در حالت Client
دستور | توضیح |
AT+CSTT=”mtnirancell”,””,”” |
تنظیمات متصل شدن به اینترنت ایرانسل |
AT+CIPSRIP=1 |
نمایش IP وسیله اتصال دهنده |
AT+CIICR |
فراهم کردن ارتباط بی سیم GPRS |
AT+CIFSR |
نمایش آی پی ماژول در شبکه |
AT+CIPSTART=”TCP”,”<ip>”,”port” |
اتصال به سرور با داشتن ip و port آن |
AT+CIPSTATUS |
وضعیت اتصال را نشان می دهد |
AT+CIPSEND[enter] > Data to Sent[cntl+z] |
ارسال دیتا به سرور |
AT+CIPSHUT |
قطع ارتباط با سرور |
ح – دستورات راه اندازی سرور GPRS
دستور | توضیح |
AT+CIPCSGP=1,”mtnirancell”,””,”” |
پیداکردن اتصال GPRS ایرانسل |
AT+CIPSRIP=1 |
نمایش ip و port اتصال |
AT+CIPSERVER=1,<port> |
راه اندازی یک سرور روی پورت |
نکته : در یکی از شرایط زیر ماژول به حالت Power down می رود :
- در حالت روشن پایه PWRKEY را زمین کرد ( فشار دادن دکمه پاور )
- توسط ارسال دستور AT+CPOWD=1
- در صورت افزایش/کاهش ولتاژ تغذیه بیشتر/کمتر از حد مجاز
- در صورت افزایش/کاهش دمای ماژول به بیشتر/کمتر از حد مجاز
راه اندازی سریع Sim900 و ارتباط آن با کامپیوتر
برای راه اندازی سریع این ماژول از بورد راه اندازی sim900 ، ماژول تغذیه متغیر LM2576 و ماژول USB به سریال FT232 به صورت شکل زیر استفاده می کنیم.
در شکل زیر مدار نهایی بسته شده توسط آیسی پالس را مشاهده می کنید.
راه اندازی سریع Sim900 و تست دستورات AT در ترمینال کامپیوتر
بعد از بستن مدار راه اندازی سریع و وصل کردن آن به کامپیوتر از یک نرم افزار ترمینال دلخواه جهت ارتباط با ماژول استفاده می کنیم. سپس با قرار دادن باودریت مناسب ، دستورات AT را ارسال و مقدار بازگشتی توسط ماژول را مشاهده خواهیم کرد.
به محض فشردن دکمه POWER به مدت یک ثانیه ماژول روشن می گردد و بعد از یافتن باودریت به طور اتوماتیک ، اطلاعات زیر را نمایش می دهد.
CPIN: NOT INSERTED نشان دهنده این است که سیم کارت روی ماژول وجود ندارد.
CFUN: 1 نشان دهنده این است که عملکرد ماژول در حالت Full Functionality ( عملکرد کامل و نرمال ) است.
اگر سیم کارت وجود داشته باشد و سیم کارت پین کد نداشته باشد ، به محض روشن شدن اطلاعات زیر به نمایش در می آید.
که نشان دهنده آماده بودن سیم کارت و فعال بودن آن برای تماس است.
تست دستورات CBC و CSQ ( نمایش قدرت سیگنال و ولتاژ ماژول ) :
در صورتی که با سیم کارت موجود تماس ورودی گرفته شود عبارت RING پیوسته به نمایش در می آید.
برای مشاهده شماره تلفنی که تماس ورودی گرفته است ابتدا توسط دستور AT+CLIP=1 قابلیت Caller id را فعال می کنیم. سپس در صورت تماس ورودی با سیم کارت موجود ، شماره تماس گیرنده با پیشوند +CLIP: به صورت زیر نمایش داده می شود.
برای پاسخ به تماس ورودی گرفته شده از دستور ATA و برای رد کردن/قطع کردن تماس ورودی از ATH استفاده می گردد.
برای گرفتن تماس خروجی به یک شماره خاص کافی است شماره مورد نظر را بعد از دستور ATD به همراه یک سمیکالن ; به ماژول ارسال نماییم. برای مثال برای تماس به شماره ۰۹۱۰۹۲۴۶۲۹۳ کافی است دستور ATD+989109246293; ارسال شود.
نکته : بعد از نمایش OK ماژول سعی می کند با شماره تماس بگیرد.اگر تماس به هر علتی برقرار نشود ( مانند اتمام شارژ یا متصل نبودن به شبکه ) عبارت NO CARRIERR توسط ماژول پاسخ داده می شود و در صورتی که مخاطب به تماس پاسخ ندهد عبارت NO ANSWER به نمایش در می آید.
در صورتی که پیام کوتاه ( SMS ) توسط ماژول دریافت گردد ، ماژول عبارت +CMTI به همراه محل ذخیره پیام و تعداد پیام های خوانده نشده را به صورت زیر ارسال می نماید.
برای خواندن SMS موجود در inbox حافظه ماژول کافی است دستور AT+CMGR=n ارسال شود که در آن n شماره پیام می باشد. برای مثال اگر n=1 اولین پیام موجود در inbox خوانده می شود. سپس ماژول پیام مورد نظر را نمایش می دهد.
همانطور که مشاهده می کنید خواندن SMS با فرمت PDU می باشد. برای تبدیل فرمت نمایش SMS به صورت متنی ( text ) از دستور AT+CMGF=1 استفاده می کنیم. بعد از ارسال این دستور نمایش SMS ها به همراه مشخصات ارسال کننده ( شماره تماس ، ساعت و تاریخ ) و متن پیام قابل مشاهده می شود.
برای خواندن همه پیام های موجود در inbox به صورت یکباره از دستور AT+CMGL=”ALL” استفاده می شود. بعد از ارسال این دستور ماژول همه پیام های ذخیره شده را به همراه شماره تماس فرستنده ، ساعت و تاریخ دریافتی به صورت یکباره نمایش می دهد.
نکته : حافظه Sim900 برای ذخیره SMS ها محدود می باشد. در صورتی که این حافظه پر شود ، مازول دیگر هیچ SMS ی را نمیتواند دریافت کند. برای تخلیه حافظه ماژول از دستور AT+CMGDA=”DEL ALL” استفاده می شود.
برای ارسال SMS به یک شماره خاص مثلا شماره ۰۹۱۰۹۲۴۶۲۹۳ از دستور AT+CMGS=”+۹۸۹۱۰۹۲۴۶۲۹۳″ استفاده می شود. بعد از ارسال این دستور ماژول با ارسال کاراکتر < منتظر دریافت متن SMS می شود. متن SMS به صورت کاراکترهای Ascii به ماژول ارسال می شود که در پایان باید کاراکتر Ctrl+Z ( یعنی ۰x1A در مبنای هگز ) نیز ارسال شود. سپس ماژول SMS را به طور اتوماتیک ارسال می کند.
تذکر : در بیشتر نرم افزارهای ترمینال ارسال کاراکترهای کنترلی نظیر Ctrl+z امکان پذیر نمی باشد. به همین علت و برای راحتی کار با ماژول Sim9000 و نیز کاهش زمان تایپ کردن از نرم افزارهای ترمینال مخصوصی استفاده می شود. بهترین نرم افزار برای ارتباط با بیشتر ماژول های ارتباطی ، نرم افزار RSTermPlus می باشد.
تست کامل Sim900 در نرم افزار RSTerm
بعد از باز کردن این نرم افزار ، ابتدا پورت COM و Buad Rate را جهت ارتباط با ماژول تنظیم می کنیم. سپس برای ارسال هر دستور AT کافی است روی دکمه مربوطه کلیک نماییم. نرم افزار اتوماتیک دستور مورد نظر را به همراه کاراکترهای کنترلی مورد نیاز ارسال می نماید و پاسخ دریافتی را نمایش می دهد. شکل زیر محیط نرم افزار و نحوه کار با این نرم افزار را نشان می دهد.
با استفاده از این نرم افزار میتوان به راحتی همه دستورات AT را تست و نتیجه آنها را مشاهده کرد. نرم افزار به طور اتوماتیک کاراکترهای کنترلی از قبیل CR,LF,Ctrl+z را ارسال می کند. برای مثال در شکل زیر پس از نمایش مقدار شارژ سیم کارت ( از طریق منوی Voice ) ، یک SMS ارسال کردیم ( از طریق منوی SMS ).
ارتباط ماژول SIM900 با شبکه
این ماژول می تواند در دو حالت مختلف در کاربردهای TCP/IP متصل شود :
- single connection
- multi connection
در حالت اتصال تکی ماژول می تواند به صورت شفاف ( Transparent ) و غیرشفاف ( Non Transparent ) ارتباط برقرار کند. در هر دو این حالت ها SIM900 میتواند به صورت کلاینت ( TCP یا UDP ) و سرور ( فقط TCP ) متصل شود. در حالت اتصال چندگانه SIM900 فقط می تواند به صورت غیرشفاف متصل شود به طوری که در حالت TCP/UDP کلاینت تا ۸ کانکشن و در حالت TCP سرور تا ۷ کانکشن را پشتیبانی می کند. شکل زیر ساختار انواع ارتباطات این ماژول را نشان می دهد.
همانطور که مشاهده می کنید ، برای انتخاب حالت Single Connection از دستور AT+CMUX=0 و برای حالت Multi Connection از دستور AT+CMUX=1 استفاده می شود.
همچنین دستور AT+CIPMODE=n برای مشخص کردن Transparent(n=1) یا Non-Transparent(n=0) بودن ارتباط است. که در حالت پیش فرض Non-Transparent می باشد.
نحوه راه اندازی ارتباط Single TCP Client
این نوع ارتباط برای اتصال ماژول Sim900 به یک سرور استفاده می شود. برای راه اندازی این نوع ارتباط ابتدا توسط دستورات AT+CREG و AT+CGAAT فعال بودن سیم کارت و متصل بودن آن به شبکه را بررسی می کنیم. در مرحله دوم با استفاده از دستورات AT+CSTT ، AT+CIICR و AT+CIFSR اقدام به شروع و فعال سازی ارتباط GPRS می کنیم. در مرحله سوم با استفاده از دستور AT+CIPSTART میتوان به سرور مورد نظر متصل شد. اگر اتصال به سرور صورت گیرد عبارت CONNECT OK توسط ماژول پاسخ داده می شود و بعد از آن میتوان از دستور AT+CIPSEND برای دیتا برای سرور ارسال نمود. اگر دیتایی از طرف سرور برای ماژول ارسال شود به طور اتوماتیک توسط ماژول نمایش داده می شود. برای قطع ارتباط نیز از دستور AT+CIPCLOSE استفاده می گردد. شکل زیر اجرای این مراحل را در نرم افزار RSTerm نشان می دهد.
راه اندازی sim900 در AVR
در میکروکنترلرهای AVR با راه اندازی واحد USART میکروکنترلر میتوان با ماژول Sim900 ارتباط برقرار کرد. نحوه ارتباط در شکل زیر نشان داده شده است. به علت اینکه ولتاژ عملکرد میکرو ۵ ولت بوده اما ولتاژ عملکرد ماژول کمتر از ۴٫۵ می باشد بهتر است از یک دیود جهت کاهش ولتاژ به اندازه ۰٫۷ ولت استفاده نماییم.
در شکل زیر مدار نهایی بسته شده توسط آیسی پالس را مشاهده می کنید.
آموزش برنامه نویسی Sim900 در AVR
برای برنامه نویسی این ماژول دو روش وجود دارد یکی بدون وقفه و دیگری با وقفه. به علت اینکه روش بدون وقفه روش مناسبی نیست ، از ذکر آن صرفنظر می شود. شکل زیر تنظیمات روش با وقفه را در کدویزارد نشان می دهد.
تذکر : ماژول sim900 با همه باودریت ها کار می کند. اما در میکروکنترلرهای AVR بهتر است میکروکنترلر را با فرکانس ۸Mhz داخلی و واحد USART میکرو را با باودریت ۹۶۰۰۰ راه اندازی کنیم.
بعد از تولید کد توسط نرم افزار کدویزارد ، مشاهده می شود یک سری توابع و ثوابت به برنامه اضافه شده است. این ثوابت و توابع به منظور ارتباط با واحد USART می باشد و میتوان از آنها نیز استفاده نمود اما روش بهتر و ساده تر آن است که همه آنها را حذف نماییم. بنابراین بعد از حذف آنها برنامه به صورت زیر تقلیل می یابد. سپس آماده نوشتن برنامه می شویم.
#include <mega32.h> #include <delay.h> #include <stdio.h> #include <string.h> //global variables // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { } void main(void) { // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x98; UCSRC=0x86; UBRRH=0x00; UBRRL=0x33; //set enable interrupt #asm("sei"); while(1) { } }
تذکر : تابع روتین وقفه دریافت از پورت سریال را قبل از تابع main مشاهده می کنید. به محض این که یک کاراکتر از پورت سریال دریافت شود ، برنامه درون این سابروتین می رود.
نکته : جهت ذخیره کاراکتر دریافتی درون سابروتین وقفه دریافت از پورت سریال می بایست یک متغیر از نوع char تعریف کرد و محتویات رجیستر UDR ( مخفف Usart Data Registerr ) که حاوی کاراکتر دریافتی می باشد را درون آن ذخیره کرد.
//global variables char data; // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { data = UDR; }
نکته : جهت ذخیره یک رشته از کاراکترها درون سابروتین وقفه دریافت از پورت سریال می بایست یک آرایه از نوع char تعریف کرد سپس کاراکترهای دریافتی را یکی یکی و به ترتیب درون آن آرایه ذخیره کرد. به چنین آرایه ای اصطلاحا بافر ( Bufferr ) گفته می شود. برای شمارش تعداد کاراکترهای دریافتی از یک متغیر استفاده می کنیم که شماره کاراکتر ذخیره شده در درون آرایه را مشخص می کند و با آمدن هر کاراکتر یک واحد به آن اضافه می گردد.
//global variables char Buffer[10]; int i=0; // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { Buffer[i] = UDR; i++; }
همانطور که در برنامه فوق مشاهده می کنید ، یک آرایه به طول ۱۰ تعریف شده است. با هر بار آمدن وقفه دریافت ، یک کاراکتر درون آرایه به ترتیب از خانه شماره ۰ آرایه تا خانه شماره ۹ آرایه ذخیره می گردد. بنابراین برنامه فوق در مجموع ۱۰ کاراکتر ذخیره می کند.
نکته : سایز آرایه بافر اهمیت زیادی دارد. آرایه بافر باید به اندازه کافی بزرگ باشد چرا که برای مثال در هنگام دریافت sms باید همه کاراکترهای آن smss ابتدا درون آرایه بافر ذخیره گردد. از طرفی در صورت بزرگ بودن بیش از اندازه بافر هم حافظه زیادی اشغال می شود و هم زمان زیادی صرف جستجو درون آرایه بزرگ می گردد که منجر به کند شدن برنامه می شود.
در نتیجه برنامه نهایی اصلاح شده برای دریافت از پورت سریال به صورت زیر می باشد. علت استفاده از if بعد از ذخیره کاراکتر این است که اگر به انتهای آرایه بافر رسیده باشیم ، شمارنده بافر صفر شود و کاراکتر جدید در ابتدای آرایه بافر ذخیره می گردد. دقت کنید که در این حالت کاراکتر قبلی Over Written می شود.
#define BUFSIZE 20 //global variables unsigned char BUFCount=0; char UARTBUFFER[BUFSIZE]; // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { UARTBUFFER[BUFCount] = UDR; BUFCount++; if(BUFCount==BUFSIZE) BUFCount=0; }
هر کجای برنامه که نیاز داشته باشیم به ماژول Sim900 کامندی ارسال کنیم ، ابتدا یک آرایه به طول حداکثر آن کامند ایجاد می کنیم و سپس توسط تابع sprintf کامند مورد نظر را به همراه کاراکتر های CR و LF درون آرایه می ریزیم. سپس با استفاده از تابع puts آرایه مورد نظر را به پورت سریال جهت ارسال به ماژول می فرستیم. در خطوط زیر نحوه ارسال دستور AT به ماژول را مشاهده می کنید.
char str[10]; sprintf(str,"AT\r\n"); puts(str);
هر کجای برنامه که بخواهیم متوجه شویم ماژول چه چیزی به میکرو فرستاده است کافی است آرایه بافر را مشاهده و بررسی نماییم. یکی از راه های بررسی آرایه بافر جستجو یک عبارت خاص درون آن با استفاده از تابع strstr ( درون string.h ) می باشد. برای مثال اگر بخواهیم ببینیم که در جواب ارسال دستور AT ، ماژول پاسخ OK داده است یا خیر باید رشته “OK” را درون آرایه بافر جستجو نماییم.
a = strstr(UARTBUFFER,"OK");
خروجی تابع strstr یک اشاره گر به اولین محل تطبیق درون آرایه UARTBUFFER می باشد. در صورتی که هیچ تطبیقی وجود نداشته باشد NULL به خروجی تابع می رود.
تفاوت بین SIM900 و SIM900A
تفاوت این دو ماژول در فرکانس ارتباطی آن ها ، ولتاژ تغذیه و قیمت تمام شده می باشد. ماژول های SIM900 از ۴ باند فرکانسی ۸۵۰,۹۰۰,۱۸۰۰,۱۹۰۰ مگاهرتز پشتیبانی می کند در حالی که ماژول SIM900A از دو باند فرکانسی ۹۰۰ و ۱۸۰۰ مگاهرتز پشتیبانی می نماید. ولتاژ تغذیه SIM900 بین ۳٫۴ الی ۴٫۵ ولت اما ولتاژ تغذیه SIM900A بین ۳٫۲ الی ۴٫۸ ولت است. این دو ماژول از نظر دستورات و ATcommand ها تفاوتی با هم ندارند. در شکل زیر ماژول SIM900A را مشاهده می نمایید.
معرفی ماژول Sim800
ماژول Sim800 یکی دیگر از محصولات شرکت Simcom است که تمامی قابلیت های Sim900 را دارا می باشد. این ماژول علاوه بر قابلیت های Sim900 دارای بلوتوث داخلی و پورت USB می باشد. هر دو این ماژول ها از دستورات AT مشابه استفاده می کنند. قیمت تمام شده Sim800 پایین تر از Sim900 بوده و به همین علت در پروژه های کم هزینه به صرفه تر می باشد. در شکل زیر این ماژول را مشاهده می کنید.
در جدول شکل زیر مقایسه کاملی بین این دو ماژول از نظر پایه ها و قابلیت ها آورده شده است.
برد راه انداز کاربردی صنعتی sim808
این برد یکی از بهترین بردهای راه انداز ماژول سیم کارتی در بازار می باشد که نسبت به مدل sim900 و sim800 پیشرفته تر می باشد و نه تنها با پورت usb بلکه با پورت سریال به کامپیوتر هم وصل میشود و دارای بلوتوث داخلی نیز می باشد و همچنین دارای کانکتورهای آنتن کوچک و بزرگ برای اتصال همه مدل آنتن را می باشد.
برای خرید برد کاربردی صنعتی sim808 روی لینک زیر کلیک کنید