انجام دادم فرقی نکر مثل همون حالت دستی شد
نکنه مشکل از برد ماژوله؟
اخه چیز مهمی نداره که جواب نده.
مدار تغذیه رو شما چی بستی خروجیش چنده؟
lM 2576 با اداپتور 4/5 امپری لپ تاپ 3 امپر نمیتونه بده؟
شما lm رو به چی وصل کردی یعنی تغذیه اصلیت چی بوده؟
سلام
من یه شماتیکی دیدم که آنتن رو بوسیله مدار زیر به ماژول وصل کرده بود! اما داخل دیتاشیت چیزی نگفته. کسی میدونه این مدار بین آنتن و ماژول بخاطر چیه و کارش چیه؟
سلام دوستان
من این برنامه را (صفحه اول) یکم تغییرش دادم که مثلا اگر 1111 بود این کار را انجام بده 2222و3333و4444و5555و6666و0000 هر کدوم یک کاری انجام میدن
دستورات انجام میشه ولی بعد از یه مدتی یا چندتا دستور را که انجام داد دیگه هیچ کدوم از فرمان ها را انجام نمیده
مشکل از کجاست ؟ میکرو هنگ میکنه ؟
چیکار باید کرد ؟
تو برنامه یه قسمتی هست به 5 که برسه پاک میکنه
وقتی که به یک آرایه بیش از اندازش داده میریزین داده هایی که در حافظه بعد از اون قرار گرفتن نوشته میشن. پس در زبان c باید خودمون به اندازه ی آرایه توجه کنیم.
اما به نظر من مشکل از چیز دیگه ای هست. این برنامه یک پروژه ی دانشجویی بوده و نحوه ی کار با sim900 رو میگه و هیچ تضمینی برای کارکرد صحیح اون نیست. کافیه یک دستور اشتباه بهش بدین یا ناخواسته بهش برسه و هنگ کنه.
هنر یک برنامه ی صنعتی اینه که با اشتباهات به کار خودش ادامه بده و مقاوم باشه و اگه درامدی از این پروژه داشتم بخاطر همین بوده
پروژه های مهم من در ایران میکرو:
" انتقال اطلاعات با SIM900 " ، " آموزش پورت USB " ، " راه اندازی MFRC522 " ، " راه اندازی SLE4442 " ، ""
من تونستم با میکرو ماژول sms بفرستم یا تونستم sms رو از یک محل مشخص روی LCD با فرمت دلخواهم نمایش بدم. اما یه مشکل عجیبی که دارم اینه که بعد از اومدن sms و فعال شدن وقفه نمیتونم اون خطی که مکان اس ام جدید رو میده بخونم تا ازش محل ذخیره sms جدید رو در بیارم.
همون طور که میدنید بعد از اومدن اس ام اس جدید این فرمانو میفرسته ماژول:
که یعنی sms تو مکان 5 هست. حالا من برنامم بعد از اومدن اس ام اس جدید یا زنگ میره تو وقفه ولی اونجا با دستور getchar() نمیتونم هیچ کدوم از این کاراکترها رو بخونم (در واقع هیچ چیزی نیست که خونده بشه). اما جالب اینجاست که میتونم بعد از زنگ زدن که ماژول هر یک ثانیه RING رو نشون میده این RING رو با getchar() بخونم یعنی به نظرم دلیل اینکه میتونم RING رو بخونم اینه که داره تکرار میشه هی اما با اومدن sms جدید +CMTI= "SM",5 فقط یکبار فرستاده میشه و من نمیتونم بخونمش. همین RING هم در واقع از تکرار دوم به بعد خونده میشه و اولیش خونده نمیشه.کد:+CMTI= "SM",5
کسی میدونه مشکل از چیه؟ اصلا برای پیدا کردن محل sms جدید از همین +CMTI= "SM",5 که بعد اومدن sms ماژول میفرسته باید استفاده کرد؟ وقعا بدجوری گیر کردم علت همچین مشکل مسخره ای رو نمیفهمم.
بله رو تکسته. گفتم که من تو خوندن sms و دریافتش هیچ مشکلی ندارم. ببینید مشکل من اونجاست که وقتی sms جدید میاد و اون خط +CMTI که توش محل sms جدید هست میاد رو نمیتونم بخونم! ولی اگه زنگ بخوره گوشی پیغام RING رو میتونم بخونم علتش هم اینه که RING رو ماژول تکرار میکنه هی! و در واقع من برنامم از دومین تکرار RING میتونه بخونه!
یجورایی برای دلیلش حدسی که میزنم اینه که ما مثلا برای خوندن sms ابتدا خودمون مثلا دستور AT+CMGR=X رو میفرستیم و بعد جوابش رو میخونیم با getchar ولی اینجا ماژول بدون گرفتن هیچ دستوری داره پیغامی رو میفرسته! یه جورایی انگار حتما باید یه Enter یا LF اول بفرسته که ما بتونیم با getchar از تو ورودی بخونیمش وگرنه چیزی تو ورودی نیست! موقع زنگ خوردن هم همونطور که میدونید ماژول اینو میفرسته
RING
RING
RING
درواقع انگار بعد هر RING یک کاراکتر Enter فرستاده میشه واسه همین من میتونم از دومین RING به بعد رو بخونم. البته این یه حدسه.
سوال دیگه شما هم واسه پیا کردن مکان sms جدید از همین خط +CMTI= "SM",X استفاده میکنید؟
================
الان که تست کردم میتونم با یه لوپ معمولی منتظر شم تا CMTI رو پیدا کنم ولی همون لوپ رو اگه بعد وقفه sms بکار ببرم که بیاد بعد از sms اومدن اینو بخونه نمیتونم بخونمش. در واقع انگار بافر ورودی خالی شده بعد از وقفه و چیزی برای خوندن نیست. واقعا گیج شدم!!
ویرایش توسط Romax : 02-07-2013 در ساعت 21:21
سلام
شما از برنامهی خواندن sms داخل پی دی اف صفحه اول استفاده کنید حتما جواب میده.
تو اون برنامه از وقفه خارجی استفاده نشده! به نظرم این که میکرو دائما در حال چک کردن پیغام های ورودی باشه کار درستی نیست.... من میخوام هروقت sms جدید اومد +CMNTI رو بخونم نه اینکه میکرو دائما در حال چک کردنش باشه وگرنه این طوری خیلی سادست.
تو اون برنامه از وقفه Rx برای چی استفاده شده؟ اصلا کار وقفه Rx چیه که اونجا به کار رفته؟