عضویت     ورود  هنگامه رهایی اهریمن ، هنگام دربند شدن توست . ارد بزرگ چهارشنبه، 29 خرداد ماه ، 1398

کانال تلگرام


تبلیغات متنی


منوی سایت


جست و جو در بانك مقالات




مقالات جدید
تعداد شاخه ها: 30 عدد
تعداد مقالات: 758 عدد 1: آزمايشگاه الكترونيك - استاد محرري 
[دفعات مشاهده : 5484 بار]
 2: جزوه درس مخابرات 1 - دانشگاه فردوسي مشهد 
[دفعات مشاهده : 5519 بار]
 3: كتاب مهندسي تاسيسات / دكتر كلهر 
[دفعات مشاهده : 5369 بار]
 4: مجموع اعوجاج هارمونیک T.H.D 
[دفعات مشاهده : 5365 بار]
 5: كتاب "روش طراحي و تحليل مدارهاي الكترونيك" 
[دفعات مشاهده : 11934 بار]
 6: ادوات نوري 
[دفعات مشاهده : 5340 بار]
 7: كتاب اصول تلويزيون رنگي 
[دفعات مشاهده : 7028 بار]
 8: پروژه دزد گیر با سنسور تشخیص حرکت pir با قفل رمز الکترونیکی 
[دفعات مشاهده : 6557 بار]
 9: جزوه اندازه گیری الکتریکی 
[دفعات مشاهده : 5792 بار]
 10: سوالات کنکور کارشناسی ارشد 90 / گروه مهندسی برق 
[دفعات مشاهده : 7659 بار]
 11: آرشيو پروژه هاي 8051 
[دفعات مشاهده : 6474 بار]
 12: آرشيو پروژه هاي AVR‌ (ـ‌ 126 پروژه ) 
[دفعات مشاهده : 14324 بار]
 13: آموزش برنامه نويسي و كار با ماژول Sim300CZ با ميكروكنترلر AVR 
[دفعات مشاهده : 10446 بار]
 14: سوالات كنكور كارشناسي ناپيوسته 89 - گروه برق 
[دفعات مشاهده : 7875 بار]
 15: ارتباط میکروهای PIC با کمک پروتکل سریال I2C و نکات تکمیلی ماژول MSSP 
[دفعات مشاهده : 5973 بار]
 16: ساعت تقویم با کمک میکروکنترلر PIC و DS1307 
[دفعات مشاهده : 6595 بار]
 17: تایمرهای چند زمانه ( ساعت مرکزی ) با میکرو PIC 
[دفعات مشاهده : 5920 بار]
 18: ساعت تقویم شمسی مجهز به آلارم روزانه و هفتگی 
[دفعات مشاهده : 6869 بار]
 19: صفحه کلید وقفه ای با میکروکنترلر PIC 
[دفعات مشاهده : 5683 بار]
 20: کرنومتر دیجیتال با میکروکنترلر PIC با قابلیت ثبت 3 زمان 
[دفعات مشاهده : 5780 بار]
 21: طراحی و ساخت مدارات انتقال دیتا به وسیله ماژول های HMTR + پروژه چت متنی بیسیم 
[دفعات مشاهده : 8877 بار]
 22: سنسورهای حرارت 
[دفعات مشاهده : 7912 بار]
 23: کنترل وسایل برقی از طریق خط تلفن با میکروکنترلر PIC 
[دفعات مشاهده : 7948 بار]
 24: ارتباط سریال UART بین دو میکروکنترلر PIC 
[دفعات مشاهده : 6222 بار]
 25: گزارش کار آموزی : ماشین های ابزار کنترل عددی CNC 
[دفعات مشاهده : 6496 بار]
 26: کنترل وسایل به کمک ماژول HM-TR و میکرو AVR 
[دفعات مشاهده : 9045 بار]
 27: طراحی و ساخت کنترل از راه دور 1 کانال با کمک ماژول های ASK و آی سی های سری PT 
[دفعات مشاهده : 7487 بار]
 28: مجموعه رفرنس های آموزشی میکروکنترلرهای سری dsPIC 
[دفعات مشاهده : 6979 بار]
 29: مجموعه پروژه های میکروکنترلر AVR با کامپایلر بسکام 
[دفعات مشاهده : 12142 بار]
 30: طراحی و ساخت مدارات انتقال دیتا به وسیله ماژول های HM-T و HM-R با میکرو AVR 
[دفعات مشاهده : 9951 بار]


آخرين مطالب ارسال شده
· روش طراحي و تحليل مدارهاي الكترونيك[ 1 نظر شما چيه؟ - 39628 مشاهده ]
· اصول تلويزيون رنگي[ 0 نظر شما چيه؟ - 18206 مشاهده ]
· نرم افزار DigSilent[ 2 نظر شما چيه؟ - 21447 مشاهده ]
· AVR Tech Lib 2011[ 1 نظر شما چيه؟ - 24953 مشاهده ]
· مجموعه كنفرانس هاي سالينه ميكروچيپ / سال 2009 /[ 2 نظر شما چيه؟ - 22669 مشاهده ]
· آموزش كار با ماژول SIM300CZ با ميكرو AVR[ 4 نظر شما چيه؟ - 25033 مشاهده ]
· مجموعه فيلم هاي آموزشي نرم افزار Altium Designer[ 0 نظر شما چيه؟ - 39023 مشاهده ]
·  سوالات كنكور كارشناسي ناپيوسته 89 - گروه برق[ 0 نظر شما چيه؟ - 20022 مشاهده ]
· لينك دانلود مجله October 2010 / SERVO[ 0 نظر شما چيه؟ - 17073 مشاهده ]
· Catalog CA 01 (10/2009) / International version[ 0 نظر شما چيه؟ - 21378 مشاهده ]

