ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 7 1234567 آخرین
نمایش نتایج: از 1 به 10 از 70
  1. #1
    2008/01/23
    تهران
    435
    7

    ساخت گیرنده ریموت کد لرن توسط PIC16F876 به زبان PICBASIC PRO


    در این پروژه یک گیرنده ریموت 3 رله میسازیم
    برای اینکار نیاز به یکعدد ریموت کنترل بتا که ask ]ستند و در فرکانس 433 کار میکنند
    یک عدد ماژول گیرنده ask433 یا pcr433
    روش کلی به این صورت هست که ماژول گیرنده کدهای ارسالی ریموت را دریافت میکنه و تبدیل به پالس میکنه و ما اون پالسها را پردازش میکنیم

    همانطور که دوستان در تاپیکهای avr اشاره کردن اکثر ریموتهای لرن از آی سی EV1527 استفاده میکنند که این آی سی 24 بیت کد ارسال میکنه
    که 20 کد مربوط به سریال ریموت کنترل هست و 4 کد آخر مربوط به کلید ریموت کنترل
    این 24 بیت که مجموعه ایی از صفر و یک هست به صورت خاصی ارسال میشود :
    یکها پالسی به طول مثلا 3 ms
    صفرها پالسی به طول 1 ms

    یعنی طول پالسهای یک 3 برابر صفر هست

    وقتی کلیدی را فشار میدهیم اول پالس با سطح یک به مدت 3 ms سپس پالسی به طول 31 برابر صفرها اما با سطح صفر میفرسته یعنی 31ms بعدش کدهای صفر و یک را ارسال میکنه پس اول PREMBLE بعد هم 24 کد

    پس روش کار به این صورت هست :
    اول منتظر میمونه یک بشه بعدش تا صفر شد طول پالس را اندازه میگیریم هر وقت پالسی اومد که طولش 31ms بود یعنی ریموت داره کد ارسال میکنه بعد از اون تا 24 پالس را ذخیره میکنیم که مربوط به کدهای ریموت هستند .

    چون باید اندازه گیری دقیق باشه پایه دیتای گیرنده را به تایمر 1 میکرو میدیم توسط اون اندازه میگیریم .

    با کریستال 16 MEG و استفاده از تایمر یک این مقادیر به دست میاد :

    PRIMBLE : اگر بین 4500 تا 6500 بود پس میفهمیم که کلید زده شده
    یکها : بین 300 تا 800
    صفرها : بین 50 تا 300

    هر چی هم خارج این مقادیر بود یعنی خطا هست از برنامه خارج میشوید .


    حالا میریم سراغ برنامه نویسی :

    راه اندازی تایمر 1 :

    t1con.0=0: tmr1h=0 :tmr1l=0
    t1con=%00110000


    حلا در قسمت اصلی برنامه منتظر میمونیم که پایه متصل به ماژول گیرنده هر وقت 1 شد ما عرض پالس را با تایمر 1 اندازه بگیریم اگر مقدار مورد نظر بود عمل کنه فرض کنیم اسم پورتی که دیتای گیرنده وصل هست RF باشه :
    if rf=1 then
    t1con=%00110000: tmr1h=0 :tmr1l=0 :t1con=%00110001 ;shoro
    while rf=1
    v2.byte1=tmr1h : v2.byte0=tmr1l
    if v2>1000 then goto badesh1
    wend
    :badesh1
    برای اینکه قابل فهم باشه توضیح میدم بعدش ادامه برنامه :
    دستور IF منتظر میمونه که پالس بیاد سپس تایمر 1 را روشن و مقدارش را صفر میکنه سپس وارد حلقه میشه و تا وقتی یک هست در حلقه میمونه تایمر 1 هم که در حال اندازهگیری هست که در V ذخیره میشه
    اما اگر بر اثر نویز یا هر چیز دیگه این پایه مدت زیادی 1 بمونه داخل این حلقه گرفتار میشه برای همین داخل حلقه مقدار V را اندازه میگیریم اگر از مقدار مورد نظر ما بیشتر شد خارج بشه
    حالا ادامه برنامه :
    t1con=%00110000: tmr1h=0 :tmr1l=0 :t1con=%00110001 ;shoro
    while rf=0
    s2.byte1=tmr1h : s2.byte0=tmr1l
    if s2>6500 then goto badesh2
    wend
    badesh2:
    t1con=%00110000 ;payan

    s2.byte1=tmr1h : s2.byte0=tmr1l
    if s2>4500 then
    if s2<6500 then

    goto daryaft_kod
    endif
    endif
    goto main
    دوباره تایمر 1 صفر میشه و روشن میشه و مدت زمانی که پایه صفر هست را میشماره داخل حلقه اگر از مقدار مورد نظر بیشتر شد برای گرفتار نشدن خارج میشه اگر هم مقدار مورد نظر درست
    بود که خود به خد از حلقه خارج میشه چون پالس به صفر و یک تغییر میکنه
    بعد هم تایمر1 را خاموش میکنیم گناه داره
    بعد هم مقادیر تایمر را در s2 ذخیره میکنیم
    حالا اگر این s2 بین مقادیر 4500 تا 6500 بود پش پیش کد ارسال شده باید بلافاصله 24 تا بعدی را بخونیم
    اما زیر برنامه دریافت کدها :
    اول 34 بیت را دریافت میکنیم که همشون سطح 1 دارند با عرضهای مختلف اونها که 3ms (بین 300 تا 800)هستند یک هستند و اونها که 1 ms (بین 100 تا 300)هستند صفر هستند و هر چی غیر از اینها باشه غلطه خارج میشه
    بعدش هم برای اینکه حافظه الکی پر نشه اونها که بین 300 تا 800 هستند را جاش 1 ذخیره میکنیم اونها هم که بین 100 تا 300 هستند جاش صفر میزاریم
    حالا بریم توضیح زیر برنامه :
    :daryaft_kod
    j=0

    while j<code


    if rf=1 then
    t1con=%00110000: tmr1h=0 :tmr1l=0 :t1con=%00110001
    while rf=1
    s2.byte1=tmr1h : s2.byte0=tmr1l
    if s2>850 then goto main
    wend
    :
    t1con=%00110000
    j=j+1
    s2.byte1=tmr1h : s2.byte0=tmr1l
    s[j]=s2
    tmr1h=0 :tmr1l=0 :t1con=%00110001
    endif
    wend
    tmr1h=0 :tmr1l=0 :t1con=%00110000

    for i=1 to code
    if s>=300 and s<=800 then
    s=1
    else

    if s>=100 and s<300 then
    s=0
    else
    tmr1h=0 :tmr1l=0 :t1con=%00110000
    j=0


    goto main

    endif
    endif
    next i
    توسط حلقه while j تا 24 کد را میخونه و ذخیره میکنه سپس خارج میشه
    منتظر میمونه 1 بشه تایمر روشن وارد حلقه میشه اگر بیشتر از مقدار مورد نظر بود برای اینکه توی حلقه گیر نکنه خارج میشه اگر مجاز بود که از حلق میاد بیرون و مقدار تایمر در یک آرایه ذخیره میشه
    به همین ترتیب هر 24 تا در یک آرایه 24 تائی ذخیره میشوند
    سپس توسط حلقه for اونها که بین 100 تا 300 بودن بهشون 0 مقدار میدیم و اونها که بین 300 تا 800 بودن بهشون 1 میدیم
    هر چی هم خارج این مقادیر باشه یعنی اشتباه از برنامه خارج میشه
    خوب حالا ما کدها را داریم باید 20 تا بیت اول را ذخیره کنیم و 4 تا بیت آخر مشخص میکنه که کدوم کلید زده شده
    در ادامه برنامه کامل و فایل pcb را میزارم .
    همه دوست دارند به بهشت بروند اما جالب اینجاست کسی دوست ندارد بمیرد
    کانت
  2. #2
    2010/06/25
    413
    7

    پاسخ : ساخت گیرنده ریموت کد لرن توسط PIC16F876 به زبان PICBASIC PRO

    نقل قول نوشته اصلی توسط eshgh_namordeh

    یعنی طول پالسهای یک 3 برابر صفر هست

    وقتی کلیدی را فشار میدهیم اول پالس با سطح یک به مدت 3 ms سپس پالسی به طول 31 برابر صفرها اما با سطح صفر میفرسته یعنی 31ms بعدش کدهای صفر و یک را ارسال میکنه پس اول PREMBLE بعد هم 24 کد .[/i][/left]
    آقا خیلی قشنگ توضیح دادید.حیفم اومد اینجوری تشکر نکنم. فقط یه سوال اون بالاگفتید طول پالس های یک 3 برابر صفر هست ولی تو تاپیک های avr تو اون نقشه ها اونجوریکه معلومه طول پالس های صفر 31 برابر طول پالس های یک هست یعنی اگر یه پالس 1 به مدت زمان 1 میلی ثانیه داشتیم باید بعدش یه پالس با سطح منطقی به مدت زمان 31 میلی ثانیه داشته باشیم.درسته؟؟ البته واسه premble ها. درسته؟؟

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  3. #3
    2008/01/23
    تهران
    435
    7

    پاسخ : ساخت گیرنده ریموت کد لرن توسط PIC16F876 به زبان PICBASIC PRO

    ممنون از لطفت

    پریم ایبل درسته اگر پالس یک مثلا 1 ms باشه اون 31ms میشه اما نه منفیه یعنی 31ms زمین داریم
    توی برنامه هم اگر دقت کنید اول تا وقتی 1 هست داخل حلقه میمونه بلافاصله که یک تموم شد مدت زمان صفر یعنی همین 31 ms را تست میکنه
    اگر با Pic و تایمر 1 و اسیلاتور 16 MHZ تست کنید دقیقا همین اعداد را به دست میارید .
    while rf=0 اینجا همون 31 ms را اندازه میگیره
    s2.byte1=tmr1h : s2.byte0=tmr1l
    if s2>6500 then goto badesh2
    wend
    badesh2:
    t1con=%00110000 ;payan

    s2.byte1=tmr1h : s2.byte0=tmr1l
    if s2>4500 then
    if s2<6500 then

    goto daryaft_kod
    endif
    همه دوست دارند به بهشت بروند اما جالب اینجاست کسی دوست ندارد بمیرد
    کانت
  4. #4
    2010/06/25
    413
    7

    پاسخ : ساخت گیرنده ریموت کد لرن توسط PIC16F876 به زبان PICBASIC PRO

    اقا من به یه مشکل دیگه خوردم. اول میگیم اگر دیتایی با سطح منطقی یک اومد تایمر روشن شه به صورت برنامه زیر


    if rf=1 then
    t1con=%00110000: tmr1h=0 :tmr1l=0 :t1con=%00110001 ;shoro
    while rf=1
    v2.byte1=tmr1h : v2.byte0=tmr1l
    if v2>1000 then goto badesh1
    wend

    چرا حالا میگیم اگر v2>1000 بره به برچسب بعدی؟؟ 1000 یعنی 2 میلی ثانیه.نباید بگیم اگر v2==500 شد یا v2>500 شد بره برچسب بعدی؟؟
    و یه سوال دیگه اینکه چرا وقتی میره برچسب بعدی یعنی برچست badesh2 باید مقدار s2 بین 4500 و 6500 باشه؟؟6500 یعنی 13 میلی ثانیه و 4500 یعنی 9 میلی ثانیه. چرا باید بین این 2 زمان باشه تا برای دریافت کد آماده بشه؟؟ مگه وقتی سطح منطقی صفر شد نباید زمانمون 31 میلی ثانیه باشه؟؟ ممنونم .

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  5. #5
    2008/01/23
    تهران
    435
    7

    پاسخ : ساخت گیرنده ریموت کد لرن توسط PIC16F876 به زبان PICBASIC PRO

    این زمان 1 ms و 31 ms فقط یک مثال بود که مفهمو بیان بشه زمان دقیقش را اندازه نگرفتم بدونم واقعا چند هست و کاری با زمان دقیقش هم نداریم
    چون عرض پالس را که اندازه بگیریم دقیقا همین اعداد به دست میاد ، و نیازی نیست شما وقتت را بزاری که این اعداد را از اول به دست بیاری
    اما جواب شما :
    وقتی ریموت نزدیک گیرنده هست عرض پالسها زیاده و وقتی که دور میشه عرض پالسها کم میشه برای همین مجبوریم یک بازه براش تعریف کنیم تا برد ریموت هم بیشتر بشه و خیلی مهمه
    گفتیم که

    PRIMBLE : اگر بین 4500 تا 6500 بود پس میفهمیم که کلید زده شده
    یکها : بین 300 تا 800
    صفرها : بین 50 تا 300

    همونطور که میبینی بازه کلی ما بین 50 تا 800 هست که من گفتم بیشتر از 1000 شد خارج بشه میتونستیم بگیم بیشتر از 800 مشکلی نداره

    گفتیم بین 4500 تا 6500 : بله میتونیم زمان واقعی اون را در نظر بگیریم و مشکلی هم نداره اما تا میکرو بخواد اندازه بگیره یک کمی زمان از دست میدیم ، ضمنا نویز ممکنه این وسط دخالت کنه ، و اینکه با اینکار ما یکمی زمان میخریم که میکرو آماده بشه کدهای اصلی را دریافت کنه ، هم اینکه مثلا فرض کنید 31 ms زمین داریم هیچ دلیلی نداره ما بگیم اگر دقیقا 31 ms شد وارد برنامه اصلی بشه میگیم اگر 20 تا شد یا 15 تا شد اینجوری کلی زمان خریدیم ضمن اینکه فاصله ریموت تا گیرنده اگر زیاد باشه این 31 ms واقعا کم میشه برای همین نرم افزاری هم برد ریموت را بیشتر کردیم هم اثر تویز را کم کردیم هم سرعت دریافت کد را بیشتر کردیم و ....

    همه دوست دارند به بهشت بروند اما جالب اینجاست کسی دوست ندارد بمیرد
    کانت
  6. #6
    2010/06/25
    413
    7

    پاسخ : ساخت گیرنده ریموت کد لرن توسط PIC16F876 به زبان PICBASIC PRO

    آقا دست گلت درد نکنه فکر کنم گرفتم. پس توی برنامه اول میایم میگیم اگر پایه rf یک شدش تایمر روشن بشه اگر زمان تایمر یک بیشتر از 2 میلی ثانیه شد میپره اول برنامه ولی اگر کمتر بود صدرصد بعدش صفر میشه پایه rf و دوباره تایمر صفر میشه و روشن میشه و میره مقدار زمان صفر بودن پایه rf اندازه میگیره که اگر بین 9 میلی ثانیه و 13 میلی ثانیه بود میره واسه گرفتن کد و اگر بین این مقدار نبود میپره اول برنامه.درسته؟؟ البته اینایی ک گفتم واس primble بود.
    میشه بقیشم یه خورده بیشتر توضیح بدید؟؟ زمان هر صفر و یک شدن در این ریموتا یعنی 100تا 800 تا طول میکشه؟؟ یعنی اگر 2 بار صفر
    پشت هم اومد چطور باید تشخیص دادش؟؟ اونجوری شاید بالای 1600 تا بره که

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  7. #7
    2008/01/23
    تهران
    435
    7

    پاسخ : ساخت گیرنده ریموت کد لرن توسط PIC16F876 به زبان PICBASIC PRO

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

    گفتیم که 1 یعنی پالس مثبت به مدت 3 ms و صفر پالس مثبت به مدت 1ms ، پس مثلا اگر دو تا صفر اومد یعنی یک پالس 1 ms میاد بعدش صفر میشه و بعدش دوباره یک پالس 1 ms میاد ، چون کلا تعریف پالس همینه مجموعه ایی از صفر و یکها میشه
    همیشه اول و آخر هر پالسی زمینه (صفر)

    وقتی که پریمابل را فهمید وارد زیر برنامه daryaft code میشه که اونجا فقط عرض پالسهای مثبت را اندازه میگیره چون همه صفر و یکها پالس مثبت با عرض 1و3 ms هستند . برای همین اول برنامه گفته :



    while j<code جای کد باید 24 بزارید من حواسم نبود تغییرش بدین ،


    if rf=1 then اگر پالس 1 آمد وارد میشه
    t1con=%00110000: tmr1h=0 :tmr1l=0 :t1con=%00110001
    while rf=1 عرض پالس 1 را اندازه میگیره
    s2.byte1=tmr1h : s2.byte0=tmr1l
    if s2>850 then goto main اگر بیشتر از 850 شد پس خطاست و خارج میشه
    wend
    :
    t1con=%00110000
    j=j+1
    s2.byte1=tmr1h : s2.byte0=tmr1l
    s[j]=s2
    tmr1h=0 :tmr1l=0 :t1con=%00110001
    endif
    wend
    همانطور که میبینید حلقه while تا 24 کد را دریافت میکنه سپس وارد if میشه تا عرض پالسهای یک را اندازه بگیره ، سپس مقدار به دست اومده را در آرایه s[j ذخیره میکنه
    پس به این ترتیب ما 24 کد را دریافت کردیم
    و هر جائی که عرض بیشتر از 850 شد یعنی خطا داریم از برنامه خارج میشه

    همه دوست دارند به بهشت بروند اما جالب اینجاست کسی دوست ندارد بمیرد
    کانت
  8. #8
    2010/06/25
    413
    7

    پاسخ : ساخت گیرنده ریموت کد لرن توسط PIC16F876 به زبان PICBASIC PRO

    آقا دمت گرم.گرفتم . فقط یه سوال. فرض کنید ما بعد از 6 پالس صفر primble شروع کردیم به دریافته کدها که اینجوری تا 31 پالس صفر ما 25 تا از پالسامون نیمیده. میخاستم بدونم واس دریافت کد قاطی نمیکنیم اینجوری؟ آخه 25 تا پالس 1 میلی ثانیه میاد که از نظر اشتباه من با اون 20 کد اشتباه گرفته میشه.منظورم اینه که زمانیکه ما میریم تو زیر برنامه دریافت کد هنوز 25 تا کد پریمبل داریم که نیمدن در این صورت اشتباه گرفته نمیشن با اون 20 تا کد ریموت؟؟ یه سوال دیگه اینکه s[j]=s2 یعنی چی؟؟ مرس

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  9. #9
    2008/01/23
    تهران
    435
    7

    پاسخ : ساخت گیرنده ریموت کد لرن توسط PIC16F876 به زبان PICBASIC PRO

    نه اشتباه نمیکنه چون پریم ابل ما صفر ولته ولی کدهای ما همه پالس مثبت هستند

    چون تایمر استفاده کردیم و 16 بیتی هست محتوای 8 بیت بالا و پائین تایمر یک را توی S2 ذخیره میکنیم

    s2.byte1=tmr1h :
    s2.byte0=tmr1l

    سپس تک تک کدها را توی آرایه ذخیره میکنیم J]S]
    همه دوست دارند به بهشت بروند اما جالب اینجاست کسی دوست ندارد بمیرد
    کانت
  10. #10
    2010/06/25
    413
    7

    پاسخ : ساخت گیرنده ریموت کد لرن توسط PIC16F876 به زبان PICBASIC PRO

    آقا من همش فهمیدم فقط یه جاش موندم. اول فکردم پایه دیتای گیرندر میدیم به وقفه پورت بی ولی الان میبینم باید بدیمش به تایمر1 میکرو. یعنی t1ck1 درسته؟؟ ولی تو تنظیمات تایمرتون که از تایمر داخلی استفاده کردید. میشه یه خورده در این موردش بیشتر توضیح بدید.مرسی

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

صفحه 1 از 7 1234567 آخرین
نمایش نتایج: از 1 به 10 از 70

موضوعات مشابه

  1. ساخت گیرنده ریموت 12 کاناله توی عکس
    توسط Questioner در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2014/10/03, 18:24
  2. کمک در ساخت گیرنده فرستنده ir برای ریموت کنترلها
    توسط eshgh_namordeh در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 1
    آخرين نوشته: 2013/09/16, 23:49
  3. پاسخ: 0
    آخرين نوشته: 2013/07/06, 00:54
  4. برنامه ریموت کنترل 8 کاناله توسط زبان اسمبلی
    توسط hamid_3469 در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2012/12/26, 12:16
  5. فرستنده و گیرنده جهت ساخت ریموت کنترل
    توسط zamani در انجمن مدارهاي مخابراتي
    پاسخ: 2
    آخرين نوشته: 2010/07/06, 00:10

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •