مقدمه
یکی از معروف ترین ماژول های ارتباطی GSM/GPRS ماژول Sim900 می باشد که در بسیاری از کاربردهای صنعتی ، نیمه صنعتی و تجاری از آن استفاده می گردد. با استفاده از این ماژول کارهای بسیاری از قبیل تماس تلفنی و ارسال/دریافت sms گرفته تا برقراری ارتباط با اینترنت و ارسال/دریافت دیتا میتوان انجام داد. استفاده از این ماژول در کنار میکروکنترلر به علت سادگی ارتباط و دستورات ، مرسوم بوده و باعث کنترل هوشمند پروژه می شود.
معرفی ماژول sim900
یک ماژول ارتباطی بدون سیم کوچک و فوق العاده است که توسط شرکت SimCom تولید می شود. این ماژول از چهار باند GSM/GPRS پشتیبانی می کند. دارای هسته پردازشی قدرتمند ARM926EJ-S می باشد که در یک بسته بندی SMT ( تکنولوژی روی سطح بورد ) ارائه می شود. از این ماژول می توان در کاربردهای M2M ( ماشین به ماشین ) با ابعاد کوچک و توان مصرفی پایین استفاده نمود. شکل زیر این ماژول را نشان می دهد.
معرفی ویژگی ها و امکانات ماژول Sim900
ویژگی های عمومی
چهار باند 850/900/1800/1900 مگاهرتز
دریافت GPRS کلاس 8 و 10
ایستگاه GPRS کلاس B
ابعاد : 24 در 24 در 3 میلیمتر
وزن : 3.4 گرم
ولتاژ کاری : 3.4 تا 4.5 ولت
دمای عملکرد : 30- تا 80+ درجه سانتیگراد
ویژگی های پیام کوتاه
قابلیت ارسال/دریافت به صورت Point to Point و MT ( مخفف Mobile Terminated ) و MO ( مخفف Mobile Originated ) و قابلیت ارسال یک sms به چند گیرنده در دو فرمت متنی ( text ) و پروتکل PDU ( مخفف protocol description unit )
ویژگی های دیتا
GPRS کلاس 10 : دریافت تا 85.6kbps ( دانلود ) و ارسال تا 42.8kbps ( آپلود ) تحت پروتکل TCP/IP
ویژگی های صدا
دارای سه نوع کدبندی Half rate ، Full rate ، Enhanced Full rate به صورت AMR ( مخفف Adaptive Multi-Rate Audio Codec ) و قابلیت عملکرد در حالت هندزفری
رابط ها
رابط سیم کارت خارجی 3 ولت / 1.8 ولت
رابط ورودی/خروجی صدای آنالوگ
رابط های سریال SPI و UART
واحدهای RTC ، PWM و ADC
پایه های ورودی/خروجی قابل برنامه ریزی
بلوک دیاگرام ماژول sim900
تشریح پایه های Sim900
نام | شماره پایه | توضیحات |
PWRKEY | 1 | دکمه ریست/روشن کردن ماژول |
VBAT | 55,56,57 | ورودی تغذیه مثبت ماژول |
GND | 17,18,29,39,45,46,53,54,58,59,61,62,63,64,65 | ورودی تغذیه منفی ماژول |
VRTC | 26 | تغذیه پشتیبان برای ساعت |
STATUS | 66 | تعیین وضعیت برقراری تغذیه |
NETLIGHT | 52 | تعیین وضعیت ارتباط با شبکه |
RXD | 10 | پایه دریافت دیتای سریال |
TXD | 9 | پایه ارسال دیتای سریال |
SIM_VDD | 30 | پایه های ارتباط با سیم کارت |
SIM_DATA | 31 | |
SIM_CLK | 32 | |
SIM_RST | 33 | |
SIM_PRESENCE | 34 | |
MIC_P | 19 | پایه های ورودی میکروفن |
MIC_N | 20 | |
SPK_P | 21 | پایه های خروجی اسپیکر |
SPK_N | 22 | |
RF_ANT | 60 | پایه آنتن |
تذکر : پایه 52 طبق جدول زیر وضعیت سیستم را نشان می دهد.
طراحی مدار بورد راه انداز ماژول Sim900
الف) طراحی منبع تغذیه
این ماژول برای کار نیاز به یک منبع با ولتاژ بین 3.4v تا 4.5v دارد. همچنین مقدار متوسط جریان مصرفی آن در حالت بیکاری 22mA و در حالت کار (مانند ارسال پیامک) 400mA می باشد.
نکته مهمی که در اینجا وجود دارد پیک بالای جریان لحظه ای این ماژول است. در شکل زیر موج جریان این ماژول را مشاهده می کنید. مطابق این شکل موج ماژول SIM900 به صورت لحظه ای جریانی تا حدود 2A مصرف می کند. در پیک جریان ولتاژ منبع تغذیه نباید بیشتر از 400mV افت کند زیرا باعث ریست شدن ماژول می گردد.
برای تامین این پیک جریان استفاده از دو خازن تانتانیوم موازی با ظرفیت های 100uF و 100nF در مسیر تغذیه ماژول الزامی است.
همچنین برای تغذیه مدار و ماژول میتوان از رگولاتور LM317 به صورت مدار پیشنهادی زیر استفاده کرد :
ب) طراحی مدار POWER KEY
روشن/خاموش کردن ماژول از طریق پایه PWRKEY میسر می شود. این پایه از داخل پول آپ بوده و بنابراین پس از اعمال ولتاژ به ماژول برای روشن کردن آن بایستی پایه PWRKEY را برای مدت حداقل یک ثانیه صفر کنیم. برای خاموش کردن ماژول نیز به همین صورت عمل می کنیم. در صورتی که بخواهیم این کار را به صورت دستی انجام دهیم از مدار شکل زیر استفاده می شود. که در آن TVS1 نقش محافظتی دارد و میتوان آن را حذف نمود.
برای کنترل روشن/خاموش کردن ماژول توسط میکروکنترلر میتوان از مدار زیر استفاده کرد :
ج) اتصال ماژول به میکرو
همانطور که گفته شد این ماژول از طریق پورت سریال UART ارتباط برقرار می کند. در شکل زیر حداقل سیم بندی مورد نیاز برای ارتباط این ماژول با میکروکنترلر را مشاهده می کنید.
مشخصات فریم پروتکل UART برای برقراری ارتباط :
- تعداد بیت های ارسالی : 8 بیت
- تعداد Stop Bit : 1 بیت
- نوع Parity : غیرفعال
سرعت ارتباط ( Buad Rate ) : سرعت ارتباط با ماژول یکی از باودریت های استانداد بین محدوده 1200تا 115200 می تواند باشد. ماژول سرعت ارتباط را به طور خودکار تشخیص می دهد ( AutoBauding ). برای این کار کافی است در ابتدا یکبار کاراکتر ‘A’ را به ماژول ارسال کنیم.
د) مدار اتصال به سیم کارت
معرفی دستورات AT Command
ماژول SIM900 دستوراتی را به صورت کاراکترهای Ascii دریافت می کند و به همان صورت نیز به آنها پاسخ می دهد. در ابتدای همه دستورات دو کاراکتر AT ارسال می شوند لذا به مجموعه آن دستورات AT Command گویند. در انتهای هر دستور نیز کاراکتر Enter باید ارسال شود تا ماژول دستور مورد نظر را انجام داده و پاسخ آن را ارسال نماید.
مثال : دستور AT
این دستور برای تست سلامت ارتباط با ماژول می باشد. ماژول در پاسخ به این دستور OK می دهد.
1 2 |
AT[Enter] OK |
مثال : دستور AT+CSQ
ماژول در پاسخ به این دستور دو عدد را بر می گرداند. عدد اول قدرت سیگنال آنتن با عددی بین 0 تا 32 و عدد دوم نشان دهنده جزئیاتی است که برای ما در اینجا اهمیتی ندارد.
1 2 3 |
AT+CSQ[Enter] +CSQ: 14,0 OK |
مثال : دستور AT+CBC
ماژول در پاسخ به این دستور سه عدد را برمی گرداند. عدد اول نشان دهنده در حال شارژ بودن باتری است. عدد دوم نشان دهنده میزان شارژ باتری با عددی بین 0 تا 100 است و عدد سوم ولتاژ باتری را بر حسب میلی ولت نشان می دهد.
1 2 |
AT+CBC[Enter] +CBC: 0,100,4338 |
نکته : کاراکتر [Enter] در کد Ascii برابر با 13(hex) می باشد. به این کاراکتر LF ( مخفف Line Feed ) نیز گفته می شود و در زبان سی n\ معادل آن است.
انواع AT Command
یک دستور AT را میتوان به چهار صورت زیر نوشت :
1-دستور تست ( Test Command ) : در این حالت دستور به صورت زیر به ماژول داده می شود و ماژول لیست پارامترها و محدوده تغییرات آن ها را در پاسخ به این دستور برمیگرداند.
1 |
AT + <x> = ? |
2-دستور خواندن ( Read Command ) : در این حالت دستور به صورت زیر به ماژول داده می شود و ماژول مقادیری که روی آن تنظیم شده است را در پاسخ به این دستور برمیگرداند.
1 |
AT + <x> ? |
3-دستور نوشتن ( Write Command ) : در این حالت دستور به صورت زیر به ماژول داده می شود و مقادیری که بعد از مساوی ارسال می شود درون ماژول تنظیم می شود.
1 |
AT + <x> = <...> |
4-دستور اجرایی ( Execution Command ) : در این حالت دستور به صورت زیر داده می شود و هیچ پارامتری برای آن وجود ندارد و ماژول فقط دستور را اجرا می کند.
1 |
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,”+98*”,number,”NAME” | ذخیره شماره number با نام دلخواه NAME در خانه اول حافظه سیم کارت |
AT+CNUM | نمایش شماره سیم کارت در صورت وجود |
AT+CPBS=”SM” | انتخاب دفترچه تلفن حافظه سیم کارت |
AT+CPBR=1,5 | نمایش از مکان 1 تا 5 حافظه انتخاب شده |
ت – دستورات تماس صوتی Voice Call
دستور | توضیح |
AT+CHFA? | بررسی تنظیمات کانال صوتی ( 0:Handset , 1:Aux ) |
ATA | پاسخ دادن به تماس ورودی |
ATH | رد کردن تماس ورودی |
ATD+NUM; | تماس با شماره ی NUM |
ATDL | شماره گیری مجدد آخرین تماس |
ATLX | تنظیم بلندی صدای اسپیکر ( X بین 0 تا 9 ) |
ث – دستورات پیام کوتاه SMS
دستور | توضیح |
AT+CMGF=1 |
تنظیم حالت نمایش روی Text Mode |
AT+CSCS=”GSM” |
تنظیم فرمت نمایش ( Character Set ) |
AT+CNMI=2,1,0,0 |
تنظیم نمایش sms جدید به محض دریافت آن |
AT+CSAS=0 |
ذخیره تنظیمات sms روی پروفایل شماره 0 |
AT+CMGS=”+98…”[Enter] > yourMessage[ctrl+z] |
فرستادن sms |
AT+CMGW[Enter] > yourMessage[cntl+z] |
ذخیره sms |
AT+CMSS=1,”+98…”,145 |
ارسال 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 به صورت شکل زیر استفاده می کنیم. تمامی این قطعات را میتوانید از فروشگاه الکترو ولت به آدرس Electrovolt.ir/Shop تهیه نمایید.
در شکل زیر مدار نهایی بسته شده توسط الکترو ولت را مشاهده می کنید.
راه اندازی سریع Sim900 و تست دستورات AT در ترمینال کامپیوتر
بعد از بستن مدار راه اندازی سریع و وصل کردن آن به کامپیوتر از یک نرم افزار ترمینال دلخواه جهت ارتباط با ماژول استفاده می کنیم. سپس با قرار دادن باودریت مناسب ، دستورات AT را ارسال و مقدار بازگشتی توسط ماژول را مشاهده خواهیم کرد.
به محض فشردن دکمه POWER به مدت یک ثانیه ماژول روشن می گردد و بعد از یافتن باودریت به طور اتوماتیک ، اطلاعات زیر را نمایش می دهد.
CPIN: NOT INSERTED نشان دهنده این است که سیم کارت روی ماژول وجود ندارد.
CFUN: 1 نشان دهنده این است که عملکرد ماژول در حالت Full Functionality ( عملکرد کامل و نرمال ) است.
اگر سیم کارت وجود داشته باشد و سیم کارت پین کد نداشته باشد ، به محض روشن شدن اطلاعات زیر به نمایش در می آید.
که نشان دهنده آماده بودن سیم کارت و فعال بودن آن برای تماس است.
تست دستورات CBC و CSQ ( نمایش قدرت سیگنال و ولتاژ ماژول ) :
در صورتی که با سیم کارت موجود تماس ورودی گرفته شود عبارت RING پیوسته به نمایش در می آید.
برای مشاهده شماره تلفنی که تماس ورودی گرفته است ابتدا توسط دستور AT+CLIP=1 قابلیت Caller id را فعال می کنیم. سپس در صورت تماس ورودی با سیم کارت موجود ، شماره تماس گیرنده با پیشوند +CLIP: به صورت زیر نمایش داده می شود.
برای پاسخ به تماس ورودی گرفته شده از دستور ATA و برای رد کردن/قطع کردن تماس ورودی از ATH استفاده می گردد.
برای گرفتن تماس خروجی به یک شماره خاص کافی است شماره مورد نظر را بعد از دستور ATD به همراه یک سمیکالن ; به ماژول ارسال نماییم. برای مثال برای تماس به شماره 09109246293 کافی است دستور ATD+989109246293; ارسال شود.
نکته : بعد از نمایش OK ماژول سعی می کند با شماره تماس بگیرد.اگر تماس به هر علتی برقرار نشود ( مانند اتمام شارژ یا متصل نبودن به شبکه ) عبارت NO CARRIER توسط ماژول پاسخ داده می شود و در صورتی که مخاطب به تماس پاسخ ندهد عبارت 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 به یک شماره خاص مثلا شماره 09109246293 از دستور AT+CMGS=”+989109246293″ استفاده می شود. بعد از ارسال این دستور ماژول با ارسال کاراکتر < منتظر دریافت متن SMS می شود. متن SMS به صورت کاراکترهای Ascii به ماژول ارسال می شود که در پایان باید کاراکتر Ctrl+Z ( یعنی 0x1A در مبنای هگز ) نیز ارسال شود. سپس ماژول SMS را به طور اتوماتیک ارسال می کند.
تذکر : در بیشتر نرم افزارهای ترمینال ارسال کاراکترهای کنترلی نظیر Ctrl+z امکان پذیر نمی باشد. به همین علت و برای راحتی کار با ماژول Sim900 و نیز کاهش زمان تایپ کردن از نرم افزارهای ترمینال مخصوصی استفاده می شود. بهترین نرم افزار برای ارتباط با بیشتر ماژول های ارتباطی ، نرم افزار 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 کلاینت تا 8 کانکشن و در حالت TCP سرور تا 7 کانکشن را پشتیبانی می کند. شکل زیر ساختار انواع ارتباطات این ماژول را نشان می دهد.
همانطور که مشاهده می کنید ، برای انتخاب حالت 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 ارتباط برقرار کرد. نحوه ارتباط در شکل زیر نشان داده شده است. به علت اینکه ولتاژ عملکرد میکرو 5 ولت بوده اما ولتاژ عملکرد ماژول کمتر از 4.5 می باشد بهتر است از یک دیود جهت کاهش ولتاژ به اندازه 0.7 ولت استفاده نماییم.
در شکل زیر مدار نهایی بسته شده توسط الکترو ولت را مشاهده می کنید.
آموزش برنامه نویسی Sim900 در AVR
برای برنامه نویسی این ماژول دو روش وجود دارد یکی بدون وقفه و دیگری با وقفه. به علت اینکه روش بدون وقفه روش مناسبی نیست ، از ذکر آن صرفنظر می شود. شکل زیر تنظیمات روش با وقفه را در کدویزارد نشان می دهد.
تذکر : ماژول sim900 با همه باودریت ها کار می کند. اما در میکروکنترلرهای AVR بهتر است میکروکنترلر را با فرکانس 8Mhz داخلی و واحد USART میکرو را با باودریت 9600 راه اندازی کنیم.
بعد از تولید کد توسط نرم افزار کدویزارد ، مشاهده می شود یک سری توابع و ثوابت به برنامه اضافه شده است. این ثوابت و توابع به منظور ارتباط با واحد USART می باشد و میتوان از آنها نیز استفاده نمود اما روش بهتر و ساده تر آن است که همه آنها را حذف نماییم. بنابراین بعد از حذف آنها برنامه به صورت زیر تقلیل می یابد. سپس آماده نوشتن برنامه می شویم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#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 Register ) که حاوی کاراکتر دریافتی می باشد را درون آن ذخیره کرد.
1 2 3 4 5 6 7 8 |
//global variables char data; // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { data = UDR; } |
نکته : جهت ذخیره یک رشته از کاراکترها درون سابروتین وقفه دریافت از پورت سریال می بایست یک آرایه از نوع char تعریف کرد سپس کاراکترهای دریافتی را یکی یکی و به ترتیب درون آن آرایه ذخیره کرد. به چنین آرایه ای اصطلاحا بافر ( Buffer ) گفته می شود. برای شمارش تعداد کاراکترهای دریافتی از یک متغیر استفاده می کنیم که شماره کاراکتر ذخیره شده در درون آرایه را مشخص می کند و با آمدن هر کاراکتر یک واحد به آن اضافه می گردد.
1 2 3 4 5 6 7 8 9 10 |
//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++; } |
همانطور که در برنامه فوق مشاهده می کنید ، یک آرایه به طول 10 تعریف شده است. با هر بار آمدن وقفه دریافت ، یک کاراکتر درون آرایه به ترتیب از خانه شماره 0 آرایه تا خانه شماره 9 آرایه ذخیره می گردد. بنابراین برنامه فوق در مجموع 10 کاراکتر ذخیره می کند.
نکته : سایز آرایه بافر اهمیت زیادی دارد. آرایه بافر باید به اندازه کافی بزرگ باشد چرا که برای مثال در هنگام دریافت sms باید همه کاراکترهای آن sms ابتدا درون آرایه بافر ذخیره گردد. از طرفی در صورت بزرگ بودن بیش از اندازه بافر هم حافظه زیادی اشغال می شود و هم زمان زیادی صرف جستجو درون آرایه بزرگ می گردد که منجر به کند شدن برنامه می شود.
در نتیجه برنامه نهایی اصلاح شده برای دریافت از پورت سریال به صورت زیر می باشد. علت استفاده از if بعد از ذخیره کاراکتر این است که اگر به انتهای آرایه بافر رسیده باشیم ، شمارنده بافر صفر شود و کاراکتر جدید در ابتدای آرایه بافر ذخیره می گردد. دقت کنید که در این حالت کاراکتر قبلی Over Written می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#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 به ماژول را مشاهده می کنید.
1 2 3 4 |
char str[10]; sprintf(str,"AT\r\n"); puts(str); |
هر کجای برنامه که بخواهیم متوجه شویم ماژول چه چیزی به میکرو فرستاده است کافی است آرایه بافر را مشاهده و بررسی نماییم. یکی از راه های بررسی آرایه بافر جستجو یک عبارت خاص درون آن با استفاده از تابع strstr ( درون string.h ) می باشد. برای مثال اگر بخواهیم ببینیم که در جواب ارسال دستور AT ، ماژول پاسخ OK داده است یا خیر باید رشته “OK” را درون آرایه بافر جستجو نماییم.
1 |
a = strstr(UARTBUFFER,"OK"); |
خروجی تابع strstr یک اشاره گر به اولین محل تطبیق درون آرایه UARTBUFFER می باشد. در صورتی که هیچ تطبیقی وجود نداشته باشد NULL به خروجی تابع می رود.
تفاوت بین SIM900 و SIM900A
تفاوت این دو ماژول در فرکانس ارتباطی آن ها ، ولتاژ تغذیه و قیمت تمام شده می باشد. ماژول های SIM900 از 4 باند فرکانسی 850,900,1800,1900 مگاهرتز پشتیبانی می کند در حالی که ماژول SIM900A از دو باند فرکانسی 900 و 1800 مگاهرتز پشتیبانی می نماید. ولتاژ تغذیه SIM900 بین 3.4 الی 4.5 ولت اما ولتاژ تغذیه SIM900A بین 3.2 الی 4.8 ولت است. این دو ماژول از نظر دستورات و ATcommand ها تفاوتی با هم ندارند. در شکل زیر ماژول SIM900A را مشاهده می نمایید.
معرفی ماژول Sim800
ماژول Sim800 یکی دیگر از محصولات شرکت Simcom است که تمامی قابلیت های Sim900 را دارا می باشد. این ماژول علاوه بر قابلیت های Sim900 دارای بلوتوث داخلی و پورت USB می باشد. هر دو این ماژول ها از دستورات AT مشابه استفاده می کنند. قیمت تمام شده Sim800 پایین تر از Sim900 بوده و به همین علت در پروژه های کم هزینه به صرفه تر می باشد. در شکل زیر این ماژول را مشاهده می کنید.
در جدول شکل زیر مقایسه کاملی بین این دو ماژول از نظر پایه ها و قابلیت ها آورده شده است.
لینک خرید ماژول Sim800 از فروشگاه الکترو ولت
دانلود بسته آموزشی ماژول های Sim800 و Sim900
محتویات بسته آموزشی :
- فایل کتابخانه PCB ماژول های Sim800 و Sim900 در نرم افزار Altium Designer
- همه دیتاشیت ها و مقالات کاربردی راه اندازی Sim800 و Sim900
- مثال های راه اندازی در نرم افزار کدویژن CodeVision AVR به زبان C
- نرم افزار RSTerm Plus به همراه Provider های مختلف
قیمت : 5 هزار تومان
دیدگاه (26)
سلامهمه مطالبی رو که من بصورت پراکنده توی اینترنت پیدا کرده بودم اینجا همشونو یکجا دیدم . خیلی خوب بود. یا علی
سلام ممنونم از نظرتون
سلام و تشکر از این مطلب
جامع بود و جای هیچ سوال علمی نداره
فقط یه سوال تجاری :
توبازار صحبت از این هست که تولید sim900, هم رده هاش منظورم با پسوند A یا … در حال اتمام تولید از طرف شرکت سازنده هست و کم کم درحال جایگزینی با sim808 می باشد
چقدر تآیید میکنید ؟؟؟؟ الان بخوام یه پروژه با سیم ببندم کدوم مدلشو باید استفاده کنم ک اگه احیانا 10 سال دیگه سوخت مجددا ماژولش گیرم بیاد نه اینکه مثل sim900 بگن گیر نمیاد
باتشکر
سلام دوست عزیز خواهش میکنم
به علت شباهت پایه های Sim800 و sim900 میتونید بوردی که دارید با Sim900 کار میکنه با استفاده از سیم جوری پایه هاش رو به sim800 وصل کنید. هیچ وقت از 10 سال بعد نمیشه مطمئن بود.
سلام..مهندس قیمت این مازول چنده؟
عالی بود…ممنون
فقط لطفأ ادامه بدین این ماژول هاوسیع تراز این هستند که بخواین همین جا توضیحاتتون روتمام کنید مشتاقانه منتظرتوضیحات بعدی شماهستم.
ممنون از لطفتون… حتما…
سلام خدمت اساتید محترم
توضیحات کاملیو دادین خیلی استفاده کردم
متاسفانه مشکل من در ارتباط ماژول با میکرو بود و نحوه فعال کردن رله با ماژل sim900 و AVR به همین دلیل فایل آموزشیتونو دانلود کردم
ولی متاسفانه اون 5 تا پروزه که داخل فایل بود فقط دستوراتو داشت بدون هیچ نوع توضیحی فرسی ای در مورد کد
حتی عملکرد کد نویسیم تو یه فایل Pdf با نقشه مداریش نزاشته بودین
سلام دوست عزیز
توضیحات آموزشی کامل در حد مورد نیاز در همین صفحه هست
داخل بسته هم مثالهایی وجود داره که توضیحات نداره اما میشه متوجه شد و باهاش کار کرد
سلام. ببخشید من یه سوالی داشتم. من یه Sim808 دارم که به آردوینو مگا وصلش کردم. میخوام از GPS پیوسته اطلاعات بگیرم ولی به صورت پیوسته و این که منتظر داده جدید نمونه بین دیتا گرفتنا از یه سنسوری داده میگیره. برای همین میخوام با وقفه ها راه اندازی بشه که هر وقت داده جدید اومد وقفه فرستاده بشه و اطلاعات ذخیره شه. میشه راهنمایی کنید که این کار چجوری میشه انجام داد؟
خیلی ممنونم
سلام
من یک ماؤول سیم 800 ال دارم با کامپیوتر چگ کردم درسته ولی با میکرو کار نمیکنه
تغذیه درسته
سیم کارت میشناسه
بادریت روی 9600 ثابت کردم
اکو خاموش کردم
اطلاعات ارسالی به ماژول چک کردم با کامپیوتر درست بود
سلام خدا خیرتون بده خیلی مطالب کاملی بود من از چند تا سایت اینا رو خریدم و هیچکدوم کامل و همراه با توضیح نبود باعث افتخاره که کانال تلگرامی شما رو دنبال میکنیم با آرزوی روز افزون موفقیت برای شما
سلام دوست عزیز خیلی ممنون از همراهی و حسن نظرتون ما هم برای شما آرزوی موفقیت روز افزون داریم
سلام ، ممنون بابت مطالب خوب و مفیدتون.
شما گفتین که برای دریافت دیتا از سیمکارت یه آرایه مثلا 20 کاراکتری را در نظر بگیریم. حالا اگه مثلا یک پیامک 5 کاراکتری را دریافت کنیم ، تنها 5 قسمت آرایه پر می شود و از آنجایی که buffcount صفر نمی شه ، در دریافت پیام بعدی ، کاراکترهای پیام، بقیه ی آرایه رو پر می کنه و در نتیجه اطلاعات 2 پیام قاطی می شود ، برای رفع این مشکل باید چکار کنیم ؟
سلام دوست عزیز ممنون از نظرتون اولا زمانی که یک پیامک می آید عبارت CMTI درون آرایه بافر ذخیره می شود و محتوای پیامک درون بافر نمی آید بلکه همواره درون ماژول ذخیره می گردد. ضمنا در صورتی که بخواهیم پیامکی را بخوانیم از یک آرایه دیگر به جز بافر استفاده می کنیم. ثانیا در جای مناسب درون حلقه برنامه نویسی باید آرایه بافر را صفر کرده و BuffCount را نیز صفر کنیم تا آرایه بافرآماده برای دریافت کاراکتر ها شود.
سلام و خسته نباشید.
من برای استعلام شارژ سیمکارت رایتل از دستور at+cusd=1,”*140#”,145 استفاده میکنم.اما ماژل در پاسخ یک سری کد اسکی برای من ارسال میکند.با دستورهای cmgf و cscs تمامی حالات ممکن را هم تست کردم ولی فایده نداشت و فقط در یک حالت کد هگزادسیمال برگرداند که هیچکدام قابل تبدیل به متن نیستند.در ضمن از دستور atd*140#; هم استفاده کردم و باز همین کدهای اسکی را برگرداند.لطفا بگید من چیکار کنم؟
سلام دوست عزیز برای فهمیدن مقدار شارژ کافی است اعداد را در نظر بگیرید و مابقی داده ها را دور بریزید. کدهای پاسخ هم احتمالا اسکی نیستند و باید تبدیل شوند. برای تبدیل آن سایت های مبدل وجود دارند که در اینترنت سرچ و پیدا کنید.
ممنون .
کدی که من دریافت میکنم اینه : “Cy™œ¦ëb´ڑ$M‡ظ گ¢،0¾ه ِ[^¥فو7èüرك ٍ8,/»نé3ڑ^f»زr” همینطور که شما گفتید اسکی هم نیستندو اعداد به درد بخوری توش نیست.و کد هگزا هم اینه : “4379999CA6EB62B49A0C244D87D92090A2A130BEE5A0F65B5E06A5DDE637E8FC06D1DFA0F2382C2FBBE4E9339A5E66BBD272”
که هیچکدام قابل تبدیل نیستند.در ضمن من میخواهم میکرو مقدار شارژ سیمکارتو به یک شماره دیگه ارسال کنه پس نمیتونم برای تبدیل این کدها از سایت های مبدل استفاده کنم.هیچ راهی وجود نداره که جواب دریافتی ماژول مانند اس ام اس ها متن باشند؟
دوست عزیز مطمئنا شما یک جای کار اشتباه کردید که با پیدا کردن اون مشکل حل میشه
سلام ممنون از توضیحات خوبتون من یه مشکلی داشتم اینه که هر دستوری که مربوط به سیم کارت هست رو وارد می کنم پیغام ERROR می ده ولی اولشم می نویسه CPIN:READY یعنی سیم کارت فعاله ایراد از کجاست؟
سلام دوست عزیز به نظر میرسه در ارتباط کامپیوتر و ماژول مشکلی وجود داره پایه های RX و TX رو چک کنید صحیح وصل شده باشند و زمین کامپیوتر و ماژول هم به هم متصل باشد.اگه فقط یک بار CPIN:READY بنویسه مشکلی نیست اما اگه بیشتر از یکبار باشه نشون میده تغذیه ماژول شما مشکل داره که باعث ریست شدن ماژول میشه پس از تغذیه مناسب استفاده کنید و خازن هم فراموش نشود
سلام اگر برنامه ایی برای ماژول sim900نوشته شده باشه والان بخواهیم مازولsim800 جایگزین کنیم ایا بدون تغیر در برنامه امان جابجایی این دو ماژول با هم هست سپاس گذارم
سلام خسته نباشید
من بسته آموزشی رو دانلود کردم
چندتا سوال دارم خدتتون اول این که این برنامه ها با پرتئوس شبیه سازی میشن؟
سوال دوم هنگام دریافت sms اول شماره مهم هست که فقط از یه شماره خواص یا به تعداد دلخواه شماره مخصوص ارسال شود و برای دریافت دستورات لازم مثلا 0 یا 1 کردن یکی یا چندتا از خروجی های میکرو طبق متن sms چه کار باید انجام شود؟
سوم اینکه اگه امکان داره توضیحاتی برای کاربرد هرمثال بنویسید مثلا مثال 1 چه کارایی داره و هر خط برنامه چه عملی رو انجام مبده؟
ممنون از سایت خوبتون
سلام دوست عزیز ممنونم سلامت باشید
1. خیر امکان شبیه سازی دقیق با پروتئوس نمی باشد
2. بله میتوان با تعریف یک یا چند شماره خاص اجرای دستورات را فقط به آن شماره ها محدود نمود. برای این کار یک بانک از شماره ها تعریف می شود و تنها در صورتی که شماره sms وارد شده با یکی از شماره های آن بانک مطابق باشد آنگاه مراحل بعدی انجام می شود
3. حتما توضیحات بیشتری ارائه خواهیم کرد
سلام
میخواستم ببینم چجور میتونم آردینو رو به اینترنت با استفاده از سیم800lمتصل کنم
سلام مهندس ممنون از مطالب با ارزشتون واقعا کمک کرد و گره از خیلی از مشکلات من باز کرد فقط الان تنها سوالی برای من پیش اومده اینه که TE یا Terminal equipment و TA یا Terminal adaptor دقیقا چی هستن؟ سخت افزارن یا نرم افزار؟ اصلا نمیدونم چی هستن داخل دیتا شیت هم از این واژه ها برای توضیح بعضی ات کامند ها استفاده شده بود.
ممنون میشم کمکم کنید.