[ موارد بیشتر در بخش اخبار و تازه ها ]


زبان
انتخاب زبان نمایش :



مطالب جديد


ارسال مقاله به سايت

 



...::: Ir-Micro.Com :::... :: View topic - راه حل جامع برای ماژول فرستنده - گیرنده رادیویی RFM12B


راه حل جامع برای ماژول فرستنده - گیرنده رادیویی RFM12B

 
Post new topic   Reply to topic    ...::: Ir-Micro.Com :::... Forum Index -> مخابرات Printable Version
View previous topic :: View next topic  
Author Message
azarmehr
کاربر عادی
کاربر عادی

Joined: Dec 09, 2007
Posts: 49





2260.14 امتیاز

Items

Status: Offline

PostPosted: پنجشنبه، 22 آذر ماه ، 1386 18:41:59 Reply with quote Scroll Down to Next postGo to last Post of Page

سلام دوستان
موضوع RFM12B موضوع جدیدی نیست. ولی توجه کردین که چه کد های گنگ و بی مصرفی برای این ماژول توی اینترنت هست؟ مثل کد ضعیفی که مثلا حتی توی خود دیتا شیت این ماژول هست یا کد وطنی سایت http://soomael.blogfa.com/ که نمونه برداری دقیق از کد دیتا شیت هست.

اما مشکل این برنامه ها چیه؟ مشکل فرق بین روش Polling و روش Interrupt برای انتظار کشیدن رسیدن داده ها هستش. به این معنی که شما برای دریافت داده ، روتین دریافت داده رو مرتبا توی یک حلقه بی نهایت قرار میدین تا یک وقتی اگر فرستنده میل داشت چیزی ارسال کند، روتین داده بتواندآن را دریافت کند.
همچنین مشکل دوم که توی کد ضعیف موجود در این دیتا شیت هست، ماکروی WAIT_IRQ_LOW هست که باز هم یک حلقه هست که وقت CPUرو بی مورد اشغال میکنه و اگر فرستنده چیری نفرسته میکرو توی این حلقه گیر میکنه و پروژه میخوابد.

راه حلی که بنده پیشنهاد میکنم استفاده از اینتراپت هستش. پایه 5 ماژول که FFIT نام داره بعد از دریافت صحیح یک کاراکتر پایین میره و همونجا میمونه تا وقتی که بایت رسیده رو از FIFO بخونین.
حالا می تونید این پایه رو به پایه ی وقفه خارجی میکرو (مثلاINT0 برای AVR) وصل کنید تا با دریافت داده میکرو اینتراپت داده و بلافاصله بایت را بخوانید تا برای بایت بعد آماده شوید.

دوستان در صورت علاقه مندی به این موضوع اگر نتوانستند این راه را پیاده سازی کنند، بنده با ارئه کد درخدمتم...

رامین آذرمهر

Back to top
View user's profile Send private message Send e-mail
Arash_em
مدیر سایت - Site Admin
مدیر سایت - Site Admin

Joined: Mar 12, 2006
Posts: 2230




Location: ايران
282074.08 امتیاز

Items

Status: Offline

PostPosted: پنجشنبه، 22 آذر ماه ، 1386 18:51:49 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام رامين جان...
ممنون از اطلاعاتت.
من اين كدها را قبلا ديده بودم , خيلي كدهاي گنگ و سر كاري هست...
اگر تونستي يك كد با بيسكام و يا كدويژن بزار تا دوستان طريقه ارتباط را بفهمند...
و يا اينكه اگر دوست داشتي درباره ريجيسترهاي كنترليش يكم توضيح بده...
البته ما يك مقاله آلماني پيدا كرده بوديم و مي خواستيم به نوعي از برنامش سر در بياريم و رو سايت بزاريم...اما هنوز وقت نكرديم...

با تقديم و احترام - آرش.
موفق و پيروز باشيد.


__________________
زهر است عطاي خلق هر چند كه دوا باشد*

حاجت ز كه مي خواهي جايي كه خدا باشد *
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Hamed
مدیر سایت - Site Admin
مدیر سایت - Site Admin

Joined: Mar 10, 2006
Posts: 1351




Location: تهران
702870.36 امتیاز

Items

Status: Offline

PostPosted: پنجشنبه، 22 آذر ماه ، 1386 19:20:05 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
این کدهای بسکام رو یکی از دوستان به من داده بود ، اما چون خودم با بسکام کار نمی کنم دیگه دنبالشو نگرفتم .
حالا لینکش رو میزارم اگه به درد خورد که ...



ممنون از همکاری و راهنمائی هایی که می کنید aa)


__________________

Back to top
View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger
azarmehr
کاربر عادی
کاربر عادی

Joined: Dec 09, 2007
Posts: 49





2260.14 امتیاز

Items

Status: Offline

