اطلاعیه

Collapse
No announcement yet.

خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

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

    خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

    با سلام

    اقا من به شدت نیاز به یک خواننده ی پالس با AVR دارم که بتونم چند پالس PWM اندازه گیری کنم بنظرتون چگونه امکان پذیر هست .

    من خودم تونستم یکدونه پالس را بخونم ولی برای چنتا نتونستم من از اینتراپ استفاده کرده بودم .ولی در کل نیاز به چند خواننده ی پالس دارم .

    انکدر 8 تایی باشه مثلا مثل موچ PWm خودمون عدد بهمون بده .

    ممنون :job:

    اضافه شده در تاریخ :
    دوستان کار بلد عزیز کمک نمیکنید ! oo:

    من گریه میکنما :cry:

    :job:

    اگر پرواز را باور کنی پرو بال خواهی گرفت .

    #2
    پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

    سلام
    بنظرت میشه با مالتی پلکسر به InputCapture بدی؟
    یا از یک فیلتر LowPass ردش کنی ولتاژش رو بخونی. میشه میانگینه ولتاژ PWM که هست DVd که D دیوتی سایکله Vd هم ولتاژ ماکسش

    head<=
    ...تشکر خدا...
    [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

    دیدگاه


      #3
      پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

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

      دیدگاه


        #4
        پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

        شما باید یک گیت درست کنی

        دیدگاه


          #5
          پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

          یکم تحقیق کردم دیدم میشه با 0 یا 1 شدن پین میکرو در if و for که if نشان دهنده ی صفر و یک هست و for شمارنده 0 تا 255 هست انجام میگیرد .

          من هم از این روش استفاده کردم ولی جواب گرفتم یعنی با ایجاد هر لبه به یک متغییر اضافه کردم و لبه ی مورد نظرم خوانده شد .

          فقط یکم مشکل دارد یعنی تاخییر در خواندن که فکر کنم حدوداً 100 میلی ثانیه ای هست .

          خروجی هم به صورت عدد 0 - 255 بدست امد و برای تسط این عدد ان را در OCR1A قرار دادم و با مقدار عددی که پین یهم میداد توانستم PWM را ایجاد کنم .که پین هم همون حالت انکودر برام ایجاد کرد.

          و من تا دوتا از پین ها را تست کردم بدون تداخل درست کار کرد .

          ------------------------------------------------------------------------------------------------
          ولی به نظرم اگر از کانتر های تایمر با اینتراپت ها استفاده کنم روی برنامه های دیگر میکرو تاثییر دارد چون همزمان 8 عدد پالس را بخواد بخونه باید خطا ی زیادی داشته باشد و همچنین تاخییر زیاد .

          به هر حال من بازم تست میکنم تا بتونم بهترین حالت را داشته باشم .
          ------------------------------------------------------------------------------------------------
          در مورد مالتی پلکسر که دوستمون هم گفتن من استفاده کردم ازشون ولی در یک کار دیگری اونم به این صورت یود که یک مالتی پلکسر 16 تایی که چهار تا ادرس و یک خروجی داشت که به خواندن خروجی و ادرس می اومد حالت را در یک متغییر 1 تا 16 ذخیره میکرد . یکم هم سرعتش پایین بود .ولی من یک میکرو را اختصاص اون کار قرار دادم .
          -------------------------------------------------------------------------------------------------
          اقایان بنظرتون اگر بخوام یک پالس را بخوانم 1000ms لازم است ولی اگر 8 تا پالس باشد میشود ..... ms
          خوب سرعت میکرو گرفته میشه مالتی پلکسر و ایسی های سویچینگ که ادرس میگریندد فراید را کند تر میکنن .


          اگر پرواز را باور کنی پرو بال خواهی گرفت .

          دیدگاه


            #6
            پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

            درود

            سیگنالها سنکرون هستند؟

            همه هشت سیگنال رو با هم and کن و بده به اینتراپت.
            در زمان اینتراپت خوردن پایه ها رو چک کن ببین کدوم تغییر کرده و ...

            راه دیگه مثل اونی که دوستان گفتند اگه فرکانس ثابته و سیگنال ها در زمان حیلی تغییر نمبکنن، سیگنالها رو با فیلتر پایین گدر فیلتر کن و بده به پایه های ADC . مقدار dc با duty cycle رابطه مستقیم داره.

            با مالتی پلکسر دیجیتال هر کدوم از ورودی ها رو انتخاب کن و با تایمر و اینتراپت مقدار duty cycle رو حساب کن.
            مـن هیچ ندانم که مرا آن که سرشت
            از اهل بهشت کرد یا دوزخ زشت
            جامی و بتی و بربطی بر لب کشت
            این هر سه مرا نقد و تو را نسیه بهشت

            دیدگاه


              #7
              پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

              :smile: مرسی از همگی
              ---------------------------------
              - از & شدن و فرستادن به اینتراپت را یکم بیشتر توضیح بدهید .
              - فرکانس ورودی من PWM متغییر است .

              ایا منظور شما ارسال به یک اینتراپ هست چون شما گفتید همه را & کنم بفرستم به وقفه !

              ----------------------------------------------------
              در موضوع دیگر باید بگم که مالتی پلکسی و فیلتر و ایسی چانبی فکر نکنم بخواد بهنظرم میشه با یک میکرو خالی انکدر ساخت اونم به سادگی ...
              ولی یکم تجربه میخواد که دارم با دوستان با تجربه بحث میکنم . اون حالت & را خوب توضیح دهید .

              اگر پرواز را باور کنی پرو بال خواهی گرفت .

              دیدگاه


                #8
                پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

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

                دیدگاه


                  #9
                  پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

                  دوست عزیزم از شما ممنونم .بله همین طور شد که شما فرمودید.و صحت حرف شما به درستی صورت گرفت . @};-
                  ولی یکم خطا حاصل میشود حدودا 3+- عدد لبه در شمارش پالس . و من چشم پوشی میکنم ازش .نتیجیاً بنظر خوب هست . بدون delay پالس را خواندم و بهره اش را انشا الله ببرم .

                  ممنون . :job:


                  اگر پرواز را باور کنی پرو بال خواهی گرفت .

                  دیدگاه


                    #10
                    پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

                    همه ورودی ها and میشه و داده میشه به یک ورودی اینتتراپت.
                    این سیگنالها به هشت ورودی میکرو هم باید مستقیما وصل بشن.
                    وقتی اینتراپت میاد یعنی یکی از وزودی ها تغییر کرده. توی روتین اینتراپت پایه های ورودی رو چک میکنی ببینی کدوم بوده که تغییر کرده. و تایمر رو نگاه می کنی و با مقدار اولیه ورودی مربوطه مقابسه میکنی و duty cycle و بدست میازی.
                    مـن هیچ ندانم که مرا آن که سرشت
                    از اهل بهشت کرد یا دوزخ زشت
                    جامی و بتی و بربطی بر لب کشت
                    این هر سه مرا نقد و تو را نسیه بهشت

                    دیدگاه


                      #11
                      پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

                      بله به مشکل خوردم .
                      (من از & شدن چیزی نقهمیدم (گار کردن با اینتراپ را بلدم))
                      خوب در خواندن PWM مشکل نیست. ولی در اجرا کردن دستور به مشکل میخورم مثلا به صورت زیر
                      کد:
                       if (P1) {a=p1 ; b=p1;}
                       if (p2) {a=p2 ; b=p1;}

                      واضح هست که همچنان پالس یکم (P1) فعال هست و هیچ وقت غییر فعال نمیشود و دستور دوم هم که مخلوطی از دستور اول درش قرار دارد اجرا نمیشود .

                      یه جورایی باید اینتراپ دخالت داشته باشد که بیخیال حالت if قبلی بشه بره سر if یا مقدار متغییر جدید .

                      :job: کمک کنید لطفاً میخوام دستور بنویسم تداخل میشه... :redface:

                      اگر پرواز را باور کنی پرو بال خواهی گرفت .

                      دیدگاه


                        #12
                        پاسخ : خواندن همزمان هشت پالس یا داشتن چند Encoder توسط AVR

                        من گفتم تغییرات رو ببین.
                        باید حالت قبل همه سیگنال ها رو داشته باشی.
                        وقتی لبه ای تو اینتراپت سنس میشه مقدار خالت فعلی سیگنال ها رو با قبلی مقایسه کن.
                        مـن هیچ ندانم که مرا آن که سرشت
                        از اهل بهشت کرد یا دوزخ زشت
                        جامی و بتی و بربطی بر لب کشت
                        این هر سه مرا نقد و تو را نسیه بهشت

                        دیدگاه

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