اطلاعیه

Collapse
No announcement yet.

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

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

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

    کد:
    #define ROT1 PIND.1
    ///////////////////
    interrupt [2] void external_int0(void)
    {
     #asm("cli")
     if (ROT1==0)
     {
       Atemp=Atemp+1;
     }
     if (ROT1==1)
     {
       Atemp=Atemp-1;
     }
     
     #asm("sei")
    }
    آقا این یه کد برای مگا8 هست که یه روتاری رو با یه اینتراپت راه میندازه.البته با کد ویژن هست، اما فکر نکنم اون اندازه هم گنگ باشه.
    شما اون دوتا اینتراپت رو بیخیال شو، چون خودم هم تستش نکردم، با فرضیه و تئوری جلو رفتن جور در نمیاد.با یه اینتراپت کار کن فعلا، اون یکی اینتراپت هم آزاد باشه واسه کارهای دیگه ت یا واسه دومین روتاری.

    دیدگاه


      #17
      پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

      سلام
      دمتون گرم بابت زحمتا
      این کدی که با اینتراپت خارجی عمل میکنه چه مشکلی میتونه داشته باشه؟
      چون من با اینتراپت راه اندازی کردم ولی همش نگرانم تو عمل یه مشکلی پیش بیاره
      مثلا اگه با سرعت پیچونده بشه، یا اینکه بانس کلا گرفته میشه؟
      آخه تو تمام سایتای خارجی بهترین راه رو خوندن کد گری که تولید میشه معرفی کردن

      این شبیه سازی هم که شما انجام دادی حالت انکودر رو شبیه سازی نمیکنه
      من نمیدونم چطوری فایل اضافه کنم اینجا وگرنه لایبرری انکودر رو پیدا کردم
      اگه خواستید بم بگید بفرستم

      دیدگاه


        #18
        پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

        نوشته اصلی توسط ameen.kh
        سلام
        دمتون گرم بابت زحمتا
        این کدی که با اینتراپت خارجی عمل میکنه چه مشکلی میتونه داشته باشه؟
        چون من با اینتراپت راه اندازی کردم ولی همش نگرانم تو عمل یه مشکلی پیش بیاره
        مثلا اگه با سرعت پیچونده بشه، یا اینکه بانس کلا گرفته میشه؟
        آخه تو تمام سایتای خارجی بهترین راه رو خوندن کد گری که تولید میشه معرفی کردن

        این شبیه سازی هم که شما انجام دادی حالت انکودر رو شبیه سازی نمیکنه
        من نمیدونم چطوری فایل اضافه کنم اینجا وگرنه لایبرری انکودر رو پیدا کردم
        اگه خواستید بم بگید بفرستم
        سلام.خواهش میکنم.
        این کد که با اینتراپت خارجی نوشته شده؛ مگه مشکلی داره که فرمودین چه مشکلی میتونه داشته باشه؟
        بستگی داره با چه سرعتی پیچونده بشه.من که تو تست خودم خوب ازش جواب گرفتم.البته با دو مدل روتاری تست کردم.اونی که گرونتر بود جواب بهتری هم داشت و خیلی پریدن نداشت(هر استپ چرخش رو میکرو حساب میکرد) اگه کیفیت روتاری خوب نباشه، طبیعتا موقع چرخوندن هم کنتاکت های مکانیکی روتاری نمیتونن جواب مورد نظر رو به ما بدن.
        منظورتون از کد گری رو متوجه نشدم.
        این شبیه سازی که کشکه! :biggrin: فقط تقریبا اون حالت روتاری رو خواستم نشون بدم.
        قطعه ی روتاری برای پروتئوس رو آقای نوربخش گذاشته بودن تو انجمن.یه خرده بگردین میتونین پیداش بکنین.

        دیدگاه


          #19
          پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

          نوشته اصلی توسط شاهرخ مستقیمی
          سلام.خواهش میکنم.
          این کد که با اینتراپت خارجی نوشته شده؛ مگه مشکلی داره که فرمودین چه مشکلی میتونه داشته باشه؟
          بستگی داره با چه سرعتی پیچونده بشه.من که تو تست خودم خوب ازش جواب گرفتم.البته با دو مدل روتاری تست کردم.اونی که گرونتر بود جواب بهتری هم داشت و خیلی پریدن نداشت(هر استپ چرخش رو میکرو حساب میکرد) اگه کیفیت روتاری خوب نباشه، طبیعتا موقع چرخوندن هم کنتاکت های مکانیکی روتاری نمیتونن جواب مورد نظر رو به ما بدن.
          منظورتون از کد گری رو متوجه نشدم.
          این شبیه سازی که کشکه! :biggrin: فقط تقریبا اون حالت روتاری رو خواستم نشون بدم.
          قطعه ی روتاری برای پروتئوس رو آقای نوربخش گذاشته بودن تو انجمن.یه خرده بگردین میتونین پیداش بکنین.
          من نگفتم مشکلی داره ولی یه مشکلی باید داشته باشه :biggrin:
          هر تیک روتاری یه پالس تو هر کدوم از پایه ها ایجاد میکنه
          اگه حالت اولیه پایه ها صفر باشه ، وقتی پالسها ایجاد میشن چون 90 درجه اختلاف فاز دارن نسبت به هم همچین حالتی پیدا میکنن
          00 (هر دو صفرن) - 01 (اولی 1 شد) - 11 - 10 - 00
          این پنج مقداری که ساخته میشه رو بش میگن کد گری
          حالا بسته به اینکه از چه سمتی بچرخونی، اگه بعد از 00 ، 01 اومد ساعتگرده اگه 10 اومد پادساعتگرده و اگه همه پنج عدد به ترتیب خونده شد، یعنی یه تیک چرخیده شده.
          استفاده از این روش دیگه مدار بانس گیری هم نمیخواد

          دیدگاه


            #20
            پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

            نوشته اصلی توسط ameen.kh
            من نگفتم مشکلی داره ولی یه مشکلی باید داشته باشه :biggrin:
            هر تیک روتاری یه پالس تو هر کدوم از پایه ها ایجاد میکنه
            اگه حالت اولیه پایه ها صفر باشه ، وقتی پالسها ایجاد میشن چون 90 درجه اختلاف فاز دارن نسبت به هم همچین حالتی پیدا میکنن
            00 (هر دو صفرن) - 01 (اولی 1 شد) - 11 - 10 - 00
            این پنج مقداری که ساخته میشه رو بش میگن کد گری
            حالا بسته به اینکه از چه سمتی بچرخونی، اگه بعد از 00 ، 01 اومد ساعتگرده اگه 10 اومد پادساعتگرده و اگه همه پنج عدد به ترتیب خونده شد، یعنی یه تیک چرخیده شده.
            استفاده از این روش دیگه مدار بانس گیری هم نمیخواد
            فرمایش شما صحیح؛اما سوالی که برام پیش اومد؛پیاده کردن سخت افزاری این کد گری تو روتاری امکان پذیر هست؟ بعید میدونم.

            دیدگاه


              #21
              پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

              نوشته اصلی توسط شاهرخ مستقیمی
              فرمایش شما صحیح؛اما سوالی که برام پیش اومد؛پیاده کردن سخت افزاری این کد گری تو روتاری امکان پذیر هست؟ بعید میدونم.
              منظورتو متوجه نشدم!!
              کلا کار روتاری سوئیچ تولید کد گری هست!

              دیدگاه


                #22
                پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

                من منظور شما رو درست متوجه نشده بودم.حق با شماست؛ خوب میشد که توضیح بیشتری میفرمودین.
                تو روتاری یه پایه مشترک داریم که یا به Vcc وصل میکنیمش؛ یا GND. دو تا پایه ی دیگه هم از طریق مقاومت های Pull-up یا pull-down وضعیتشون مشخص میشه.که باید برعکس پایه مشترک وصل بشن.
                تو هر تیک روتاری؛دوتا پایه ی دیگه یا جفتشون وصل میشن به پایه ی مشترک؛ یا جفتشون میمونن رو هوا ( که از طریق مقاومت های Pull-up یا pull-down وضعیتشون مشخص میشه) حالا با توجه به اینکه روتاری تو کدوم جهت بچرخه؛ یکی از اون دوتا پایه زودتر به موقعیت جدید میرسه.این حالت ها رو اگه بچینیم کنار همدیگه مقادیر قرائت شده از دوتا پایه ی خروجی به این صورت میشه:

                0 0
                0 1
                1 1

                چرخوندن در حالت مخالف:

                0 0
                1 0
                1 1

                اگه چرخوندن تو همون جهت رو ادامه بدیم:(ادامه ی حالت بالا)

                1 1
                0 1
                0 0

                ولی بانس گیری به نظرم همچنان لازم هست.چون بالاخره با یه قطعه ی مکانیکی سروکار داریم.

                دیدگاه


                  #23
                  پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

                  آفرین دقیقا منظور منم همین بود :biggrin:
                  ولی اینطور که من شنیدم استفاده از همون خازن های 1 میکروفارادی علاوه بر Pull Up یا Pull Down بانس قطعه رو میگیره!

                  دیدگاه


                    #24
                    پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

                    نوشته اصلی توسط ameen.kh
                    آفرین دقیقا منظور منم همین بود :biggrin:
                    ولی اینطور که من شنیدم استفاده از همون خازن های 1 میکروفارادی علاوه بر Pull Up یا Pull Down بانس قطعه رو میگیره!
                    خدا خیرت بده! منم همین رو میگفتم دیگه! :rolleyes:

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

                    دیدگاه


                      #25
                      پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

                      آره دقیقا منم همینو از یه نفر با تجربه شنیدم اون تایید کرد ولی هنوز تو عمل امتحان نکردم :rolleyes:
                      اگه تو عمل به مشکلی برخوردم حتما میگم :biggrin:
                      حتی کدی که نوشتم هم تشخیص کد گری نبود .فقط با یه وقفه خارجی نوشتمش

                      دیدگاه


                        #26
                        پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

                        با سلام خدمت دوستان عزیز.
                        از لحاظ سیگنالی، ولوم روتاری مشابه انکودر روتاریه که دو سیگنال مربعی با اختلاف فاز 90 درجه برای تشخیص مقدار و جهت حرکت ارسال میکنه.
                        مثلا در حرکت ساعتگرد A از B جلوتره و بالعکس. در مورد خازنها جناب مستقیمی کاملا درست گفتن. البته مقدار خازنها به مقدار مقاومتهای PULL UP هم بستگی داره.
                        من با خازنهای 100 نانو راشون انداختم. برای خوندنشون از 16F84 استفاده کردم که حاصل رو پارالل ارسال میکرد.
                        برای خوندن فرکانسهای بالاتر، 30F4011آ‌ رو پیشنهاد میکنم که عمل شمارشو بطور سخت افزاری و دقیق انجام میده. من باهاش انکودر 2500 پالس رو تا 200 کیلو هرتز در مود X4 خوندم.
                        کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

                        دیدگاه


                          #27
                          پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

                          نوشته اصلی توسط ameen.kh
                          آره دقیقا منم همینو از یه نفر با تجربه شنیدم اون تایید کرد ولی هنوز تو عمل امتحان نکردم :rolleyes:
                          اگه تو عمل به مشکلی برخوردم حتما میگم :biggrin:
                          حتی کدی که نوشتم هم تشخیص کد گری نبود .فقط با یه وقفه خارجی نوشتمش
                          دوستان من تو عمل امتحان کردم ولی متاسفانه جواب نگرفتم
                          خروجی روتاری رو به اوسکوپ دادم ولی وقتی میچرخونم پالس نمیده!!!!! یه تیک که بخوره هر دو پایه 1 میشن و تیک بهدی هر دو رو صفر میکنه!!!

                          نوشته اصلی توسط نو رسیده
                          با سلام خدمت دوستان عزیز.
                          از لحاظ سیگنالی، ولوم روتاری مشابه انکودر روتاریه که دو سیگنال مربعی با اختلاف فاز 90 درجه برای تشخیص مقدار و جهت حرکت ارسال میکنه.
                          مثلا در حرکت ساعتگرد A از B جلوتره و بالعکس. در مورد خازنها جناب مستقیمی کاملا درست گفتن. البته مقدار خازنها به مقدار مقاومتهای PULL UP هم بستگی داره.
                          من با خازنهای 100 نانو راشون انداختم. برای خوندنشون از 16F84 استفاده کردم که حاصل رو پارالل ارسال میکرد.
                          برای خوندن فرکانسهای بالاتر، 30F4011آ‌ رو پیشنهاد میکنم که عمل شمارشو بطور سخت افزاری و دقیق انجام میده. من باهاش انکودر 2500 پالس رو تا 200 کیلو هرتز در مود X4 خوندم.
                          میشه از روش هایی که استفاده کردی یه شماتیکی چیزی بزاری و بیشتر توضیح بدی؟؟
                          مرسی

                          دیدگاه


                            #28
                            پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A


                            با سلام
                            در واقع این اختلاف فاز 90 درجه که میگیم فقط یه مفهومه و فقط وقتی واقعیت پیدا میکنه که یه انکودر رو با سرعت ثابت بچرخونیم. ولی تو این کلیدها فقط دوتا پالسن که با یه تاخیر نسبت به هم میان و میرن و OPEN میشن تا پله بعدی. برای همین من LED گذاشتم که ببینمشون. پیشنهاد میکنم شما هم ledآ‌ بذاری و ولوم رو روی تیک ها، خیلی آروم بچرخونی. پایه های 4 و 5 که یه کلید فشاریه و اون سه تا پایه هم که 1 مشترک و 2 و 3 هم خروجی هستن. من ایندوتا رو به یه 16F84آ‌دادم تا شمارش کنه.
                            با یه برنامه ساده برای با کلاک 4 مگ.
                            [code=qbasic]
                            ' Declarations section
                            dim
                            swout as bit
                            cont as byte
                            volb as sbit at porta.0
                            vola as sbit at porta.1
                            volsw as sbit at porta.2
                            f_a as bit
                            f_b as bit
                            f_sw as bit
                            rest as sbit at porta.3
                            sub procedure init
                            trisa = %11111111
                            trisb = %00000000
                            cont = 0
                            portb = 0
                            f_a = 0
                            f_b = 0
                            f_sw = 0
                            end sub
                            main:
                            ' Main program
                            init()
                            while true
                            if rest = 1 then cont = 0 end if
                            if vola = 0 then f_a = 0 end if
                            if volb = 0 then f_b = 0 end if
                            if rest = 0 then
                            if (volsw = 1) and (f_sw = 0) then
                            f_sw = 1
                            end if
                            if (volsw = 0) and (f_sw = 1) then
                            f_sw = 0
                            swout = not swout
                            ' if swout = 1 then cont = 0 end if
                            end if
                            if swout = 1 then
                            if (vola = 1) and (f_a = 0) then
                            f_a = 1
                            if (volb = 1) and (cont < 100) then cont = cont + 1 end if
                            end if
                            if (volb = 1) and (f_b = 0) then
                            f_b = 1
                            if (cont > 0) and (vola = 1)then cont = cont - 1 end if
                            end if
                            portb.0 = cont.0
                            portb.1 = cont.1
                            portb.2 = cont.2
                            portb.3 = cont.3
                            portb.4 = cont.4
                            portb.5 = cont.5
                            portb.6 = cont.6
                            end if
                            end if
                            portb.7 = swout
                            wend
                            end.
                            [/code]
                            کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

                            دیدگاه


                              #29
                              پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

                              نوشته اصلی توسط نو رسیده


                              با سلام
                              در واقع این اختلاف فاز 90 درجه که میگیم فقط یه مفهومه و فقط وقتی واقعیت پیدا میکنه که یه انکودر رو با سرعت ثابت بچرخونیم. ولی تو این کلیدها فقط دوتا پالسن که با یه تاخیر نسبت به هم میان و میرن و OPEN میشن تا پله بعدی. برای همین من LED گذاشتم که ببینمشون. پیشنهاد میکنم شما هم ledآ‌ بذاری و ولوم رو روی تیک ها، خیلی آروم بچرخونی. پایه های 4 و 5 که یه کلید فشاریه و اون سه تا پایه هم که 1 مشترک و 2 و 3 هم خروجی هستن. من ایندوتا رو به یه 16F84آ‌دادم تا شمارش کنه.
                              با یه برنامه ساده برای با کلاک 4 مگ.
                              کد:
                              [left]
                              ' Declarations section 
                              dim
                                swout as bit
                                cont as byte
                                volb as sbit at porta.0
                                vola as sbit at porta.1
                                volsw as sbit at porta.2
                                f_a  as bit
                                f_b  as bit
                                f_sw as bit
                                rest as sbit at porta.3
                              sub procedure init
                                trisa = %11111111
                                trisb = %00000000
                                cont = 0
                                portb = 0
                                f_a  = 0
                                f_b  = 0
                                f_sw = 0
                              end sub
                              main:
                              '  Main program 
                                init()
                                while true
                                   if rest = 1 then cont = 0 end if
                                   if vola = 0 then f_a = 0 end if
                                   if volb = 0 then f_b = 0 end if
                                   if rest = 0 then
                                     if (volsw = 1) and (f_sw = 0) then
                                       f_sw = 1
                                     end if
                                     if (volsw = 0) and (f_sw = 1) then
                                       f_sw = 0
                                       swout = not swout
                                     '  if swout = 1 then cont = 0 end if
                                     end if
                                     if swout = 1 then
                                      if (vola = 1) and (f_a = 0) then
                                        f_a = 1
                                        if (volb = 1) and (cont < 100) then cont = cont + 1 end if
                                      end if
                                      if (volb = 1) and (f_b = 0) then
                                        f_b = 1
                                        if (cont > 0) and (vola = 1)then cont = cont - 1 end if
                                      end if
                                      portb.0  = cont.0
                                      portb.1  = cont.1
                                      portb.2  = cont.2
                                      portb.3  = cont.3
                                      portb.4  = cont.4
                                      portb.5  = cont.5
                                      portb.6  = cont.6
                                     end if
                                   end if
                                   portb.7 = swout
                                wend
                              end.
                              [/left]
                              مرسی بابت توضیح :biggrin:
                              همین الان درستش کردم :mrgreen:
                              من قبلا وقفه رو روی لبه بالا رونده تنظیم کرده بودم
                              ولی الان چون پالس نمیفرسته و فقط تغییر لول انجام میشه، وقفه رو روی هر دو لبه فعال کردم و تو زیر برنامه تعداد حالتهایی که میتونه رخ بده رو چک کردم و متغیرم رو کم و زیاد کردم
                              نیازی به استفاده از قطعه دیگه نیست به شما هم پیشنهاد میکنم همین روش رو استفاده کنی :agree:

                              دیدگاه


                                #30
                                پاسخ : راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A

                                این نقشه و برنامه مال چند سال پیشه. گشتم تا پیداش کردم. تو اون کار 16f84 فقط برای ولوم بود و نیازی به استفاده از وقفه نبود.
                                کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

                                دیدگاه

                                لطفا صبر کنید...
                                X