PostPosted: پنجشنبه، 22 آذر ماه ، 1386 20:20:20 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام آقای حامد

ازاین کدها برای RFM12B توی اینترنت زیاد پیدا میشه که همه اونها از روش حلقه بی نهایت استفاده میکنند. مثلا درکدی که شما برای بسکام گذاشتین اینجا، مشکلی که من گفتم رو در قسمت زیر داره:
Text = "Dies ist ein 433MHz Test !!! {010} "

Do <=====> این خط!
' Hier ist die Senderoutine
' Call Rf12_txdata(maxchar)

Wait 1

' Hier ist die Empfangsroutine
' Call Rf12_rxdata(maxchar) <=====> این خط!

Loop

End
لازم نیست که حتما با بیسکام آشنا باشین تا مشکل بالا رو بفهمین. یک حلقه بی نهایت میبینید که شامل هیچ Break ای نمیشه. توی این کد که شما ارائه کردین برای دریافت دیتا حتما لازمه که روتین Rf12_rxdata رو توی حلقه بذارین که مشکلات که توی نامه های قبل گفتم رو داره.
البته روشی که من ارائه کردم حتی توی خود سایت Hope RF هم ارائه نشده!

مرسی از توجهتون
رامین آذرمهر

Back to top
View user's profile Send private message Send e-mail
mahdi906
کاربر تازه وارد
کاربر تازه وارد

Joined: Oct 12, 2006
Posts: 4





120.74 امتیاز

Items

Status: Offline

PostPosted: چهارشنبه، 24 بهمن ماه ، 1386 00:54:33 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

آذرمهر عزيز روش اگه ممكنه با ارائه كد مورد نظرتون بيشتر توضيح بدين.
با تشكر

Back to top
View user's profile Send private message
hasan_moq
کاربر تازه وارد
کاربر تازه وارد

Joined: Mar 21, 2008
Posts: 1




Location: قم
30.48 امتیاز

Items

Status: Offline

PostPosted: جمعه، 2 فروردين ماه ، 1387 22:06:34 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

خيلي راه حل جالبيه استفاده از اينتراپت ها توي اي وي آر
من از اين روش جواب گرفته ام
به اعتقاد من هركي اين قابليت ميكرو را بلد نباشد اصلا ميكرو بلد نيست


__________________
كمال علم در ايمان است
آن علمي كه مرا از ايمان باز دارد جهلي بيش نيست
اÙ
Back to top
View user's profile Send private message
emim2
کاربر تازه وارد
کاربر تازه وارد

Joined: Mar 20, 2008
Posts: 8





367.72 امتیاز

Items

Status: Offline

PostPosted: پنجشنبه، 26 ارديبهشت ماه ، 1387 06:47:38 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
برنامه ای که آقای باوفا (

)برای راه اندازی این ماژول ها نوشته بودند را یکبار با ATmega8 و یکبار با ATmega16 نوشتم و بدون هیچ مشکلی جواب گرفتم اما در برنامه ی خودم با یک مشکلی روبه رو شدم که متاسفانه هر کاری که کردم نتونستم درستش کنم . حالا برنامه ی من اینه توسط میکرو اول یک سری فرمان هائی به میکرو دوم که به یک استپر وصل هست ارسال می شه. میکرو دوم این فرمان ها را تجزیه تحلیل می کنه و استپر را می چر خونه . و اما مشکل: تابع Data_Receive را در while برنامه نوشتم که هر وقت چیزی دریافت می کنه وقفه1 را فعال می کنه و وارد سرویس روتین وقفه می شه و آنجا موتور شروع به حرکت می کنه اما در مدت حرکت موتور میکرو یا بهتر بگم ماژول دریافت کننده هیچ داده ای دریافت نمی کنه .البته به شکل های مختلفی این برنامه را نوشتم اما فایده نداره . یه جورائی این دو قسمت با هم ناسازگار هستند.
از دوستان کسی هست بتونه به من کمک کنه؟

Back to top
View user's profile Send private message
emim2
کاربر تازه وارد
کاربر تازه وارد

Joined: Mar 20, 2008
Posts: 8





367.72 امتیاز

Items

Status: Offline

PostPosted: پنجشنبه، 26 ارديبهشت ماه ، 1387 06:55:47 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

آقاي آذر مهر اگه مي شه بگيد به جاي اون قطعه كدي كه گفتيد چي بنويسيم؟
Back to top
View user's profile Send private message
azarmehr
کاربر عادی
کاربر عادی

Joined: Dec 09, 2007
Posts: 49





2260.14 امتیاز

Items

Status: Offline

PostPosted: پنجشنبه، 26 ارديبهشت ماه ، 1387 12:44:32 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام

من كه دقيقا سوال شما رو متوجه نشدم! اگر Data_Recieve رو توي حلقه While بينهايت گذاشتيد پس از روش Polling كه مشكلاتش رو توضيح دادم استفاده كرديد پس ديگه اون اينتراپتي كه گفتيد ديگه چيه ؟ نكنه هر دو روش رو با هم استفاده كرديد ؟ Question
در ضمن اگر ديتا شيت ماژول رو خونده باشيد ميبينيد كه اين برنامه رو آقاي باوفا(؟) ننوشته بلكه از رو ديتا شيت Copy و Paste كرده. اگر درست فهميده باشم شما گفتيد كه وقتي موتور كار ميكنه ماژول كار نميكنه ؟ شايد مشكل نويز دارين يا شايد رجيستر هاي ماژول رو درست ست نكرديد.
در عوض كدهايي كه گفتم بي مصرف هستندُ پايه FFIT كه شماره 5 روي RFM12B و 11 روي RFM12BP را به يكي از پايه هاي اينتراپت اكسترنال ببنديد و رجيستر اينتراپت رو Rising Edge تعريف كنيد. بعد كه ديتا رسيد و اينتراپت فعال شده مراحل زير رو انجام بديد:
1- كد 0x0000 رو به ماژول بفرستيد.
2- كاراكتر رو ميخونيد.
3- حالا كاراكتر رو پردازش كنيد. (روتين وقفه)
4- به ترتيب كدهاي 0xCA81 و بعد 0xCA83 رو به ماژول بفرستيد.

اين روش كلي بود كه نياز به حلقه While هم نداره! چون روش قديمي روي CPU ايجادOverhead ميكنه...

رامين آذرمهر

Back to top
View user's profile Send private message Send e-mail
emim2
کاربر تازه وارد
کاربر تازه وارد

Joined: Mar 20, 2008
Posts: 8





367.72 امتیاز

Items

Status: Offline

PostPosted: جمعه، 27 ارديبهشت ماه ، 1387 00:31:12 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام خیلی ممنون از لطفتان
من اول برنامه ی دریافت داده را در اینتراپ 1 نوشته و توسط پایه IRQ آن را فعال کرده بودم و برنامه ی موتور را در While نوشتم اما وقتی موتور می چرخید (البته به جای موتور LED وصل کرده بودم) داده ای دریافت نمی شد .
بعدا Data receive را در تایمر نوشتم . گفتم شاید وقفه مشکل داشته باشه اما بهتر که نشد بدتر هم شد.
بعد هم همین روشی که به شما گفتم .را انجام دادم که باز جواب نداد.
دستورات config برنامه مخصوصا WAIT_IRQ_LOW را هم تغییر دادم اما...
امروز که دیگه هیچ چاره ای نداشتم از دو میکرو استفاده کردم یکی داده می گیره با پورت سریال میده به میکرو دوم ، میکرو دوم موتور را می چرخونه . درست کار می کنه ولی خیلی بیخوده که دو تا میکرو استفاده کردم.
فکر کنم این روش شما را هم امتحان کرده باشم که حتما کردم اما نه با پايه FFIT با iRQ .
اما روش شما را تا شنبه امتحان می کنم . اگه مشکلی داشتم باز مزاحمتان می شوم.
باز هم از لطف شما تشکر می کنم.

Back to top
View user's profile Send private message
emim2
کاربر تازه وارد
کاربر تازه وارد

Joined: Mar 20, 2008
Posts: 8





367.72 امتیاز

Items

Status: Offline

PostPosted: يكشنبه، 29 ارديبهشت ماه ، 1387 07:33:31 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام

خلاصه اينكه نتونستم جواب بگيرم . ببينيد من اين كد ها را در اينتراپ نوشتم.
[align=left]RFrecieve_WRT_CMD(0x0000);
FIFO_data=RFrecieve_WRT_CMD(0xB000);
uChRecieve=(FIFO_data&0x00FF);
RFrecieve_WRT_CMD(0xCA81);
RFrecieve_WRT_CMD(0xCA83);
البته اين كد آبي را يه بار نوشتم جواب نداد دفعه بعد كه حذفش كردم باز تاثيري در جواب نداشت.
مي شه كمكم كنيد . پس فردا بايد تحويل بدم.

Back to top
View user's profile Send private message
azarmehr
کاربر عادی
کاربر عادی

Joined: Dec 09, 2007
Posts: 49





2260.14 امتیاز

Items

Status: Offline

PostPosted: يكشنبه، 29 ارديبهشت ماه ، 1387 09:46:01 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام

احتمالا خط دو و سوم نامنون كه گذاشتيد براي خوندن كاراكتر استفاده كرديد. بجاي اون اين عبارت رو استفاده كنيد ...
;(ch=(RFrecieve_WRT_CMD(0xB000)&0x00FF

در ضمن قسمت INIT ماژول رو در حالت رسيو يا سند بذاريد اينجا تا من ببينم. ممكنه كه تو INIT مشكل دارين.
يادتون نره كه اول برنامتون اول يك Delay حدود يك ثانيه بذاريد تا اسيلاتور ماژول پايدار بشه و بعد INIT كنيد.

رامين آذرمهر

Back to top
View user's profile Send private message Send e-mail
emim2
کاربر تازه وارد
کاربر تازه وارد

Joined: Mar 20, 2008
Posts: 8





367.72 امتیاز

Items

Status: Offline

PostPosted: يكشنبه، 29 ارديبهشت ماه ، 1387 18:42:43 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
من از همان برنامه ي موجود در ديتاشيت استفاده مي كنم.
[align=left]
#include <mega8.h>
#include <stdlib.h>
#include <stdio.h>
#include <delay.h>

//----------------------------------------MADULE INIT-----------------------------------------------
//-------------- ---------------------------------------------------------------------- -----------------------
#define DDR_IN 0
#define DDR_OUT 1

#define PORT_SEL PORTB
#define PIN_SEL PINB
#define DDR_SEL DDRB

#define PORT_SDI PORTB
#define PIN_SDI PINB
#define DDR_SDI DDRB

#define PORT_SCK PORTB
#define PIN_SCK PINB
#define DDR_SCK DDRB

#define PORT_SDO PORTB
#define PIN_SDO PINB
#define DDR_SDO DDRB

#define PORT_IRQ PORTD
#define PIN_IRQ PIND
#define DDR_IRQ DDRD

#define PORT_DATA PORTD
#define PIN_DATA PIND
#define DDR_DATA DDRD


#define RFXX_SCK 5// \
#define RFXX_SDO 4// |RF_PORT
#define RFXX_SDI 3// |
#define RFXX_SEL 2// |
#define PB0 0//--/

#define SEL_OUTPUT() DDR_SEL |= (1<<RFXX_SEL)
#define HI_SEL() PORT_SEL|= (1<<RFXX_SEL)
#define LOW_SEL() PORT_SEL&=~(1<<RFXX_SEL)

#define SDI_OUTPUT() DDR_SDI |= (1<<RFXX_SDI)
#define HI_SDI() PORT_SDI|= (1<<RFXX_SDI)
#define LOW_SDI() PORT_SDI&=~(1<<RFXX_SDI)

#define SDO_INPUT() DDR_SDO&= ~(1<<RFXX_SDO)
#define LOW_SDO() PORT_SDO&= (1<<RFXX_SDO)
#define SDO_HI() PIN_SDO&(1<<RFXX_SDO)

#define SCK_OUTPUT() DDR_SCK |= (1<<RFXX_SCK)
#define HI_SCK() PORT_SCK|= (1<<RFXX_SCK)
#define LOW_SCK() PORT_SCK&=~(1<<RFXX_SCK)

//-----------------------------------------------
#define RF12_IRQ 2
#define IRQ_IN() DDR_IRQ &=~(1<<RF12_IRQ)
#define WAIT_IRQ_LOW() while(PIND&(1<<RF12_IRQ))
//-----------------------------------------------

#define RF12_DATA 4//PD4
#define DATA_OUT() DDR_DATA|=1<<RF12_DATA
#define HI_DATA() PORT_DATA|=1<<RF12_DATA

#define RFM12_Reset PORTB.0
#define ON 0
#define OFF 1

unsigned char uChRecieve;

void RFrecieve_PORT_INIT(void){
HI_SEL();
HI_SDI();
LOW_SCK();
//SET nFFS pin HI when using FIFO
HI_DATA();
SEL_OUTPUT();
SDI_OUTPUT();
SDO_INPUT();
SCK_OUTPUT();
IRQ_IN();
DATA_OUT();
}

unsigned int RFrecieve_WRT_CMD(unsigned int aCmd){
unsigned char i;
unsigned int temp;
temp=0;
LOW_SCK();
LOW_SEL();
for(i=0;i<16;i++){
if(aCmd&0x8000){
HI_SDI();
}else{
LOW_SDI();
}
HI_SCK();
temp<<=1;
if(SDO_HI()){
temp|=0x0001;
}
LOW_SCK();

aCmd<<=1;
};
HI_SEL();
return(temp);
}
void RF12recieve_INIT(void){
RFrecieve_WRT_CMD(0x80D7);//EL,EF,433band,11.5pF
RFrecieve_WRT_CMD(0x82D9);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
RFrecieve_WRT_CMD(0xA640);//434MHz
RFrecieve_WRT_CMD(0xC647);//4.8kbps
RFrecieve_WRT_CMD(0x94A0);//VDI,FAST,134kHz,0dBm,-103dBm
RFrecieve_WRT_CMD(0xC2AC);//AL,!ml,DIG,DQD4
RFrecieve_WRT_CMD(0xCA81);//FIFO8,SYNC,!ff,DR
RFrecieve_WRT_CMD(0xC483);//@PWR,NO RSTRIC,!st,!fi,OE,EN
RFrecieve_WRT_CMD(0x9850);//!mp,9810=30kHz,MAX OUT
RFrecieve_WRT_CMD(0xE000);//NOT USE
RFrecieve_WRT_CMD(0xC800);//NOT USE
RFrecieve_WRT_CMD(0xC400);//1.66MHz,2.2V
}

interrupt [EXT_INT1] void ext_int1_isr(void)
{
align=left]RFrecieve_WRT_CMD(0x0000);
//FIFO_data=RFrecieve_WRT_CMD(0xB000);
//uChRecieve=(FIFO_data&0x00FF);
ch=(RFrecieve_WRT_CMD(0xB000)&0x00FF);
RFrecieve_WRT_CMD(0xCA81);
RFrecieve_WRT_CMD(0xCA83);


}


void main(void)
{
// Global enable interrupts
#asm("cli");

// External Interrupt(s) initialization
// INT0: Off
// INT1: On
// INT1 Mode: Rising Edge
GICR|=0x80;
MCUCR=0x0C;
GIFR=0x80;

#asm("sei")
//----------------------------------------------------------------- -------------------

while(1)
{
PORTD.6=!PORTD.6;
PORTD.5=!PORTD.5;
delay_ms(500);

};

}

راستي اگه خواستم كريستال 8 مگ استفاده كنم بايد چي كار كنم؟
ممنونم

Back to top
View user's profile Send private message
emim2
کاربر تازه وارد
کاربر تازه وارد

Joined: Mar 20, 2008
Posts: 8





367.72 امتیاز

Items

Status: Offline

PostPosted: چهارشنبه، 1 خرداد ماه ، 1387 05:54:45 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام

كسي كمك نمي كنه؟
آقاي آذر مهر كجاييد؟
Question

Back to top
View user's profile Send private message
mahdi4114
کاربر تازه وارد
کاربر تازه وارد

Joined: Sep 28, 2008
Posts: 1




Location: tehran
33.24 امتیاز

Items

Status: Offline

PostPosted: دوشنبه، 8 مهر ماه ، 1387 16:09:03 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام من دانشجو هستم. در پروژه خود از مازول RFM12BP استفاده کردم .فرستنده چراغ قرمز(در برنامه datasheet) کار می کند اما در گیرنده اتفاقی نمی افتد. از شما خواهش دارم اگر امکان دارد مرا راهنمایی بفرمایید.
پیشاپیش کمال تشکر و قدر دانی را دارم

Back to top
View user's profile Send private message
naeemafar
کاربر نیمه فعال
کاربر نیمه فعال

Joined: Dec 15, 2008
Posts: 69




Location: Mshd
8191.76 امتیاز

Items

Status: Offline

PostPosted: يكشنبه، 1 دي ماه ، 1387 19:51:33 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام
من تازگی با این RFM 12 آشنا شده ام
به نظر من این برنامه در حد دمو هست
من سعی دارم
از توابع spi برای ارسال استفاده کنم
امکان برقراری ارتباط دو طرفه را بررسی کنم فکر کنم شدنی باشه
الگوریتم خطایابی اون را بهبود ببخشم
از وقفه ها استفاده کنم

اگر کسی من را همراهی و راهنمایی کند ممنون می شوم

Back to top
View user's profile Send private message Send e-mail Yahoo Messenger MSN Messenger
zn_hamed
کاربر تازه وارد
کاربر تازه وارد

Joined: Apr 24, 2007
Posts: 1





75.00 امتیاز

Items

Status: Offline

PostPosted: جمعه، 8 خرداد ماه ، 1388 10:46:28 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

سلام به تمام دوستان گرامی .کد زیر برای اشنایی نحوه کد دهی به میکرو برای ارتباط با مدول rfm 12 میباشد
کد برنامه به زبان بسکام جهت استفاده براتون قرار میدم در اینده نیز کد برنامه به زبان c برای غلاقه مندان قرار خواهم داد.(حامد)
************************************************** *********************
'IMPORTANT NOTE:
'This code uses the FFIT signal from the RFM12 module.
'Add a connection from FFIT to PD.2 (pin 4).
'This program transmits rs232 data using RFM12 wireless Trasceivers.
'Type some text then press "Enter" to send it.
'The text will be output at the 2nd micro's rs232 uart.
'Errors are detected but for this example they are ingnored.

'change these to match your setup.
************************************************************* *******************
$regfile = "m168def.dat"
$crystal = 14745600
'$regfile = "m88def.dat"
'$regfile = "m328pdef.dat"
'$crystal = 8000000

'$baud = 19200
$baud = 115200
Print "Serial IO"

'These are for my bootloader.
'$loadersize = 2048
'$programmer = 13

Declare Sub Rfm12_tx_packet
Declare Sub Rfm12_rx_packet

Const Fc = 435.00
Const Fr =(fc - 430) * 400
Const Fcmnd = &HA000 + Fr

'LSB of CE command = Syncron address of RFM12 device. Must match target device.
Const Syncron = &HD4
Const Acmnd = &HCE00 + Syncron

'not used in this examaple.
Const Ackb = &H7F
Const Nackb = &H7E
'Number of retrys before LinkFails
Const Retrys = 10

Dim Timeout As Bit

Dim Temp1 As Byte
Dim Txid As Byte
Dim Crc As Byte
Dim Rxstatus As Byte
Dim Deviceaddr As Byte
Dim Txbyte As Byte
Dim Rxbyte As Byte
Dim Txpntr As Byte
Dim Rxpntr As Byte
Dim Key As Byte

'Packet format:
'Byte
' 1 Destination Address
' 2 Source Address
' 3 Message Length
' 4 Message ID
' 5 Function
' 6 Arg1
' 7 Arg2
' 8 data1
' 9 data2
' . .
' . .
' 23 data16
' 24 CRC - crc is for all bytes (1 thru 23).

Dim Rxbuf(40) As Byte
Dim Rxstr As String * 32 At Rxbuf(6) Overlay
Dim Txbuf(40) As Byte
Dim Strin As String * 32
Dim Strout As String * 32

Dim Spi_tx_wrd As Word
Dim Spi_tx_l As Byte At Spi_tx_wrd Overlay
Dim Spi_tx_h As Byte At Spi_tx_wrd + 1 Overlay
Dim Spi_rx_wrd As Word
Dim Spi_rx_l As Byte At Spi_rx_wrd Overlay
Dim Spi_rx_h As Byte At Spi_rx_wrd + 1 Overlay

'Error bits.
Rxnotmyaddr Alias Rxstatus.0
Rxid_err Alias Rxstatus.1
Rxcrcerr Alias Rxstatus.2
Rxtimeout Alias Rxstatus.3
Rxnack Alias Rxstatus.4
Comerr Alias Rxstatus.5

'1 = output, 0 = input
Config Portb = &B0010_1100

'these are pin assignments for the RFM12.
'change to match your system.
Rfm12_cs Alias Portb.2
Set Rfm12_cs

Rfm12_sdi Alias Portb.3

Rfm12_sdo Alias Pinb.4
Set Portb.4

Rfm12_sck Alias Portb.5

'RFM12_FFIT alias Pinb.1
'config pinb.1 = input
'set portb.1

'for Diecmila
Rfm12_ffit Alias Pind.2
Config Pind.2 = Input
Set Portd.2

'LED pin assignments
Rx_led Alias Portd.5
Config Pind.5 = Output

Tx_led Alias Portd.6
Config Pind.6 = Output

Error_led Alias Portd.7
Config Pind.7 = Output

'flash LEDs
Reset Rx_led
Reset Tx_led
Reset Error_led
Waitms 250
Set Rx_led
Set Tx_led
Set Error_led

'watchdog is used for RX timeout.
'it does not reset the micro.
'if it times out isrTimeOut is run.
'see: RFM12_Rx_Packet for how it is used.
Config Watchdog = 128
On Wdt Isrtimeout
Disable Wdt
Enable Interrupts

Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , _
Polarity = Low , Phase = 0 , Clockrate = 16 , Noss = 1
Spiinit

'redirect print #2
'to transmit data just use print #2, "your string"
$serialoutput1 = Myoutput
Open "com2:" For Binary As #2

Gosub Rfm12_init
Gosub Rfm12_restart_synchron

'Addresses:
'You can select any values for your device
'addresses. Just make sure that DeviceAddr matches
'MyAddr in the other micro.

'use these on one device
Const Myaddr = &HDC
Deviceaddr = &HAC

'And use these on the other device
'const MyAddr = &hAC
'DeviceAddr = &hDC

Txpntr = 5

Do
'check for received data
Gosub Inputstr
If Rxstr <> "" Then
Print Rxstr;
End If

Key = Inkey()
If Key > 0 Then
If Key = 13 Then
'Transmit data
Print #2 , Strout
Print "Tx: " ; Strout
Strout = ""
Else
'Buffer key strokes until a <CR>
Strout = Strout + Chr(key)
End If
End If
Loop

'***** subroutines *****
Myoutput:
'the data arrives in R24
'store data in TxByte
!sts {TxByte} , r24
Pushall
Incr Txpntr
'send packet if length gets to long
If Txpntr > 38 Then Txbyte = 10
'print TxByte
Txbuf(txpntr) = Txbyte
'if data is a LF then send packet.
If Txbyte = 10 Then
Incr Txid
Txbuf(1) = Deviceaddr
Txbuf(2) = Myaddr
Txbuf(3) = Txpntr + 1
Txbuf(4) = Txid
Txbuf(5) = 0
Txbuf(txbuf(3)) = Crc8(txbuf(1) , Txpntr)
Rfm12_tx_packet
Txpntr = 5
End If
Popall
Return

Inputstr:
'FFIT is set when a byte of data has come into the receiver.
If Rfm12_ffit = 1 Then
'so go receive one complete packet.
Gosub Rfm12_rx_packet
'if Rx was good.
'mask IdError
Rxstatus = Rxstatus And &HFD
If Rxstatus = 0 Then
'check for boot uploader calling.
'if it is jump to boot loader.
If Rxbuf(5) = &H8F Then Goto &HC00
'print "RX OK"
Rxbuf(rxbuf(3)) = 0
End If
Else
Rxstr = ""
End If
Return

Rfm12_init:
'Initialize RFM12
Restore Init_data
For Temp1 = 1 To 16
Read Spi_tx_wrd
'send init data to RFM12.
Gosub Rfm12_spi_wrt
'waitms 30
Next Temp1
Return

Init_data:
'19.2kbps - This data is tested and works well.
Data &HCA81% , &HFE00% , &H80D8% , &H8298% , Fcmnd% , &HC611% , &H94C0% , &HC2AC%
Data &HCA81% , Acmnd% , &HC483% , &H9820% , &HCC17% , &HE000% , &HC800% , &HC040%

'38.3kbps - quick short range (~25') test - Some Errors - corrected
'data &hCA81% , &hFE00% , &h80D8% , &h8298% , Fcmnd% , &h9480% , &hC2AC% , &hCA81%
'data ACmnd% , &hC483% , &h9870% , &hCC17% , &hE000% , &hC800% , &hC040%

Sub Rfm12_tx_packet
Local I As Byte
Local L As Byte
Reset Tx_led
'get Packet Length and add a dummy byte to payload
L = Txbuf(3) + 1
'turn on Tx
Spi_tx_wrd = &H8239
Gosub Rfm12_spi_wrt
'short delay for Tx startup.
Waitus 150
'Send Preamble.
Restore Txpreamble_data
For I = 1 To 5
Read Spi_tx_wrd
Gosub Rfm12_ready
Gosub Rfm12_spi_wrt
Next I
'Send payload.
For I = 1 To L
Spi_tx_wrd = &HB800 + Txbuf(i)
Gosub Rfm12_ready
Gosub Rfm12_spi_wrt
Next I
Gosub Rfm12_ready
'turn on Rx
Spi_tx_wrd = &H8299
Gosub Rfm12_spi_wrt
Waitus 80
Gosub Rfm12_restart_synchron
Set Tx_led
End Sub
Txpreamble_data:
Data &HB8AA% , &HB8AA% , &HB8AA% , &HB82D% , &HB8D4%

Rfm12_ready:
Reset Rfm12_cs
Bitwait Rfm12_sdo , Set
Return

Sub Rfm12_rx_packet
Local I As Byte
Local L As Byte
Reset Rx_led
'reset RxOk
Reset Timeout
Rxstatus = 0
I = 1
L = 3
Enable Wdt
'read FIFO command word for RFM12
Spi_tx_wrd = &HB000
'loop until packet has been received.
While I <= L
'wait for data in FIFO.
'if nothing the watchdog will timeout with Timeout set.
Reset Watchdog
While Rfm12_ffit = 0
If Timeout = 1 Then
Set Rxtimeout
Goto Endrx
End If
Wend
'get data from FIFO.
'data in LSB of SPI_Rx_wrd ie SPI_Rx_l.
Gosub Rfm12_spi_wrt
'copy data to buffer.
Rxbuf(i) = Spi_rx_l
'1st byte - check for divice address
If I = 1 Then
If Spi_rx_l <> Myaddr Then
Set Rxnotmyaddr
Goto Endrx
End If
End If
'third byte of packet is the length.
'store length in l.
If I = 3 Then L = Spi_rx_l
'fourth byte is the message ID.
If I = 4 Then
If Spi_rx_l <> Txid Then Set Rxid_err
End If
'Fifth byte is ACK or NACK
If I = 5 Then
If Spi_rx_l = Nackb Then Set Rxnack
End If

