আরডুইনো: মাইক্রোসের চেয়ে ভাল মাইক্রোসেকেন্ড রেজোলিউশন ()?


11

মাইক্রো () ডকুমেন্টেশন নোট করে যে রিটার্নের মানটি সর্বদা 4 এর একাধিক হবে।

উচ্চতর রেজোলিউশন মাইক্রোসেকেন্ড ক্লিক পাওয়ার কী কোনও উপায় আছে, সম্ভবত 1 মাইক্রোসেকেন্ডের স্তরে?

এভিআর স্তরে নেমে যাওয়া গ্রহণযোগ্য।


1
যখন আমি একে একে পুরোপুরি ইংরেজি প্রশ্ন করেছিলাম তখন আপনি কেন আপনার শিরোনামটি ট্যাগ দিয়ে শুরু করার জন্য জোর দিচ্ছেন?
স্টিভেনভে

4
ক্ষমা চাওয়া স্টিভেন, আমি আন্তরিকভাবে চিন্তা করেছিলাম (এবং মনে করি) প্রশ্নটি সংক্ষেপে এবং স্পষ্টভাবে প্রকাশ করার জন্য এটি একটি ভাল উপায়। এটি নিয়ে অনেক আলোচনা হয়েছিল, এবং জেফ কিছু ক্ষেত্রে সম্মত হয়েছিল যে এটি জিজ্ঞাসা করার একটি ভাল উপায়। আলোচনা এখানে; হিটম্যাপগুলি আমাকে এই বিষয়টি নিশ্চিত করে যে এই স্টাইলের প্রশ্নের জন্য এটি অপারেটিং পরিবেশের উপর জোর দেওয়ার জন্য অর্থ প্রদান করে। meta.stackexchange.com/questions/10647/writing-good-titles/… তবে, আপনার দুর্দান্ত উত্তরের জন্য শ্রদ্ধার বাইরে, আপনি যদি এটি সেরা মনে করেন তবে আমি এটিকে ফিরিয়ে দিতে পেরে খুশি হব।
মার্ক হ্যারিসন

এটি কি পালসিন () ফাংশনের জন্য ব্যবহার করা সম্ভব? আমি 1 ব্যবহারের চেয়ে কম রেজোলিউশনে ডালের দৈর্ঘ্য পরিমাপ করতে চাই।

এই স্থানটি শীর্ষে প্রশ্নের উত্তরের জন্য সংরক্ষিত। আপনার যদি কিছু জিজ্ঞাসা করতে চান তবে নিজের প্রশ্ন শুরু করুন।
অলিন ল্যাথ্রপ

উত্তর:


9

হ্যাঁ, আপনার আরডুইনোর প্রাথমিক ঘড়ির হারের উপর নির্ভর করে। উদাহরণস্বরূপ, এটিএমএগা 2560 এর কাউন্টার-টাইমার 2 এবং 16MHz এর বেসিক ক্লক রেটের জন্য কাউন্টার-টাইমার ইনপুট ফ্রিকোয়েন্সি এবং পূর্ব-স্কেলিংয়ের পরে পিরিয়ডগুলি রয়েছে। টাইমারটি "প্রেসক্যালার" মান বিকল্পগুলিতে তৈরি করেছে যা এই সারণীতে প্রদর্শিত ফ্রিকোয়েন্সি / সময় নির্ধারণ করে:

    TCCR2B bits 2-0    Prescaler    Freq [KHz], Period [usec] after prescale
          0x0          (TC stopped)      --         --
          0x1                1        16000.        0.0625
          0x2                8         2000.        0.500
          0x3               32          500.        2.000
          0x4               64          250.        4.000
          0x5              128          125.        8.000
          0x6              256           62.5      16.000
          0x7             1024           15.625    64.000

আরও ভাল সময় নির্ধারণের জন্য, আপনি টিসিএনটি 2 নামে একটি মান ব্যবহার করেন। কাউন্টারে বিল্ড রয়েছে যা 0 থেকে 255 পর্যন্ত যায় কারণ টাইমারটি 8 বিট হয়। যখন কাউন্টার টিসিএনটি 2 দ্বারা নির্ধারিত মানটিতে পৌঁছে যায় তখন এটি একটি বাধা দেয়। এই বাধাকে TIMER2_OVF_vect বলা হয়।

এই তথ্য প্রদত্ত, ফলে বাধাগুলির হার হবে: 16MHz / (প্রেসকেলার * (255 - টিসিএনটি 2))

আপনি আপনার প্রয়োজনের চেয়ে দ্রুতগতির হলেও পুরো 16MHz (62.5nSec) এ চালানোর জন্য টাইমার পেতে পারেন; প্রাথমিক গণনা (255-2) সহ 2MHz আপনাকে 1MHz বিঘ্নিত হার দেবে। আপনার আইএসআর এ 2 দ্বারা ভাগ করুন:

extern uint32_t MicroSecClock = 0;

ISR(TIMER2_OVF_vect) {// this is a built in function that gets called when the timer gets to the overflow counter number
  static uint_8 count;            // interrupt counter

  if( (++count & 0x01) == 0 )     // bump the interrupt counter
    ++MicroSecClock;              // & count uSec every other time.

  digitalWrite(53,toggle);// pin 53 is arbitrary
  TCNT2 = 253;                    // this tells the timer when to trigger the interrupt. when the counter gets to 253 out of 255(because the timer is 8 bit) the timmer will trigger an interrupt
  TIFR2 = 0x00;                   // clear timer overflow flag
};

আপনার এমসিইউর ডেটা শীট হল মূল সম্পদ; এই নিবন্ধটি আপনাকে একটি ভাল শুরুর দিকে (এবং আমাকে দিয়েছে!) দেবে।


4

মার্ক, আমি আর্দুইনো অ্যামেগা 328 টাইমার 2 এর উপর ভিত্তি করে এবং ওভারফ্লো বিঘ্ন ব্যবহার করে 0.5us এ নির্ভুলতা পেতে একটি নতুন সেট ফাংশন লেখার সিদ্ধান্ত নিয়েছি। আমার কোডটি ডাউনলোড এবং এখানে ব্যবহারের জন্য উপলব্ধ:

http://electricrcaircraftguy.blogspot.com/2014/02/Timer2Counter-more-precise-Arduino-micros-function.html

এখানে একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে: "আমি একটি" মাইক্রো () "প্রতিস্থাপন ফাংশনটিতে 0.5us নির্ভুলতা পেতে একটি" লিবারি "লিখেছিলাম, যাতে আমি পিডাব্লুএমএম বা পিপিএম সংকেত পড়ার পুনরাবৃত্তিমূলক ফলাফলগুলি পেতে পারি, 1us এর মধ্যে I ইন্টারনেট এবং তুলনামূলক কিছু খুঁজে পেল না (বা এটি ব্যবহার করা সহজ ছিল, এবং সার্ডো লিবারির মাধ্যমে পিডব্লিউএম সংকেত লেখার জন্য আরডুইনোর দক্ষতা বজায় রেখেছিল), তাই আমার কাছে মনে হয় এটি আরডিনো এবং রেডিও নিয়ন্ত্রণের বিশ্বে আমার প্রথম প্রধান অবদান is "


3

যদি এভিআর স্তরে নেমে যাওয়া গ্রহণযোগ্য হয় (যেমন আপনি আপনার প্রশ্নে উল্লেখ করেছেন), আপনি একটি টাইমার সেট আপ করতে পারেন এবং এমনকি এভিআর এর ঘড়ির টিকগুলিও পেতে পারেন।

আপনাকে আপনার এভিআরের ডেটাশিটটি উল্লেখ করতে হবে কারণ এটি বিভিন্ন এটিএমগেস এবং এটিটিইনসের মধ্যে আলাদা। তবে পদ্ধতিটি সর্বদা একই থাকে। আপনার যা করা দরকার তা হ'ল:

  • কোন প্রেসক্যালার ব্যবহার করবেন তা স্থির করুন (উদাহরণস্বরূপ এটিকে 1 তে সেট করুন, উদাহরণস্বরূপ আপনি যদি আসল সিপিইউ ঘড়ির গতি চান তবে কোনও প্রেস্কেলিং নয়), টিসিসিআর ডকুমেন্টেশন দেখুন
  • একটি টাইমার ওভারফ্লো বাধা, একটি বিঘ্নিত হ্যান্ডলার এবং বিশ্বব্যাপী বিঘ্ন সক্রিয়করণ সেট আপ করুন
  • টাইমার / কাউন্টার নিয়ন্ত্রণ রেজিস্টারে টাইমার সক্রিয় করুন TCCR

এইভাবে টাইমার রেজিস্টার থেকে সঠিক টিক্স পেতে পারে তবে আপনাকে নিজেই ওভারফ্লোগুলি গণনা করতে হবে। এটি প্রযুক্তি দ্বারা যথাসম্ভব যথাযথ।

পুরানো AT90S2313 এর জন্য এখানে কয়েকটি উদাহরণ কোড দেওয়া হয়েছে তবে এটি আপনাকে মূলত কী করবেন তা ভাল ইঙ্গিত দেয়:

/* uC: AT90S2313 */
#include <avr/io.h>
#include <avr/interrupt.h>

int main(void)
{
  // set up timer 0
  TCCR0 = (1<<CS01); // Prescaler 8

  // enable overflow interrupt
  TIMSK |= (1<<TOIE0);

  // activate interrupts
  sei();

  while(1)
  {
     /* Do whatever you like */
  }
}


ISR (TIMER0_OVF_vect)
{    
   /*
      This gets called everytime there in an overflow in the timer register  
   */
}

ধন্যবাদ ফিজাই আমি কি আরডিনো স্কেচের প্রসঙ্গে এই বাধাগুলি সেট করতে পারি?
মার্ক হ্যারিসন

1
আমি আরডুইনো কাঠামোর সাথে পরিচিত নই। তবে যদি এটি সমস্ত টাইমার অভ্যন্তরীণভাবে সেট আপ না করে তবে আপনি অবশ্যই পারেন। অন্যথায় আপনি এখনও টাইমার নিবন্ধগুলি পড়তে পারেন এবং নিজেকে গণনা করতে পারেন।
ফিজাই

হ্যাঁ, আপনি আরডিনোতে পুরো সি ++ তে প্রোগ্রামিং করছেন এবং সমস্ত রেজিস্টার এবং চিহ্ন যেমন TIMSK, TOIE0ইত্যাদি ব্যবহার করতে পারেন (atmega328p ডেটাশিট থেকে কপির টাইমার সেটআপ)। দেখে মনে হচ্ছে আপনি আইএসআর () ম্যাক্রো ব্যবহার করতে পারবেন না, পরিবর্তে আরডুইনো.সি.সি . / র / রেফারেন্স / অ্যাটাচ ইনটারপ্রেট ব্যবহার করুন
জোফোরকার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.