Arduino ٹائمر: اپنے پروجیکٹس میں ٹائمنگ کے ساتھ کھیلیں

ٹائمر Arduino UNO

کچھ عرصہ پہلے ہم نے اس کے بارے میں مزید معلومات شائع کیں۔ ملیس () فنکشن de Arduinoاب ہم مزید گہرائی میں جائیں گے۔ آرڈوینو ٹائمر, خصوصیت کے لیے اس خصوصیت کے ساتھ شروع کرنے کے لیے، یہ سمجھیں کہ یہ بورڈ MCU کے ساتھ وقت کا انتظام کیسے کرتا ہے، نیز ملیس() سے آگے دیگر افعال۔

Arduino ٹائمر کیا ہے؟

arduino ٹائمر

El Arduino ٹائمر، یا ٹائمر، ایک فنکشن ہے جو ہارڈ ویئر کے ذریعے لاگو کیا جاتا ہے (مائیکرو کنٹرولر میں، کوارٹج کرسٹل کی مدد سے جو گھڑی کی دھڑکنیں پیدا کرتا ہے اور جو "تال" کو سیٹ کرتا ہے، بغیر کسی بیرونی ہارڈ ویئر یا ICs 555 کی ضرورت کے) جو گھڑیوں کی بدولت عارضی واقعات کو کنٹرول کرنے کی اجازت دیتا ہے۔ اندرونی مثال کے طور پر، کسی کام کو وقفے وقفے سے انجام دینا، وقت کی درست پیمائش کرنا، وغیرہ، خاکہ کوڈ سے آزادانہ طور پر۔

جیسا کہ Arduino UNO اس میں ایک MCU چپ ہے جو 16 میگاہرٹز پر کام کرتی ہے، ہر سیکنڈ میں 16.000.000 کو پھانسی دی جا سکتی ہے۔ ہدایات کو عمل میں لانے کے لیے X سائیکلوں کی ضرورت ہوتی ہے، یہ سب ایک ہی گھڑی کے چکروں میں نہیں ہوتے ہیں، مثال کے طور پر، 16 بٹ والے کو اس AVR فن تعمیر میں مزید سائیکلوں کی ضرورت ہے۔

تصور کریں کہ آپ استعمال کرتے ہیں delay() فنکشن، یہ Arduino MCU پر عمل درآمد کو روک دے گا جب تک کہ مخصوص وقت گزر نہ جائے اور پھر پروگرام کے ساتھ جاری رہے، لیکن ٹائمر بلاک نہیں کرے گا۔ یہ وقت ہو گا کیونکہ MCU دوسری ہدایات پر ایک ساتھ عمل درآمد جاری رکھے گا۔ یہی بڑا فائدہ ہے۔

ٹائمر سے متعلق ہے۔ رکاوٹیں Arduino کے، چونکہ انہیں کسی خاص کام میں شرکت کے لیے ان کے ذریعے پھانسی دی جائے گی۔ دوسرے لفظوں میں، Arduino Timer ایک فنکشن ہے جو ایک خاص وقت پر متحرک ہوتا ہے، ایک انٹرپٹ فنکشن کو انجام دیتا ہے۔ اس لیے ان رکاوٹوں کے بارے میں جاننا بھی ضروری ہے۔

طریقوں

Arduino ٹائمر ہے 2 آپریٹنگ موڈ، اسے اس میں استعمال کرنے کے قابل ہونا:

  • PWM سگنل: آپ کو کنٹرول کر سکتے ہیں Arduino پن (~).
  • CTC (موازنہ میچ پر کلیئر ٹائمر): ایک کاؤنٹر کے اندر وقت کی گنتی کرتا ہے اور جب یہ ٹائمرز کے رجسٹر میں بیان کردہ قدر تک پہنچ جاتا ہے، تو رکاوٹ کو انجام دیا جاتا ہے۔

اس میں کتنے ٹائمر ہیں؟ ٹائمرز کی اقسام

Arduino UNO ملی افعال

اس 3 ٹائمر پلیٹوں پر Arduino UNO، اگرچہ دیگر ٹاپ پلیٹوں پر اور بھی ہوسکتے ہیں:

  • ٹائمر 0: 8 بٹ، 0 سے 255 تک شمار کر سکتے ہیں (256 ممکنہ اقدار)۔ تاخیر()، ملیس()، اور مائیکرو() جیسے افعال کے ذریعے استعمال کیا جاتا ہے۔ اس میں ترمیم کی سفارش نہیں کی جاتی ہے تاکہ پروگراموں کو تبدیل نہ کیا جائے۔
  • ٹائمر 1: ٹائمر 0 کے برابر۔ UNO میں سروو لائبریری کے ذریعہ استعمال کیا جاتا ہے (میگا کے لئے ٹائمر 5)۔
  • ٹائمر 2: 16 بٹ، اور 0 سے 65.525 (65.536 ممکنہ اقدار) تک ہو سکتا ہے۔ ٹون() فنکشن کے لیے استعمال کیا جاتا ہے، اگر استعمال نہ کیا جائے تو اسے آپ کی ایپلیکیشن کے لیے آزادانہ طور پر استعمال کیا جا سکتا ہے۔
  • ٹائمر 3، 4، 5 (صرف Arduino MEGA پر): تمام 16 بٹ۔