'incrament index
Incr I
Wend
Crc = Rxbuf(l)
Decr L
If Crc8(rxbuf(1) , L) <> Crc Then Set Rxcrcerr
Endrx:
Disable Wdt
Set Rx_led
Gosub Rfm12_restart_synchron
End Sub

Rfm12_restart_synchron:
Spi_tx_wrd = &HCA81
Gosub Rfm12_spi_wrt
Spi_tx_wrd = &HCA83
Gosub Rfm12_spi_wrt
Return

Rfm12_spi_wrt:
'Send word (SPI_Tx_wrd) to RFM12.
'Also receive word (SPI_Rx_wrd).
'RFM12 Chip select
Reset Rfm12_cs
'send hi byte.
Spi_rx_h = Spimove(spi_tx_h)
'send lo byte.
Spi_rx_l = Spimove(spi_tx_l)
'deselect chip.
Set Rfm12_cs
Return

Isrtimeout:
Timeout = 1
'print "isr"
Return

Back to top
View user's profile Send private message
koook
کاربر تازه وارد
کاربر تازه وارد

Joined: Feb 08, 2010
Posts: 3





84.22 امتیاز

Items

Status: Offline

PostPosted: دوشنبه، 19 بهمن ماه ، 1388 16:50:31 Reply with quote Go to Top of PageScroll Up to Previous postScroll Down to Next postGo to last Post of Page

