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





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









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









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





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

صفحه 1 از 4 1234 آخرین
نمایش نتایج: از 1 به 10 از 35
  1. #1
    2007/11/22
    تبریز
    2,483
    492

    راه اندازي روتاري سوئيچ(ولوم هرزگرد) با PIC16F628A

    سلام دوستان و اساتيد بزرگوار.
    خواستم در راه خدا راه اندازي روتاري سوئيچ با کد و سخت افزار و فوت کوزه گري مربوطه! در اختيارتون قرار بدم.خودم تازه انجامش دادم.
    تشکر هم يادتون نره! :rolleyes:

    خب....و اما....
    توضيح روتاري سوئيچ يا ولوم هرزگرد تو اين تاپيک هست و استاد گرامي جناب آقاي نوربخش توضيح کامل و جامع براش دادن:

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

    عضویت



    همونطور که جناب نوربخش توضيح فرمودن، بهتره يکي از پايه ها اينتراپتي باشه، و اون يکي پايه ورودي معمولي هم باشه ميشه، که اگه اينتراپتي باشه بهتره.
    ميکرويي که من دم دست داشتم واسه تست، PIC16F628A بود. کريستال داخلي 4MHz رو استفاده کردم.ريست هم داخلي يا خارجي دلخواه خودتون هست.
    کل کد برنامه رو ميذارم واستون(با کامپايلر ميکروسي) و بعد توضيح بخشهاي مهم برنامه و آخر سر هم نکته ي بسيار مهم و فوت کوزه گري سخت افزاري که در صورت عدم استفاده، روتاري خيلي بد جواب ميده يا اصلا جواي نميده.طوري که خودم داشتم از خيرش ميگذشتم!



    کد:
    char i;
    void Interrupt()
    {
     INTCON.GIE=0;
     if (PORTB.b1==1) i=i+10;
     if (PORTB.b1==0) i=i-10;
     INTCON.INTF=0;
     INTCON.GIE=1;
    }
    
    void main() {
    OPTION_REG=0;      // EX-INT=Falling edge
    INTCON=0b10010000;   //EX-INT=ON-other Interrupt=OFF
    PIE1=0;
    PIR1=0;
     TRISB=0;
     PORTB=0;
    TRISB=7;
    
    PWM1_Init(5000);
    PWM1_Start();
    
    i=EEPROM_read(0);
    
    while(1)
     {
     delay_ms(10);
     PWM1_Set_Duty(i);
     if (PORTB.B2==0) EEPROM_write(0,i);
    
     }
    }
    برنامه اين کار رو ميکنه که اگه روتاري رو به سمت چپ يا راست بچرخونين، مقدار PWM توليدي رو 10 تا 10 تا زياد يا کم ميکنه و هر وقت هم که کليد وسط روتاري رو فشار بدين،PWM توليدي رو تو خونه ي صفر از EEPROM ميکرو ذخيره ميکنه و موقع روشن شدن هم اول ميره EEPROM رو ميخونه.

    زيربرنامه ي اينتراپت:

    کد:
    void Interrupt()
    {
     INTCON.GIE=0;
     if (PORTB.b1==1) i=i+10;
     if (PORTB.b1==0) i=i-10;
     INTCON.INTF=0;
     INTCON.GIE=1;
    }
    تو عکسي که گذاشتم به جاي روتاري از دوتا کليد معمولي استفاده کردم. کار اصلي رو ورودي اينتراپت انجام ميده. اينتراپت با لبه ي پايين رونده تحريک ميشه.لذا ورودي مشترک روتاري رو به زمين وصل کردم.روتاري وقتي مثلا چپ گرد هست، اول پايه اينتراپت صفر ميشه(وقوع وقفه) بعد پايه ديگه ش صفر ميشه.تو زيربرنامه ي وقفه اول بيت وقفه ي عمومي رو غيرفعال ميکنيم(INTCON.GIE=0 تا احيانا وسط انجام دستورات مربوطه، وقفه ي ديگه اي کار رو خراب نکنه!
    بعد پايه ي ديگه ي روتاري رو چک ميکنيم.اگه يک بود، يعني چپ گرد هست(فرض کرديم) که حدود دهم يا صدم ثانيه بعد چک کردن اينتراپت ، اون يکي پايه هم صفر ميشه و اين وسط ما فهميديم که روتاري داره کدوم طرف ميچرخه و برعکسش هم صادق هست.وقتي اينتراپت رخ ميده و ورودي بعدي رو چک ميکنيم و ميبينيم که صفر هست، معلوم ميشه که اول اون پايه صفر شده و بعد پايه ي اينتراپت صفر شده که باعث وقوع وقفه شده....اميدوارم توضيحاتم پيچيده نشده باشه! :redface:
    اين ميشه همين دوخط:
    کد:
    if (PORTB.b1==1) i=i+10;
     if (PORTB.b1==0) i=i-10;
    اون اضافه کردن و کم کردن متغير هم براي تغيير PWM هست که نهايتا متغير i رو به PWM توليدي اختصاص ميديم.
    بعدش ميايم و پرچم وقوع وقفه رو پاک ميکنيم(هميشه اينکار رو بايد انجام بديم-تو همه ي وقفه ها )
    INTCON.INTF=0;
    و نهايتا وقفه رو فعال ميکنيم:
    INTCON.GIE=1;

    بعد تنظيمات رجيسترهاي مربوط به وقفه هست که تو main برنامه مياد:

    کد:
    OPTION_REG=0;      // EX-INT=Falling edge
    INTCON=0b10010000;   //EX-INT=ON-other Interrupt=OFF
    PIE1=0;
    PIR1=0;
     TRISB=0;
     PORTB=0;
    TRISB=7;
    دستور TRISB=7 باعث ميشه که پايه هاي B0-B1-B2 ورودي بشن.
    درنتيجه سه تا ورودي داريم.اينتراپت خارجي(B0)-پايه دوم روتاري که باهاش جهت چرخش رو تشخيص ميديم(B1).پايه سوم هم که همون کليد وسط روتاري هست (B2) که با عمودي فشار دادن روتاري ، دوتا کنتاکت رو به هم وصل ميکنه و تو اينجا از اين کليد براي ذخيره ي PWM توليدي استفاده کرديم.
    (اصطلاحا بهش ميگن جينگول بازي!! :mrgreen: )
    ----------------------------------
    کد:
    PWM1_Init(5000);
    PWM1_Start();
    راه اندازي PWM
    ---------------------------------
    کد:
    i=EEPROM_read(0);
    فکر نکنم توضيحي بخواد!
    --------------------------------
    کد:
    while(1)
     {
     delay_ms(10);
     PWM1_Set_Duty(i);
     if (PORTB.B2==0) EEPROM_write(0,i);
     }
    تاخير براي گرفتن لرزشهاي احتمالي که فکر کنم نباشه هم کار بکنه! بسوزه پدر سخت افزار!
    خط آخر و اون خطي که گفتم توضيح نميخواد هم براي همون جينگول بازي هست! :mrgreen:
    -------------------------

    و اما فوت کوزه گري : هردوتا پايه ي روتاري که براي تشخيص جهت چرخش هست و يکي به پايه وقفه ميکرو وصله و ديگري به پايه اي دلخواه، علاوه بر پول پ بودن، بايد با خازن حدود1 ميکرو به زمين وصل بشن تا کار ديبانس گيري اصلي توسط اون خازن انجام بشه.بدون اون خازن هرقدر هم تأخير بذارين و با نرم افزار الکي سر و کله بزنين، همش آب در هاون کوفتن است و بس! که من بسي کوبيدم و مفت بهتون گفتم تا شماها نکوبين! :nerd:
    سوالي بود در خدمت هستم....
    موفق باشين.

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

    عضویت



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

    عضویت

  2. #2
    2007/11/22
    تبریز
    2,483
    492

    پاسخ : راه اندازي روتاري سوئيچ(ولوم هرزگرد) با PIC

    چه استقبالي شد از اين پروژه!!
    اين هم کل فايل ها(سورس+شبيه سازي)

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

    عضویت

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

    عضویت



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

    عضویت

  3. #3
    2013/02/26
    233
    5

    پاسخ : راه اندازي روتاري سوئيچ(ولوم هرزگرد) با PIC

    سلام من اينکارو با زبون بيسيک براي avr انجام دادم ولي هر طرفي که ميچرخونم فقط کم ميکنه و تغير هم توش ميدم فقط زياد ميکنه
    ديگه گيج شدم
    دعا پشتِ دعا براي آمدنت
    گناه پشــــــتِ گناه براي نيامــدنت
    دل درگــير ، مــيان اين دو انتخــــــــــــــــــــا ب
    کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــ ــــت
  4. #4
    2007/11/22
    تبریز
    2,483
    492

    پاسخ : راه اندازي روتاري سوئيچ(ولوم هرزگرد) با PIC

    اگه کد اشکالي نداشته باشه، به خاطر نذاشتن خازن هست.مشابه همين مسئله رو منم داشتم.
    پست اول رو با دقت بخونين.

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

    عضویت



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

    عضویت

  5. #5
    2013/02/26
    233
    5

    پاسخ : راه اندازي روتاري سوئيچ(ولوم هرزگرد) با PIC

    نقل قول نوشته اصلی توسط شاهرخ
    اگه کد اشکالي نداشته باشه، به خاطر نذاشتن خازن هست.مشابه همين مسئله رو منم داشتم.
    پست اول رو با دقت بخونين.
    ممنون از پاسختون
    نه فکر نکنم چون خازن يک ميکرو نداشتم از 104 و 10 ميکرو استفاده کردم هر دوتاش جواب داد و لي مشکل اينجاس که من زماني که شرط ميزارم فقط زياد ميشه يا برعکس فقط کم ميشه، اونم بادقت خوب و اصلا پرش اضافه ندارم .
    مشکلم دقتش نيست چون فوت کوزه گري شما جواب داد.مشکلم کمو زياد کردنه که يا فقط کم ميکنه يا زياد. اينم برناممه.
    کد:
    $regfile = "m128def.dat"
    $crystal = 11059200
    $lib "glcdks108.lbx"
    $include "FONT8X8.FONT"
    Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 4 , _
     Ce2 = 3 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 2
    Setfont Font8x8
    Cls
    '----------------------------------------------------------------------------------------- ok
    Dim A As Byte
    '-----------------------------------------------------------------------------------------
    Config Pind.0 = Input
    Config Pind.1 = Input
    '----------------------------------------------------------------------------------------
    Enable Interrupts
    Config Int0 = Falling
    Enable Int0
    On Int0 Rot
    '---------------------------------------------------------------------------------------
    Lcdat 1 , 1 , "mory"
    Waitms 500
    Main:
    Do
    Lcdat 1 , 1 , A ; "  "
    Loop
    End                             'end program
    '---------------------------------------------------------------------------
    Rot:
    If Pind.1 = 0 Then A = A + 1
    If Pind.1 = 1 Then A = A -1
    Return

    اضافه شده در تاریخ :
    انگار که اصلا وقتي مياد توي وقفه شرط هارو چک نميکنه oo: ميخام بدونم که واقعا زماني که وقفه رخ داد چه زمان بعدش پاييه بعدي صفر ميشه , اين برنامه رو با 2 تا وقفه هم نوشتم ولي بازم کار نکرد :cry:
    تروخدا اگه کسي با بيسيک AVR بلده کمک کنه.
    دعا پشتِ دعا براي آمدنت
    گناه پشــــــتِ گناه براي نيامــدنت
    دل درگــير ، مــيان اين دو انتخــــــــــــــــــــا ب
    کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــ ــــت
  6. #6
    2007/11/22
    تبریز
    2,483
    492

    پاسخ : راه اندازي روتاري سوئيچ(ولوم هرزگرد) با PIC

    فکر کنم براي بررسي شرط دوتا مساوي بايد بذارين.(البته من با بسکام خيلي کار نکردم،اما فکر نکنم اصول برنامه نويسي فرقي داشته باشه)
    ضمنا اون تأخير هم خيلي زياده.10ميلي ثانيه بذاري کافيه،فوووقش50 ميلي ثانيه!

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

    عضویت



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

    عضویت

  7. #7
    2013/02/26
    233
    5

    پاسخ : راه اندازي روتاري سوئيچ(ولوم هرزگرد) با PIC

    تاخير براي خوندن عدد نبوده.براي چيز ديگه ايه . (== )هم تو بسکام نداريم.
    البته با تاخير هاي متفاوت هم تست کردم ولي نشد که نشد .
    الان روتري رو بازش کردم خيلي جالب بود
    توش چند تا اهرم مکانيکي بود بدون هيچ قطعه الکترونيکي!!! oo:
    جالب بود ولي خوب چيزي که فکر ميکردم نبود.
    دوست من ميتوني دقيقا يکبار بگي که بعد از اينکه يه پايه اينتراپتو تشخيص داد چه اتفاقي مي افته. چون من بعدش ميام پايه ديگر رو وضعيتشو ميخونم ولي هميشه بعد اينتراپت وضعيتش صفره ؟؟؟؟!!!
    دعا پشتِ دعا براي آمدنت
    گناه پشــــــتِ گناه براي نيامــدنت
    دل درگــير ، مــيان اين دو انتخــــــــــــــــــــا ب
    کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــ ــــت
  8. #8
    2007/12/23
    زمین
    247
    88

    پاسخ : راه اندازي روتاري سوئيچ(ولوم هرزگرد) با PIC

    با سلام خدمت دوستان
    توی بیسکام میتونی از دستور encoder برا راه اندازی روتاری انکودر استفاده کنی
    قبلا کار کردم جواب میده
    مثالش توی هلپ هست
    محک
  9. #9
    2013/02/26
    233
    5

    پاسخ : راه اندازي روتاري سوئيچ(ولوم هرزگرد) با PIC

    نقل قول نوشته اصلی توسط mahank
    با سلام خدمت دوستان
    توي بيسکام ميتوني از دستور encoder برا راه اندازي روتاري انکودر استفاده کني
    قبلا کار کردم جواب ميده
    مثالش توي هلپ هست
    اره ولي وقتي از اين دستور استفاده ميکني ديگه تو بدنه اصلي برنامه (يني همونجايي که اين دستورو نوشتي ) نميتوني کليد بزاري و يا if بزاري ويا ... خيلي مشکل ايجاد ميکنه اون دستور.
    دعا پشتِ دعا براي آمدنت
    گناه پشــــــتِ گناه براي نيامــدنت
    دل درگــير ، مــيان اين دو انتخــــــــــــــــــــا ب
    کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــ ــــت
  10. #10
    2007/11/22
    تبریز
    2,483
    492

    پاسخ : راه اندازي روتاري سوئيچ(ولوم هرزگرد) با PIC

    نقل قول نوشته اصلی توسط مرتضي ب
    تاخير براي خوندن عدد نبوده.براي چيز ديگه ايه . (== )هم تو بسکام نداريم.
    البته با تاخير هاي متفاوت هم تست کردم ولي نشد که نشد .
    الان روتري رو بازش کردم خيلي جالب بود
    توش چند تا اهرم مکانيکي بود بدون هيچ قطعه الکترونيکي!!! oo:
    جالب بود ولي خوب چيزي که فکر ميکردم نبود.
    دوست من ميتوني دقيقا يکبار بگي که بعد از اينکه يه پايه اينتراپتو تشخيص داد چه اتفاقي مي افته. چون من بعدش ميام پايه ديگر رو وضعيتشو ميخونم ولي هميشه بعد اينتراپت وضعيتش صفره ؟؟؟؟!!!
    تو روتاري يه پايه اينتراپتي ميشه، اون يکي پايه هم معمولي(فعلا اينجوري فرض ميکنيم،چون من اينجوري جواب گرفتم و ميکروي مورد استفاده ي من دوتا اينتراپت خارجي نداشت) خب حالا با چرخوندن روتاري چه اتفاقي ميفته؟ پايه ي اينتراپت تا زماني که ولوم رو ميچرخوني، دائما پالس هاي 0 و 5 ولت رو دريافت ميکنه و به عبارتي اينتراپت رخ ميده.خب وضع اون يکي پايه چه جورياست؟! اون يکي پايه با يه تاخير جزئي که به حالت مکانيکي تو ساختار روتاري ايجاد شده؛ مثل اون پايه ي قبلي پالس هاي 0 و 5 ولت ميده.وقتي اينتراپت مياد،(فرض اول) ولوم به چپ ميچرخيده، که در اين صورت اون يکي پايه صفر بوده و با يه تاخير جزئي1ميشه.پس قبل 1 شدن ميکرو تشخيص ميده که صفر هست،پس چپ گرد.(فرض دوم) ولوم به راست ميچرخيده، که در اين صورت اون يکي پايه يک بوده و با يه تاخير جزئي0ميشه،پس قبل0شدن ميکرو تشخيص ميده که يک هست،پس راست گرد.

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

    عضویت



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

    عضویت

صفحه 1 از 4 1234 آخرین
نمایش نتایج: از 1 به 10 از 35

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

  1. ولوم های هرزگرد
    توسط m.plusboy در انجمن Proteus
    پاسخ: 2
    آخرين نوشته: 2015/06/30, 00:38
  2. ساخت اسکرول موس یا ولوم هرزگرد
    توسط ramin20007 در انجمن میکروکنترلرهای AVR
    پاسخ: 13
    آخرين نوشته: 2015/05/11, 11:50
  3. کمک درباره ولوم هرزگرد یا همون انکودر
    توسط mryamk63 در انجمن میکروکنترلرهای AVR
    پاسخ: 11
    آخرين نوشته: 2014/08/06, 20:18
  4. پاسخ: 1
    آخرين نوشته: 2014/02/10, 16:35
  5. اتصال ولوم هرزگرد بهAVR
    توسط Alireza_2020 در انجمن میکروکنترلرهای AVR
    پاسخ: 29
    آخرين نوشته: 2011/08/27, 14:23

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

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

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

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

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