آموزش کامل راه اندازی ماژول sim900 و sim800 با میکروکنترلر AVR

بازگشت به آموزشگاه

مقدمه

یکی از معروف ترین ماژول های ارتباطی GSM/GPRS ماژول Sim900 می باشد که در بسیاری از کاربردهای صنعتی ، نیمه صنعتی و تجاری از آن استفاده می گردد. با استفاده از این ماژول کارهای بسیاری از قبیل تماس تلفنی و ارسال/دریافت sms گرفته تا برقراری ارتباط با اینترنت و ارسال/دریافت دیتا میتوان انجام داد. استفاده از این ماژول در کنار میکروکنترلر به علت سادگی ارتباط و دستورات ، مرسوم بوده و باعث کنترل هوشمند پروژه می شود.

Simcom-SIM900


معرفی ماژول sim900

یک ماژول ارتباطی بدون سیم کوچک و فوق العاده است که توسط شرکت SimCom تولید می شود. این ماژول از چهار باند GSM/GPRS پشتیبانی می کند. دارای هسته پردازشی قدرتمند ARM926EJ-S می باشد که در یک بسته بندی SMT ( تکنولوژی روی سطح بورد ) ارائه می شود. از این ماژول می توان در کاربردهای M2M ( ماشین به ماشین ) با ابعاد کوچک و توان مصرفی پایین استفاده نمود. شکل زیر این ماژول را نشان می دهد.

sim900


معرفی ویژگی ها و امکانات ماژول 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-functional-diagram


تشریح پایه های Sim900

pinout-sim900

نامشماره پایهتوضیحات
PWRKEY1دکمه ریست/روشن کردن ماژول
VBAT55,56,57ورودی تغذیه مثبت ماژول
GND17,18,29,39,45,46,53,54,58,59,61,62,63,64,65ورودی تغذیه منفی ماژول
VRTC26تغذیه پشتیبان برای ساعت
STATUS66تعیین وضعیت برقراری تغذیه
NETLIGHT52تعیین وضعیت ارتباط با شبکه
RXD10پایه دریافت دیتای سریال
TXD9پایه ارسال دیتای سریال
SIM_VDD30پایه های ارتباط با سیم کارت
SIM_DATA31
SIM_CLK32
SIM_RST33
SIM_PRESENCE34
MIC_P19پایه های ورودی میکروفن
MIC_N20
SPK_P21پایه های خروجی اسپیکر
SPK_N22
RF_ANT60پایه آنتن

 

تذکر : پایه 52 طبق جدول زیر وضعیت سیستم را نشان می دهد.

sim900_netlight


طراحی مدار بورد راه انداز ماژول Sim900

الف) طراحی منبع تغذیه

این ماژول برای کار نیاز به یک منبع با ولتاژ بین 3.4v تا 4.5v دارد. همچنین مقدار متوسط جریان مصرفی آن در حالت بیکاری 22mA و در حالت کار (مانند ارسال پیامک) 400mA می باشد.

نکته مهمی که در اینجا وجود دارد پیک بالای جریان لحظه ای این ماژول است. در شکل زیر موج جریان این ماژول را مشاهده می کنید. مطابق این شکل موج ماژول SIM900 به صورت لحظه ای جریانی تا حدود 2A مصرف می کند. در پیک جریان ولتاژ منبع تغذیه نباید بیشتر از 400mV افت کند زیرا باعث ریست شدن ماژول می گردد.

VBAT-Sim900

برای تامین این پیک جریان استفاده از دو خازن تانتانیوم موازی با ظرفیت های 100uF و 100nF در مسیر تغذیه ماژول الزامی است.

CAP-Sim900

همچنین برای تغذیه مدار و ماژول میتوان از رگولاتور LM317 به صورت مدار پیشنهادی زیر استفاده کرد :

Regulator-Sim900

ب) طراحی مدار POWER KEY

روشن/خاموش کردن ماژول از طریق پایه PWRKEY میسر می شود. این پایه از داخل پول آپ بوده و بنابراین پس از اعمال ولتاژ به ماژول برای روشن کردن آن بایستی پایه PWRKEY را برای مدت حداقل یک ثانیه صفر کنیم. برای خاموش کردن ماژول نیز به همین صورت عمل می کنیم. در صورتی که بخواهیم این کار را به صورت دستی انجام دهیم از مدار شکل زیر استفاده می شود. که در آن TVS1 نقش محافظتی دارد و میتوان آن را حذف نمود.

sim900-pwrkey2

برای کنترل روشن/خاموش کردن ماژول توسط میکروکنترلر میتوان از مدار زیر استفاده کرد :

sim900-PWRKEY1

ج) اتصال ماژول به میکرو

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

sim900-uart

مشخصات فریم پروتکل UART برای برقراری ارتباط :

  • تعداد بیت های ارسالی : 8 بیت
  • تعداد Stop Bit : 1 بیت
  • نوع Parity : غیرفعال

سرعت ارتباط ( Buad Rate ) : سرعت ارتباط با ماژول یکی از باودریت های استانداد بین محدوده 1200تا 115200 می تواند باشد. ماژول سرعت ارتباط را به طور خودکار تشخیص می دهد ( AutoBauding ). برای این کار کافی است در ابتدا یکبار کاراکتر ‘A’ را به ماژول ارسال کنیم.

 

د) مدار اتصال به سیم کارت

simcard


معرفی دستورات AT Command

ماژول SIM900 دستوراتی را به صورت کاراکترهای Ascii دریافت می کند و به همان صورت نیز به آنها پاسخ می دهد. در ابتدای همه دستورات دو کاراکتر AT ارسال می شوند لذا به مجموعه آن دستورات AT Command گویند. در انتهای هر دستور نیز کاراکتر Enter باید ارسال شود تا ماژول دستور مورد نظر را انجام داده و پاسخ آن را ارسال نماید.

مثال : دستور AT

این دستور برای تست سلامت ارتباط با ماژول می باشد. ماژول در پاسخ به این دستور OK می دهد.

مثال : دستور AT+CSQ

ماژول در پاسخ به این دستور دو عدد را بر می گرداند. عدد اول قدرت سیگنال آنتن با عددی بین 0 تا 32 و عدد دوم نشان دهنده جزئیاتی است که برای ما در اینجا اهمیتی ندارد.

مثال : دستور AT+CBC

ماژول در پاسخ به این دستور سه عدد را برمی گرداند. عدد اول نشان دهنده در حال شارژ بودن باتری است. عدد دوم نشان دهنده میزان شارژ باتری با عددی بین 0 تا 100 است و عدد سوم ولتاژ باتری را بر حسب میلی ولت نشان می دهد.

نکته : کاراکتر [Enter] در کد Ascii برابر با 13(hex) می باشد. به این کاراکتر LF ( مخفف Line Feed ) نیز گفته می شود و در زبان سی n\ معادل آن است.


انواع AT Command

یک دستور AT را میتوان به چهار صورت زیر نوشت :

1-دستور تست ( Test Command ) : در این حالت دستور به صورت زیر به ماژول داده می شود و ماژول لیست پارامترها و محدوده تغییرات آن ها را در پاسخ به این دستور برمیگرداند.

2-دستور خواندن ( Read Command ) : در این حالت دستور به صورت زیر به ماژول داده می شود و ماژول مقادیری که روی آن تنظیم شده است را در پاسخ به این دستور برمیگرداند.

3-دستور نوشتن ( Write Command ) : در این حالت دستور به صورت زیر به ماژول داده می شود و مقادیری که بعد از مساوی ارسال می شود درون ماژول تنظیم می شود.

4-دستور اجرایی ( Execution Command ) : در این حالت دستور به صورت زیر داده می شود و هیچ پارامتری برای آن وجود ندارد و ماژول فقط دستور را اجرا می کند.

 


معرفی پرکاربردترین 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_circuit

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


راه اندازی سریع 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 متصل شود :

  1. single connection
  2. multi connection

در حالت اتصال تکی ماژول می تواند به صورت شفاف ( Transparent ) و غیرشفاف ( Non Transparent ) ارتباط برقرار کند. در هر دو این حالت ها SIM900 میتواند به صورت کلاینت ( TCP یا UDP ) و سرور ( فقط TCP ) متصل شود. در حالت اتصال چندگانه SIM900 فقط می تواند به صورت غیرشفاف متصل شود به طوری که در حالت TCP/UDP کلاینت تا 8 کانکشن و در حالت TCP سرور تا 7 کانکشن را پشتیبانی می کند. شکل زیر ساختار انواع ارتباطات این ماژول را نشان می دهد.

sim900_gprs

همانطور که مشاهده می کنید ، برای انتخاب حالت 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 می باشد و میتوان از آنها نیز استفاده نمود اما روش بهتر و ساده تر آن است که همه آنها را حذف نماییم. بنابراین بعد از حذف آنها برنامه به صورت زیر تقلیل می یابد. سپس آماده نوشتن برنامه می شویم.

تذکر : تابع روتین وقفه دریافت از پورت سریال را قبل از تابع main مشاهده می کنید. به محض این که یک کاراکتر از پورت سریال دریافت شود ، برنامه درون این سابروتین می رود.

نکته : جهت ذخیره کاراکتر دریافتی درون سابروتین وقفه دریافت از پورت سریال می بایست یک متغیر از نوع char تعریف کرد و محتویات رجیستر UDR ( مخفف Usart Data Register ) که حاوی کاراکتر دریافتی می باشد را درون آن ذخیره کرد.

نکته : جهت ذخیره یک رشته از کاراکترها درون سابروتین وقفه دریافت از پورت سریال می بایست یک آرایه از نوع char تعریف کرد سپس کاراکترهای دریافتی را یکی یکی و به ترتیب درون آن آرایه ذخیره کرد. به چنین آرایه ای اصطلاحا بافر ( Buffer ) گفته می شود. برای شمارش تعداد کاراکترهای دریافتی از یک متغیر استفاده می کنیم که شماره کاراکتر ذخیره شده در درون آرایه را مشخص می کند و با آمدن هر کاراکتر یک واحد به آن اضافه می گردد.

همانطور که در برنامه فوق مشاهده می کنید ، یک آرایه به طول 10 تعریف شده است. با هر بار آمدن وقفه دریافت ، یک کاراکتر درون آرایه به ترتیب از خانه شماره 0 آرایه تا خانه شماره 9 آرایه ذخیره می گردد. بنابراین برنامه فوق در مجموع 10 کاراکتر ذخیره می کند.

 

نکته : سایز آرایه بافر اهمیت زیادی دارد. آرایه بافر باید به اندازه کافی بزرگ باشد چرا که برای مثال در هنگام دریافت sms باید همه کاراکترهای آن sms ابتدا درون آرایه بافر ذخیره گردد. از طرفی در صورت بزرگ بودن بیش از اندازه بافر هم حافظه زیادی اشغال می شود و هم زمان زیادی صرف جستجو درون آرایه بزرگ می گردد که منجر به کند شدن برنامه می شود.

 

در نتیجه برنامه نهایی اصلاح شده برای دریافت از پورت سریال به صورت زیر می باشد. علت استفاده از if بعد از ذخیره کاراکتر این است که اگر به انتهای آرایه بافر رسیده باشیم ، شمارنده بافر صفر شود و کاراکتر جدید در ابتدای آرایه بافر ذخیره می گردد. دقت کنید که در این حالت کاراکتر قبلی Over Written می شود.

هر کجای برنامه که نیاز داشته باشیم به ماژول Sim900 کامندی ارسال کنیم ، ابتدا یک آرایه به طول حداکثر آن کامند ایجاد می کنیم و سپس توسط تابع sprintf کامند مورد نظر را به همراه کاراکتر های CR و LF درون آرایه می ریزیم. سپس با استفاده از تابع puts آرایه مورد نظر را به پورت سریال جهت ارسال به ماژول می فرستیم. در خطوط زیر نحوه ارسال دستور AT به ماژول را مشاهده می کنید.