عالیه؟
Back to top
View user's profile Send private message
esmael
کاربر عادی
کاربر عادی

Joined: Dec 05, 2006
Posts: 59





136710.74 امتیاز

Items

Status: Offline

PostPosted: چهارشنبه، 5 اسفند ماه ، 1388 11:26:43 Reply with quote Go to Top of PageScroll Up to Previous post

سلام
ابتدا از گویندگان مطالب تشکر میکنم
اگه میشه کد rfm12 رو برای pic یا به زبان pic basicpro هم بنویسید
متشکرم

Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    ...::: Ir-Micro.Com :::... Forum Index -> مخابرات All times are GMT + 3.5 Hours
Page 1 of 1
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum

 
 Jump to:   

Related topics
 Topics   Replies   Author   Views   Last Post 
No new posts راه اندازي تريستور با AVR 12 sips65 26948 چهارشنبه، 28 آبان ماه ، 1393 14:41:07
hossein13731373 View latest post
No new posts کمک فوری در مورد تغذیه avr 15 ahmd110 20624 پنجشنبه، 7 دي ماه ، 1391 00:48:42
m_khoshbaten View latest post
No new posts برنامه اسکن کیبورد کامپیوتر در AVR 18 etrmodern 26224 دوشنبه، 5 مرداد ماه ، 1388 10:24:27
a1s1b0 View latest post
No new posts ساعت با AVR (همراه با آلارم) ؟؟؟؟؟ 6 saeid_p9 18298 دوشنبه، 5 مرداد ماه ، 1388 10:10:28
a1s1b0 View latest post
No new posts اتصال کی بورد کامپیوتر به نرم افزار AVR 0 k1elia30 12942 شنبه، 16 شهريور ماه ، 1387 13:30:53
k1elia30 View latest post
 


Powered by phpBB © 2001, 2008 phpBB Group

Ported to Platinum 7.6.b.4 V2 by sadeghkhafan

فروشگاه تخصصی برق و الکترونیک ایران میکرو
www.iran-micro.com
PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL.
Powered by Platinum 7.6.b.4 v2
Powered by Platinum 7.6.b.4 v2 Persian

مدت زمان ایجاد صفحه : 0.19 ثانیه