اطلاعیه

Collapse
No announcement yet.

کانتر افزایشی کاهشی (up-down counter)

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

    کانتر افزایشی کاهشی (up-down counter)

    سلام دوستان
    من قصد دارم از کانتر یک میکرو به عنوان یک کانتر افزایشی کاهشی استفاده کنم به این صورت که یه ورودی پالس ثابت داریم و یک بیت که نشان دهنده جهت شمارش هست(مثل شفت انکودر)، در صورتی که بیت مذکور یک باشه کانتر به صورت افزایشی شمارش کنه و اگه صفر باشه به صورت کاهشی، راهکاری برای این کار وجود داره؟ :-? :-??

    #2
    پاسخ : کانتر افزایشی کاهشی (up-down counter)

    می تونم بپرسم که چرا می خوایین این کار عجیب رو انجام بدین؟

    دیدگاه


      #3
      پاسخ : کانتر افزایشی کاهشی (up-down counter)

      کاری نداره تو برنامه از یک فلگ سراسری برای direction استفاده کن و توی روتین وقفه تایمر چک کن اگه مثلا فلگ=0 بود شمارنده بره به جلو وگرنه کم شه:


      bit direction=0;
      int count=0
      timer interrupt
      {
      if(direction==0)
      count++;
      else
      count--;
      }

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

      راستی اگه میخوای از خود تایمر سخت افزاری به عنوان یک شمارنده کاهنده استفاده کنی که کار معقولانه ای به نظر نمیاد و فقط تایمر میکرو تو مد phase correct می تونه به صورت کاهنده عمل کنه.
      راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
      کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
      نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
      http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
      انشالله به زودي تاپيک ها به روز رساني خواهد شد،

      دیدگاه


        #4
        پاسخ : پاسخ : کانتر افزایشی کاهشی (up-down counter)

        نوشته اصلی توسط RubeuS
        کاری نداره تو برنامه از یک فلگ سراسری برای direction استفاده کن و توی روتین وقفه تایمر چک کن اگه مثلا فلگ=0 بود شمارنده بره به جلو وگرنه کم شه:


        bit direction=0;
        int count=0
        timer interrupt
        {
        if(direction==0)
        count++;
        else
        count--;
        }

        چپ چین میشه قاطی پاتی میشه . ولی دستورا تابلو دیگه
        راستی اگه میخوای از خود تایمر سخت افزاری به عنوان یک شمارنده کاهنده استفاده کنی که کار معقولانه ای به نظر نمیاد و فقط تایمر میکرو تو مد phase correct می تونه به صورت کاهنده عمل کنه.
        داداشم، وقفه تایمر که موقع سرریز فعال میشه یعنی وقتی که تعداد پالس های ورودی به حد معینی رسید من میخام به ازای هرپالس یک واحد از رجیستر تایمر کم بشه یا بهش افزوده بشه! ضمنا نمیتونم به ازای هر پالس ورودی یه وقفه ایجاد کنم

        دیدگاه


          #5
          پاسخ : کانتر افزایشی کاهشی (up-down counter)

          نوشته اصلی توسط rozeh
          می تونم بپرسم که چرا می خوایین این کار عجیب رو انجام بدین؟
          این کار عجیب نیست! اساس شمارش تعداد پالس شفت انکودر هاست

          دیدگاه


            #6
            پاسخ : پاسخ : کانتر افزایشی کاهشی (up-down counter)

            نوشته اصلی توسط RubeuS

            راستی اگه میخوای از خود تایمر سخت افزاری به عنوان یک شمارنده کاهنده استفاده کنی که کار معقولانه ای به نظر نمیاد و فقط تایمر میکرو تو مد phase correct می تونه به صورت کاهنده عمل کنه.
            باید به ورودی دیرکشن رجیستر tcnt دسترسی داشته باشی . که سخت افزاریه و فکر نمیکنم با زبان ماشینشم بتونی دسترسی پیدا کنی. تنها راه: FPGA
            راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
            کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
            نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
            http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
            انشالله به زودي تاپيک ها به روز رساني خواهد شد،

            دیدگاه

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