هر کجای برنامه که بخواهیم متوجه شویم ماژول چه چیزی به میکرو فرستاده است کافی است آرایه بافر را مشاهده و بررسی نماییم. یکی از راه های بررسی آرایه بافر جستجو یک عبارت خاص درون آن با استفاده از تابع strstr ( درون string.h ) می باشد. برای مثال اگر بخواهیم ببینیم که در جواب ارسال دستور AT ، ماژول پاسخ OK داده است یا خیر باید رشته “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 هزار تومان

لینک خرید آنلاین بسته آموزشی این ماژول

10+

دیدگاه (26)

  • محمود پاسخ

    سلامهمه مطالبی رو که من بصورت پراکنده توی اینترنت پیدا کرده بودم اینجا همشونو یکجا دیدم . خیلی خوب بود. یا علی

    1396-01-29 در 13:00
    • ادمین الکترو ولت پاسخ

      سلام ممنونم از نظرتون

      1396-04-06 در 04:14
  • احسان پاسخ

    سلام و تشکر از این مطلب
    جامع بود و جای هیچ سوال علمی نداره
    فقط یه سوال تجاری :
    توبازار صحبت از این هست که تولید sim900, هم رده هاش منظورم با پسوند A یا … در حال اتمام تولید از طرف شرکت سازنده هست و کم کم درحال جایگزینی با sim808 می باشد
    چقدر تآیید میکنید ؟؟؟؟ الان بخوام یه پروژه با سیم ببندم کدوم مدلشو باید استفاده کنم ک اگه احیانا 10 سال دیگه سوخت مجددا ماژولش گیرم بیاد نه اینکه مثل sim900 بگن گیر نمیاد
    باتشکر

    1396-04-05 در 17:20
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز خواهش میکنم
      به علت شباهت پایه های Sim800 و sim900 میتونید بوردی که دارید با Sim900 کار میکنه با استفاده از سیم جوری پایه هاش رو به sim800 وصل کنید. هیچ وقت از 10 سال بعد نمیشه مطمئن بود.

      1396-04-06 در 04:13
      • ابتین پاسخ

        سلام..مهندس قیمت این مازول چنده؟

        1398-07-14 در 12:15
  • بنده خدا پاسخ

    عالی بود…ممنون
    فقط لطفأ ادامه بدین این ماژول هاوسیع تراز این هستند که بخواین همین جا توضیحاتتون روتمام کنید مشتاقانه منتظرتوضیحات بعدی شماهستم.

    1396-04-27 در 09:28
    • ادمین الکترو ولت پاسخ

      ممنون از لطفتون… حتما…

      1396-04-27 در 19:39
  • sirvanfatahi پاسخ

    سلام خدمت اساتید محترم
    توضیحات کاملیو دادین خیلی استفاده کردم
    متاسفانه مشکل من در ارتباط ماژول با میکرو بود و نحوه فعال کردن رله با ماژل sim900 و AVR به همین دلیل فایل آموزشیتونو دانلود کردم
    ولی متاسفانه اون 5 تا پروزه که داخل فایل بود فقط دستوراتو داشت بدون هیچ نوع توضیحی فرسی ای در مورد کد
    حتی عملکرد کد نویسیم تو یه فایل Pdf با نقشه مداریش نزاشته بودین

    1396-06-19 در 00:36
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز
      توضیحات آموزشی کامل در حد مورد نیاز در همین صفحه هست
      داخل بسته هم مثالهایی وجود داره که توضیحات نداره اما میشه متوجه شد و باهاش کار کرد

      1396-06-19 در 11:06
  • زهرا حیدری پاسخ

    سلام. ببخشید من یه سوالی داشتم. من یه Sim808‌ دارم که به آردوینو مگا وصلش کردم. میخوام از GPS پیوسته اطلاعات بگیرم ولی به صورت پیوسته و این که منتظر داده جدید نمونه بین دیتا گرفتنا از یه سنسوری داده میگیره. برای همین میخوام با وقفه ها راه اندازی بشه که هر وقت داده جدید اومد وقفه فرستاده بشه و اطلاعات ذخیره شه. میشه راهنمایی کنید که این کار چجوری میشه انجام داد؟
    خیلی ممنونم

    1396-09-11 در 10:09
  • amin پاسخ

    سلام
    من یک ماؤول سیم 800 ال دارم با کامپیوتر چگ کردم درسته ولی با میکرو کار نمیکنه
    تغذیه درسته
    سیم کارت میشناسه
    بادریت روی 9600 ثابت کردم
    اکو خاموش کردم
    اطلاعات ارسالی به ماژول چک کردم با کامپیوتر درست بود

    1396-10-14 در 23:04
  • سعید پاسخ

    سلام خدا خیرتون بده خیلی مطالب کاملی بود من از چند تا سایت اینا رو خریدم و هیچکدوم کامل و همراه با توضیح نبود باعث افتخاره که کانال تلگرامی شما رو دنبال میکنیم با آرزوی روز افزون موفقیت برای شما

    1396-11-21 در 01:42
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز خیلی ممنون از همراهی و حسن نظرتون ما هم برای شما آرزوی موفقیت روز افزون داریم

      1396-11-21 در 09:54
  • حسین پاسخ

    سلام ، ممنون بابت مطالب خوب و مفیدتون.
    شما گفتین که برای دریافت دیتا از سیمکارت یه آرایه مثلا 20 کاراکتری را در نظر بگیریم. حالا اگه مثلا یک پیامک 5 کاراکتری را دریافت کنیم ، تنها 5 قسمت آرایه پر می شود و از آنجایی که buffcount صفر نمی شه ، در دریافت پیام بعدی ، کاراکترهای پیام، بقیه ی آرایه رو پر می کنه و در نتیجه اطلاعات 2 پیام قاطی می شود ، برای رفع این مشکل باید چکار کنیم ؟

    1397-02-02 در 22:24
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز ممنون از نظرتون اولا زمانی که یک پیامک می آید عبارت CMTI درون آرایه بافر ذخیره می شود و محتوای پیامک درون بافر نمی آید بلکه همواره درون ماژول ذخیره می گردد. ضمنا در صورتی که بخواهیم پیامکی را بخوانیم از یک آرایه دیگر به جز بافر استفاده می کنیم. ثانیا در جای مناسب درون حلقه برنامه نویسی باید آرایه بافر را صفر کرده و BuffCount را نیز صفر کنیم تا آرایه بافرآماده برای دریافت کاراکتر ها شود.

      1397-02-02 در 23:29
  • محمد پاسخ

    سلام و خسته نباشید.
    من برای استعلام شارژ سیمکارت رایتل از دستور at+cusd=1,”*140#”,145 استفاده میکنم.اما ماژل در پاسخ یک سری کد اسکی برای من ارسال میکند.با دستورهای cmgf و cscs تمامی حالات ممکن را هم تست کردم ولی فایده نداشت و فقط در یک حالت کد هگزادسیمال برگرداند که هیچکدام قابل تبدیل به متن نیستند.در ضمن از دستور atd*140#; هم استفاده کردم و باز همین کدهای اسکی را برگرداند.لطفا بگید من چیکار کنم؟

    1397-02-21 در 16:44
    • ادمین الکترو ولت پاسخ

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

      1397-02-22 در 01:24
  • محمد پاسخ

    ممنون .
    کدی که من دریافت میکنم اینه : “Cy™œ¦ëb´ڑ$M‡ظ گ¢،0¾ه ِ[^¥فو7èüرک ٍ8,/»نé3ڑ^f»زr” همینطور که شما گفتید اسکی هم نیستندو اعداد به درد بخوری توش نیست.و کد هگزا هم اینه : “4379999CA6EB62B49A0C244D87D92090A2A130BEE5A0F65B5E06A5DDE637E8FC06D1DFA0F2382C2FBBE4E9339A5E66BBD272”
    که هیچکدام قابل تبدیل نیستند.در ضمن من میخواهم میکرو مقدار شارژ سیمکارتو به یک شماره دیگه ارسال کنه پس نمیتونم برای تبدیل این کدها از سایت های مبدل استفاده کنم.هیچ راهی وجود نداره که جواب دریافتی ماژول مانند اس ام اس ها متن باشند؟

    1397-02-22 در 10:28
    • ادمین الکترو ولت پاسخ

      دوست عزیز مطمئنا شما یک جای کار اشتباه کردید که با پیدا کردن اون مشکل حل میشه

      1397-02-24 در 12:15
  • علی پاسخ

    سلام ممنون از توضیحات خوبتون من یه مشکلی داشتم اینه که هر دستوری که مربوط به سیم کارت هست رو وارد می کنم پیغام ERROR می ده ولی اولشم می نویسه CPIN:READY یعنی سیم کارت فعاله ایراد از کجاست؟

    1397-03-13 در 17:21
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز به نظر میرسه در ارتباط کامپیوتر و ماژول مشکلی وجود داره پایه های RX و TX رو چک کنید صحیح وصل شده باشند و زمین کامپیوتر و ماژول هم به هم متصل باشد.اگه فقط یک بار CPIN:READY بنویسه مشکلی نیست اما اگه بیشتر از یکبار باشه نشون میده تغذیه ماژول شما مشکل داره که باعث ریست شدن ماژول میشه پس از تغذیه مناسب استفاده کنید و خازن هم فراموش نشود

      1397-03-14 در 14:12
  • مجتبی پاسخ

    سلام اگر برنامه ایی برای ماژول sim900نوشته شده باشه والان بخواهیم مازولsim800 جایگزین کنیم ایا بدون تغیر در برنامه امان جابجایی این دو ماژول با هم هست سپاس گذارم

    1397-09-28 در 19:00
  • reza.no پاسخ

    سلام خسته نباشید
    من بسته آموزشی رو دانلود کردم
    چندتا سوال دارم خدتتون اول این که این برنامه ها با پرتئوس شبیه سازی میشن؟
    سوال دوم هنگام دریافت sms اول شماره مهم هست که فقط از یه شماره خواص یا به تعداد دلخواه شماره مخصوص ارسال شود و برای دریافت دستورات لازم مثلا 0 یا 1 کردن یکی یا چندتا از خروجی های میکرو طبق متن sms چه کار باید انجام شود؟
    سوم اینکه اگه امکان داره توضیحاتی برای کاربرد هرمثال بنویسید مثلا مثال 1 چه کارایی داره و هر خط برنامه چه عملی رو انجام مبده؟
    ممنون از سایت خوبتون

    1397-10-03 در 20:24
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز ممنونم سلامت باشید
      1. خیر امکان شبیه سازی دقیق با پروتئوس نمی باشد
      2. بله میتوان با تعریف یک یا چند شماره خاص اجرای دستورات را فقط به آن شماره ها محدود نمود. برای این کار یک بانک از شماره ها تعریف می شود و تنها در صورتی که شماره sms وارد شده با یکی از شماره های آن بانک مطابق باشد آنگاه مراحل بعدی انجام می شود
      3. حتما توضیحات بیشتری ارائه خواهیم کرد

      1397-10-11 در 15:06
  • علی پاسخ

    سلام
    میخواستم ببینم چجور میتونم آردینو رو به اینترنت با استفاده از سیم800lمتصل کنم

    1398-04-30 در 10:52
  • میترا پاسخ

    سلام مهندس ممنون از مطالب با ارزشتون واقعا کمک کرد و گره از خیلی از مشکلات من باز کرد فقط الان تنها سوالی برای من پیش اومده اینه که TE یا Terminal equipment و TA یا Terminal adaptor دقیقا چی هستن؟ سخت افزارن یا نرم افزار؟ اصلا نمیدونم چی هستن داخل دیتا شیت هم از این واژه ها برای توضیح بعضی ات کامند ها استفاده شده بود.
    ممنون میشم کمکم کنید.

    1398-08-15 در 23:08

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

1 × 2 =

بازگشت به آموزشگاه