Arduino ٹائمر کیسے کام کرتا ہے؟

ٹائمر، ٹائمر

کرنے کے لئے Arduino ٹائمر کے ساتھ کام کریں۔یہ جاننا ضروری ہے کہ یہ سب اس ترقیاتی بورڈ کے MCU میں الیکٹرانک طور پر کیسے کام کرتا ہے:

  • گھڑی کی تعدد: فی سیکنڈ سائیکلوں کی تعداد ہے جسے یہ تیار کرنے کی صلاحیت رکھتا ہے، Arduino کے معاملے میں یہ 16 میگاہرٹز ہے، یا کیا وہی ہے، گھڑی کا سگنل ایک سیکنڈ میں 16.000.000 بار (سائیکل) میں دوہرتا ہے۔
  • مدت: T کی طرف سے ظاہر کیا جاتا ہے، اور سیکنڈوں میں ماپا جاتا ہے، اور سائیکلوں کا الٹا ہے۔ مثال کے طور پر، T=1/C، جس کے نتیجے میں 1/16000000 = 0.0000000625 ہوگا، ہر ایک سائیکل کو مکمل ہونے میں جو وقت لگے گا۔ اور تعدد مدت کا الٹا ہے، لہذا f = 1/T۔
  • سائیکل: سگنل کی ہر ایک تکرار ہے جو وقت کی فی یونٹ ہوتی ہے۔ Arduino پر یہ ایک سیکنڈ میں 16M ہوگا۔ یا پھر وہی کیا ہے، اس صورت میں، جب 16 ملین سائیکل گزر چکے ہیں، ایک سیکنڈ گزر گیا ہے؟ لہذا، ایک سائیکل 625 این ایس لینے کے لئے کہا جا سکتا ہے.
  • سگنل کے کنارے: گھڑی کے اشارے مربع ہوتے ہیں، اور کنارے بڑھتے یا گر سکتے ہیں۔ ایک کنارہ سگنل کی سیدھی لکیر ہے جب یہ اس سے تبدیل ہوتا ہے:
    • 0 (کم) سے 1 (اونچا): بڑھتا ہوا کنارے۔
    • 1 (اونچا) سے 0 (کم): گرتا ہوا کنارے۔

کنارے اہم ہیں کیونکہ Arduino ٹائمر سگنل کناروں سے سائیکل کی پیمائش کرتے ہیں۔ A) ہاں ال contador یہ ہر ایک سائیکل کے ساتھ بڑھتا ہے اور جب یہ رجسٹر ویلیو تک پہنچ جاتا ہے، تو مداخلت کو عمل میں لایا جاتا ہے۔

لہذا، ایک بار جب آپ یہ جان لیں، اگر آپ کے پاس ہے۔ Arduino MCU پر 16Mhz، اور ایک 8 بٹ ٹائمر استعمال کیا جاتا ہے، یہ کہا جا سکتا ہے کہ ہر 16 μs (256/16000000) یا 4-bit (16/65536) کے لیے 16000000 ms میں رکاوٹیں آئیں گی۔ لہذا، اگر آپ 16-بٹ کاؤنٹر رجسٹر کو زیادہ سے زیادہ پر سیٹ کرتے ہیں، قدر 65535 کے ساتھ، تو جو بھی کام ہو اسے انجام دینے کے لیے 4 ms پر رکاوٹ آئے گی۔

جب کاؤنٹر زیادہ سے زیادہ ممکنہ قیمت تک پہنچ جاتا ہے، یہ دوبارہ 0 پر واپس آجائے گا۔. یعنی، ایک اوور فلو ہوتا ہے اور یہ شروع سے ہی واپس شمار ہوتا ہے۔

ٹائمر کے اضافے کی شرح کو کنٹرول کرنے کے لیے آپ بھی استعمال کر سکتے ہیں۔ ایک prescaler، جو 1، 8، 64، 256 اور 1024 کی قدریں لیتا ہے اور وقت کو اس طرح تبدیل کرتا ہے:

ٹائمر کی رفتار (Hz) = Arduino / Prescaler کی گھڑی کی فریکوئنسی

اگر یہ 1 prescaler ہے تو کنٹرولر بڑھ کر 16 Mhz ہو جائے گا، اگر یہ 8 سے 2 Mhz ہے، اگر یہ 64 سے 250 kHz ہے، وغیرہ۔ یاد رکھیں کہ کاؤنٹر اور prescaler کی قدر کا موازنہ کرنے کے لیے ایک ٹائمر کاؤنٹر سٹیٹ کمپیریٹر ہو گا جب تک کہ وہ برابر نہ ہو جائیں اور پھر کوئی کارروائی انجام دیں۔ تو، تعدد میں رکاوٹ فارمولہ کے ذریعہ دیا گیا ہے:

+1 اس لیے ہے کہ کاؤنٹر رجسٹر کو 0 پر انڈیکس کیا گیا ہے، یعنی یہ 1 پر گنتی شروع نہیں کرتا، بلکہ 0 پر ہوتا ہے۔

مداخلت کی رفتار (Hz) = Arduino / Prescaler گھڑی کی فریکوئنسی (موازنہ رجسٹر کی قیمت + 1)

خوش قسمتی سے، ہمیں نہیں کرنا چاہئے ریکارڈ میں ترمیم کریں Arduino Timers کے، کیونکہ اس کی دیکھ بھال ان لائبریریوں کے ذریعے کی جائے گی جنہیں ہم کوڈ میں استعمال کرتے ہیں۔ لیکن اگر وہ استعمال نہیں ہوتے ہیں، تو انہیں ترتیب دیا جانا چاہئے.

Arduino IDE میں مثالیں۔

Arduino IDE، ڈیٹا کی اقسام، پروگرامنگ

اس سب کو قدرے بہتر طریقے سے سمجھنے کے لیے، میں یہاں Arduino IDE کے لیے دو اسکیچ کوڈز دکھاتا ہوں جن کی مدد سے آپ ٹائمرز کے استعمال کا تجربہ کر سکتے ہیں۔ پہلا وہ کوڈ ہے جو ہر سیکنڈ میں Arduino پن 8 سے منسلک ایل ای ڈی کو جھپکائے گا:

#define ledPin 8
void setup()
{
  pinMode(ledPin, OUTPUT);
  // Configurar Timer1
  TCCR1A = 0;                        //Registro control A a 0, pines OC1A y OC1B deshabilitados
  TCCR1B = 0;                        //Limpia el registrador
  TCCR1B |= (1<<CS10)|(1 << CS12);   //Configura prescaler a 1024: CS12 = 1 y CS10 = 1
  TCNT1 = 0xC2F8;                    //Iniciar timer para desbordamiento a 1 segundo
                                     //65536-(16MHz/1024/1Hz - 1) = 49912 = 0xC2F8 en hexadecimal
  
  TIMSK1 |= (1 << TOIE1);           //Habilitar interrupción para Timer1
}
void loop()
{
}
ISR(TIMER1_OVF_vect)                              //Interrupción del TIMER1 
{
  TCNT1 = 0xC2F7;                                 // Reniciar Timer1
  digitalWrite(ledPin, digitalRead(ledPin) ^ 1); //Invierte el estado del LED
}

ایل ای ڈی کو پلک جھپکنے یا چمکانے کا پروگرام کریں، جیسا کہ پچھلے کیس میں ہر سیکنڈ میں، لیکن اس بار استعمال کرتے ہوئے۔ CTC یعنی موازنہ:

#define ledPin 8
void setup()
{
  pinMode(ledPin, OUTPUT);
  
  // Configuración Timer1
  TCCR1A = 0;                //Registro de control A a 0
  TCCR1B = 0;                //Limpiar registro
  TCNT1  = 0;                //Inicializar el temporizador
  OCR1A = 0x3D08;            //Carga el valor del registro de comparación: 16MHz/1024/1Hz -1 = 15624 = 0X3D08
  TCCR1B |= (1 << WGM12)|(1<<CS10)|(1 << CS12);   //Modo CTC, prescaler de 1024: CS12 = 1 y CS10 = 1  
  TIMSK1 |= (1 << OCIE1A);  //Habilita interrupción por igualdad de comparación
}
void loop()
{
}
ISR(TIMER1_COMPA_vect)          //Interrupción por igualdad de comparación en TIMER1
{
  digitalWrite(ledPin, digitalRead(ledPin) ^ 1);   //Invierte el estado del LED
}

Arduino پروگرامنگ کے بارے میں مزید

ایک پلیٹ خریدیں Arduino UNO Rev3۔

مضمون کا مواد ہمارے اصولوں پر کاربند ہے ادارتی اخلاقیات. غلطی کی اطلاع دینے کے لئے کلک کریں یہاں.

تبصرہ کرنے والا پہلا ہونا

اپنی رائے دیں

آپ کا ای میل ایڈریس شائع نہیں کیا جائے گا. ضرورت ہے شعبوں نشان لگا دیا گیا رہے ہیں کے ساتھ *

*

*

  1. اعداد و شمار کے لئے ذمہ دار: میگل اینگل گاتین
  2. ڈیٹا کا مقصد: اسپیم کنٹرول ، تبصرے کا انتظام۔
  3. قانون سازی: آپ کی رضامندی
  4. ڈیٹا کا مواصلت: اعداد و شمار کو تیسری پارٹی کو نہیں بتایا جائے گا سوائے قانونی ذمہ داری کے۔
  5. ڈیٹا اسٹوریج: اوکیسٹس نیٹ ورکس (EU) کے میزبان ڈیٹا بیس
  6. حقوق: کسی بھی وقت آپ اپنی معلومات کو محدود ، بازیافت اور حذف کرسکتے ہیں۔

انگریزی ٹیسٹٹیسٹ کاتالانہسپانوی کوئز