সুচিপত্র:

AVR মাইক্রোকন্ট্রোলার। টাইমার ব্যবহার করে LEDs ফ্ল্যাশার। টাইমার ইন্টারাপ্ট। টাইমার সিটিসি মোড: 6 টি ধাপ
AVR মাইক্রোকন্ট্রোলার। টাইমার ব্যবহার করে LEDs ফ্ল্যাশার। টাইমার ইন্টারাপ্ট। টাইমার সিটিসি মোড: 6 টি ধাপ

ভিডিও: AVR মাইক্রোকন্ট্রোলার। টাইমার ব্যবহার করে LEDs ফ্ল্যাশার। টাইমার ইন্টারাপ্ট। টাইমার সিটিসি মোড: 6 টি ধাপ

ভিডিও: AVR মাইক্রোকন্ট্রোলার। টাইমার ব্যবহার করে LEDs ফ্ল্যাশার। টাইমার ইন্টারাপ্ট। টাইমার সিটিসি মোড: 6 টি ধাপ
ভিডিও: Fuse Bit Settings কেনো প্রয়োজন? AVR Microcontroller | Techshop BD 2024, নভেম্বর
Anonim
Image
Image

সবাইকে অভিবাদন!

ইলেকট্রনিক্স ক্ষেত্রে টাইমার একটি গুরুত্বপূর্ণ ধারণা। প্রতিটি ইলেকট্রনিক উপাদান একটি সময় ভিত্তিতে কাজ করে। এই টাইম বেস সমস্ত কাজকে সিঙ্ক্রোনাইজড রাখতে সাহায্য করে। সমস্ত মাইক্রোকন্ট্রোলার কিছু পূর্বনির্ধারিত ঘড়ির ফ্রিকোয়েন্সিতে কাজ করে, তাদের সকলের টাইমার সেট করার বিধান রয়েছে। AVR একটি টাইমার থাকার গর্ব করে যা খুব নির্ভুল, সুনির্দিষ্ট এবং নির্ভরযোগ্য। এটি এতে প্রচুর বৈশিষ্ট্য সরবরাহ করে, এইভাবে এটি একটি বিস্তৃত বিষয় তৈরি করে। সবচেয়ে ভালো দিক হল টাইমারটি সম্পূর্ণ CPU থেকে স্বাধীন। সুতরাং, এটি CPU- র সমান্তরালভাবে চলে এবং কোন CPU- এর হস্তক্ষেপ নেই, যা টাইমারটিকে বেশ নির্ভুল করে তোলে। এই বিভাগে আমি AVR টাইমারের মৌলিক ধারণা ব্যাখ্যা করি। আমি টাইমার ব্যবহার করে LED ফ্ল্যাশার নিয়ন্ত্রণ করতে সি কোডে সহজ প্রোগ্রাম লিখছি।

ধাপ 1: বর্ণনা

সমস্যা বিবৃতি 1: আসুন প্রতি 50 মিসে প্রথম LED (সবুজ) ফ্ল্যাশ করি
সমস্যা বিবৃতি 1: আসুন প্রতি 50 মিসে প্রথম LED (সবুজ) ফ্ল্যাশ করি

ATMega328 এ তিন ধরনের টাইমার রয়েছে:

টাইমার/কাউন্টার 0 (TC0) - একটি সাধারণ উদ্দেশ্য 8 -বিট টাইমার/কাউন্টার মডিউল, দুটি স্বাধীন আউটপুট কম্পার ইউনিট এবং PWM সাপোর্ট সহ;

টাইমার/কাউন্টার 1 (টিসি 1) - 16 -বিট টাইমার/কাউন্টার ইউনিট সঠিক প্রোগ্রাম এক্সিকিউশন টাইমিং (ইভেন্ট ম্যানেজমেন্ট), ওয়েভ জেনারেশন এবং সিগন্যাল টাইমিং পরিমাপের অনুমতি দেয়;

টাইমার/কাউন্টার 2 (TC2) -একটি সাধারণ উদ্দেশ্য, চ্যানেল, PWM এবং অ্যাসিঙ্ক্রোনাস অপারেশন সহ 8 -বিট টাইমার/কাউন্টার মডিউল;

পদক্ষেপ 2: সমস্যা বিবৃতি 1: আসুন প্রতি 50 মিসে প্রথম LED (সবুজ) ফ্ল্যাশ করি

সমস্যা বিবৃতি 1: আসুন প্রতি 50 মিসে প্রথম LED (সবুজ) ফ্ল্যাশ করি
সমস্যা বিবৃতি 1: আসুন প্রতি 50 মিসে প্রথম LED (সবুজ) ফ্ল্যাশ করি
সমস্যা বিবৃতি 1: আসুন প্রতি 50 মিসে প্রথম LED (সবুজ) ফ্ল্যাশ করি
সমস্যা বিবৃতি 1: আসুন প্রতি 50 মিসে প্রথম LED (সবুজ) ফ্ল্যাশ করি

পদ্ধতি:

- একটি পূর্ণ ফ্রিকোয়েন্সি বৈদ্যুতিক সংকেতকে পূর্ণসংখ্যা বিভাগ দ্বারা কম ফ্রিকোয়েন্সি কমাতে টাইমার 0 প্রেসকলার ব্যবহার করে;

- টাইমার 0 ওভারফ্লো প্রতিবার একটি বাধা ব্যবহার করে;

টাইমার 0 (8 বিট) এটি 0 থেকে 255 পর্যন্ত গণনা করে, তারা উপচে পড়ে, এই মানটি প্রতিটি ঘড়ির পালসে পরিবর্তিত হয়।

F_CPU = 16MHz: ঘড়ির সময়কাল = 1000ms / 16000000Hz = 0.0000625ms

টাইমার গণনা = (প্রয়োজনীয় বিলম্ব / ঘড়ির সময়কাল) -1 = (50ms / 0.0000625ms) = 799999

ঘড়িটি ইতিমধ্যে 799999 বার টিক দিয়েছে মাত্র 50 ms বিলম্ব করতে!

আমরা ফ্রিকোয়েন্সি বিভাজনের কৌশল ব্যবহার করতে পারি যাকে টাইমার কাউন্ট কমানোর জন্য প্রেসক্যালিং বলা হয়। AVR আমাদেরকে নিম্নলিখিত প্রেসকলার মানগুলি বেছে নিতে দেয়: 8, 64, 256 এবং 1024।

কাউন্টার মান সবসময় একটি পূর্ণসংখ্যা হওয়া উচিত। আসুন একটি prescaler 256 নির্বাচন করুন!

বেশিরভাগ মাইক্রোকন্ট্রোলারে, ইন্টারাপ্ট বলে কিছু থাকে। যখনই কিছু শর্ত পূরণ হয় তখন এই বিঘ্নটি বহিস্কার করা যেতে পারে। এখন যখনই কোন বাধা বহিস্কার করা হয়, AVR থেমে যায় এবং মূল রুটিনের তার সঞ্চালন সংরক্ষণ করে, বিরতিতে কল করে প্রধান রুটিন এবং এটি চালানো অব্যাহত।

যেহেতু প্রয়োজনীয় বিলম্ব (50ms) সর্বাধিক সম্ভাব্য বিলম্বের চেয়ে বড়: 4, 096ms = 1000ms / 62500Hz * 256, স্পষ্টতই টাইমার উপচে পড়বে। এবং যখনই টাইমার উপচে পড়বে, একটি বাধা বহিস্কার করা হবে।

বিরতি কতবার বহিস্কার করা উচিত?

50ms / 4.096ms = 3125 /256 = 12.207 যদি টাইমার 12 বার উপচে পড়ে, 12 * 4.096ms = 49.152ms পাস হয়ে যেত। 13 তম পুনরাবৃত্তিতে, আমাদের 50ms - 49.152ms = 0.848ms এর বিলম্ব প্রয়োজন।

62500Hz (prescaler = 256) ফ্রিকোয়েন্সি এ, প্রতিটি টিক 0.016ms লাগে। এইভাবে 0.848ms বিলম্ব অর্জন করতে, এটি 0.848ms / 0.016ms = 53 টিক প্রয়োজন হবে। এইভাবে, 13 তম পুনরাবৃত্তিতে, আমরা কেবল টাইমারকে 53 পর্যন্ত গণনা করার অনুমতি দিই এবং তারপরে এটি পুনরায় সেট করি।

টাইমার 0/কাউন্টার শুরু করুন (ছবি দেখুন):

TCCR0B | = (1 << CS02) // prescaler = 256 TCNT0 = 0 দিয়ে টাইমার সেট করুন // কাউন্টার TIMSK0 | // ওভারফ্লো কাউন্টার ভেরিয়েবল শুরু করুন

ধাপ 3: সমস্যা বিবৃতি 2: আসুন প্রতি 1 সেকেন্ডে দ্বিতীয় LED (নীল) ফ্ল্যাশ করি

সমস্যা বিবৃতি 2: আসুন ফ্ল্যাশ সেকেন্ড LED (নীল) প্রতি 1 সেকেন্ডে
সমস্যা বিবৃতি 2: আসুন ফ্ল্যাশ সেকেন্ড LED (নীল) প্রতি 1 সেকেন্ডে
সমস্যা বিবৃতি 2: আসুন ফ্ল্যাশ সেকেন্ড এলইডি (নীল) প্রতি 1 সেকেন্ডে
সমস্যা বিবৃতি 2: আসুন ফ্ল্যাশ সেকেন্ড এলইডি (নীল) প্রতি 1 সেকেন্ডে
সমস্যা বিবৃতি 2: আসুন ফ্ল্যাশ সেকেন্ড এলইডি (নীল) প্রতি 1 সেকেন্ডে
সমস্যা বিবৃতি 2: আসুন ফ্ল্যাশ সেকেন্ড এলইডি (নীল) প্রতি 1 সেকেন্ডে

পদ্ধতি:

- একটি পূর্ণ ফ্রিকোয়েন্সি বৈদ্যুতিক সংকেতকে পূর্ণসংখ্যা বিভাগ দ্বারা কম করার জন্য একটি টাইমার 1 প্রেসকলার ব্যবহার করে;

- তুলনা (CTC) মোডে ক্লিয়ার টাইমার ব্যবহার করে;

- সিটিসি মোডের সাথে বাধা ব্যবহার করে;

টাইমার 1 (16 বিট) এটি 0 থেকে 65534 পর্যন্ত গণনা করে, তারা উপচে পড়ে। এই মান প্রতি ঘড়ির পালসে পরিবর্তিত হয়।

F_CPU = 16MHz: ঘড়ির সময়কাল = 1000ms / 16000000Hz = 0.0000625ms টাইমার গণনা = (প্রয়োজনীয় বিলম্ব / ঘড়ির সময়কাল) -1 = (1000ms / 0.0000625ms) = 15999999

1s এর বিলম্ব দিতে ঘড়িটি ইতিমধ্যে 15999999 বার টিক দিয়েছে!

আমরা ফ্রিকোয়েন্সি বিভাজনের কৌশল ব্যবহার করতে পারি যাকে টাইমার কাউন্ট কমানোর জন্য প্রেসক্যালিং বলা হয়। AVR আমাদের নিম্নলিখিত প্রেসকলার মানগুলি থেকে বেছে নেওয়ার প্রস্তাব দেয়: 8, 64, 256 এবং 1024। টেবিলটি বিভিন্ন প্রেসক্লার ব্যবহারের ফলাফলের সংক্ষিপ্তসার দেখুন। কাউন্টার মান সবসময় একটি পূর্ণসংখ্যা হওয়া উচিত। আসুন একটি prescaler 256 নির্বাচন করুন!

তুলনা (CTC) মোডে ক্লিয়ার টাইমারে, OCR1A বা ICR1 রেজিস্টারটি পাল্টা রেজোলিউশনে ম্যানিপুলেট করতে ব্যবহৃত হয়। CTC মোডে কাউন্টারটি শূন্যে সাফ করা হয় যখন কাউন্টার ভ্যালু (TCNT1) OCR1A অথবা ICR1 এর সাথে মেলে। OCR1A বা ICR1 কাউন্টারের জন্য সর্বোচ্চ মান নির্ধারণ করে, তাই এর রেজোলিউশনও। এই মোড তুলনামূলক মিল আউটপুট ফ্রিকোয়েন্সি এর অধিক নিয়ন্ত্রণের অনুমতি দেয় এটি বহিরাগত ইভেন্টগুলি গণনার কাজকে সহজ করে তোলে। আমরা অবশ্যই AVR কে টাইমার 1/কাউন্টার রিসেট করতে বলব যত তাড়াতাড়ি তার মান 62500 এর কাছাকাছি পৌঁছে যায়, এইভাবে 1s এর বিলম্ব অর্জন করতে।

টাইমার 1/কাউন্টার শুরু করুন (ছবি দেখুন):

TCCR1B | = (1 << WGM12) | (1 << CS12) // prescaler = 256 এবং CTC মোডে TCNT1 = 0 // টাইমার সেট করুন কাউন্টার TIMSK1 | = (1 << OCIE1A) // সক্ষম করুন = 62500 // তুলনা মূল্যের সূচনা করুন

ধাপ 4: সমস্যা বিবৃতি 3: আসুন ফ্ল্যাশ থার্ড LED (লাল) প্রতি 16ms

সমস্যা বিবৃতি 3: আসুন ফ্ল্যাশ থার্ড LED (লাল) প্রতি 16ms
সমস্যা বিবৃতি 3: আসুন ফ্ল্যাশ থার্ড LED (লাল) প্রতি 16ms
সমস্যা বিবৃতি 3: আসুন ফ্ল্যাশ থার্ড LED (লাল) প্রতি 16ms
সমস্যা বিবৃতি 3: আসুন ফ্ল্যাশ থার্ড LED (লাল) প্রতি 16ms
সমস্যা বিবৃতি 3: আসুন ফ্ল্যাশ থার্ড LED (লাল) প্রতি 16ms
সমস্যা বিবৃতি 3: আসুন ফ্ল্যাশ থার্ড LED (লাল) প্রতি 16ms
সমস্যা বিবৃতি 3: আসুন ফ্ল্যাশ থার্ড LED (লাল) প্রতি 16ms
সমস্যা বিবৃতি 3: আসুন ফ্ল্যাশ থার্ড LED (লাল) প্রতি 16ms

পদ্ধতি:

- একটি পূর্ণ ফ্রিকোয়েন্সি বৈদ্যুতিক সংকেতকে পূর্ণসংখ্যা বিভাগ দ্বারা কম ফ্রিকোয়েন্সি কমাতে টাইমার 2 প্রেসকলার ব্যবহার করে;

- তুলনা (CTC) মোডে ক্লিয়ার টাইমার ব্যবহার করে;

- বাধা ছাড়াই হার্ডওয়্যার সিটিসি মোড ব্যবহার করা;

টাইমার 2 (8 বিট) এটি 0 থেকে 255 পর্যন্ত গণনা করে, তারা উপচে পড়ে। এই মান প্রতি ঘড়ির পালসে পরিবর্তিত হয়।

F_CPU = 16MHz: ঘড়ির সময়কাল = 1000ms / 16000000Hz = 0.0000625ms

টাইমার গণনা = (প্রয়োজনীয় বিলম্ব / ঘড়ির সময়কাল) -1 = (16ms / 0.0000625ms) = 255999

16ms এর বিলম্ব দিতে ঘড়িটি ইতিমধ্যে 255999 বার টিক দিয়েছে!

দেখুন টেবিল বিভিন্ন prescalers ব্যবহারের ফলাফল সারাংশ। কাউন্টার মান সবসময় একটি পূর্ণসংখ্যা হওয়া উচিত। আসুন একটি প্রেসকলার 1024 বেছে নিই!

CTC মোডে কাউন্টারটি শূন্যে সাফ করা হয় যখন কাউন্টার মান (TCNT2) OCR2A অথবা ICR2 এর সাথে মেলে। পিন PB3 হল TIMER2 - OC2A এর আউটপুট তুলনা পিন (চিত্র দেখুন)।

টাইমার/কাউন্টার 2 কন্ট্রোল রেজিস্টার A - TCCR2A বিট 7: 6 - COM2A1: 0 - তুলনা ইউনিট A এর জন্য আউটপুট মোড তুলনা করুন যেহেতু আমাদের LED টগল করতে হবে, তাই আমরা বিকল্পটি বেছে নিই: তুলনা ম্যাচে OC2A টগল করুন যখনই একটি তুলনা ম্যাচ ঘটে, তখন OC2A পিন স্বয়ংক্রিয়ভাবে টগল করা হয়। কোন পতাকা বিট চেক করার প্রয়োজন নেই, কোন বাধা উপস্থিত থাকার প্রয়োজন নেই।

টাইমার 2/কাউন্টার শুরু করুন

TCCR2A | = (1 << COM2A0) | (1 << WGM21) // টগল মোডে টাইমার OC2A পিন সেট করুন এবং CTC মোড TCCR2B | = (1 << CS22) | (1 << CS21) | (1 << CS20) // prescaler = 1024 TCNT2 = 0 // টাইমার সেট করুন কাউন্টার OCR2A = 250 // প্রাথমিক মান তুলনা করুন

ধাপ 5: সি -তে একটি প্রোগ্রামের জন্য কোড লেখা

সি -তে একটি প্রোগ্রামের জন্য কোড লেখা হচ্ছে মাইক্রোকন্ট্রোলার ফ্ল্যাশ মেমরিতে HEX ফাইল আপলোড করা
সি -তে একটি প্রোগ্রামের জন্য কোড লেখা হচ্ছে মাইক্রোকন্ট্রোলার ফ্ল্যাশ মেমরিতে HEX ফাইল আপলোড করা
সি -তে একটি প্রোগ্রামের জন্য কোড লেখা হচ্ছে মাইক্রোকন্ট্রোলার ফ্ল্যাশ মেমরিতে HEX ফাইল আপলোড করা
সি -তে একটি প্রোগ্রামের জন্য কোড লেখা হচ্ছে মাইক্রোকন্ট্রোলার ফ্ল্যাশ মেমরিতে HEX ফাইল আপলোড করা

ইটিগ্রেটেড ডেভেলপমেন্ট প্ল্যাটফর্ম - এটমেল স্টুডিও ব্যবহার করে সি কোডে AVR মাইক্রোকন্ট্রোলার অ্যাপ্লিকেশন লেখা এবং নির্মাণ করা।

F_CPU হার্টজে ঘড়ির ফ্রিকোয়েন্সি সংজ্ঞায়িত করে এবং avr-libc লাইব্রেরি ব্যবহার করে প্রোগ্রামগুলিতে সাধারণ। এই ক্ষেত্রে এটি বিলম্ব রুটিন দ্বারা ব্যবহৃত হয় কিভাবে সময় বিলম্ব গণনা করা যায়।

#ifndef F_CPU

#ডিফাইন F_CPU 16000000UL // কন্ট্রোলার ক্রিস্টাল ফ্রিকোয়েন্সি বলছে (16 MHz AVR ATMega328P) #endif

#অন্তর্ভুক্ত // হেডার পিনের উপর তথ্য প্রবাহ নিয়ন্ত্রণ সক্ষম করতে। পিন, পোর্ট ইত্যাদি সংজ্ঞায়িত করে।

প্রথম অন্তর্ভুক্ত ফাইলটি avr-libc এর অংশ এবং আপনি যে কোন AVR প্রজেক্টে কাজ করেন তা ব্যবহার করা হবে। io.h আপনি যে CPU ব্যবহার করছেন তা নির্ধারণ করবে (যে কারণে কম্পাইল করার সময় আপনি অংশটি নির্দিষ্ট করেন) এবং পরিবর্তে আমরা যে চিপটি ব্যবহার করছি তার জন্য উপযুক্ত IO সংজ্ঞা শিরোনাম অন্তর্ভুক্ত করুন। এটি কেবল আপনার সমস্ত পিন, পোর্ট, বিশেষ রেজিস্টার ইত্যাদির জন্য ধ্রুবক সংজ্ঞায়িত করে।

#অন্তর্ভুক্ত // শিরোনাম বাধা সক্ষম করতে

উদ্বায়ী uint8_t tot_overflow; // গ্লোবাল ভেরিয়েবল ওভারফ্লোর সংখ্যা গণনা করতে

সমস্যা বিবৃতির পদ্ধতি: প্রতি 50 ms তে ফ্ল্যাশ ফার্স্ট (সবুজ) LED

- একটি পূর্ণ ফ্রিকোয়েন্সি বৈদ্যুতিক সংকেতকে পূর্ণসংখ্যা বিভাগ দ্বারা কম ফ্রিকোয়েন্সি কমাতে টাইমার 0 প্রেসকলার ব্যবহার করে;

- টাইমার 0 ওভারফ্লো প্রতিবার একটি বাধা ব্যবহার করে;

অকার্যকর timer0_init () // টাইমার 0 আরম্ভ করুন, বাধা এবং পরিবর্তনশীল

{TCCR0B | = (1 << CS02); // prescaler = 256 TCNT0 = 0 দিয়ে টাইমার সেট করুন; // কাউন্টার TIMSK0 আরম্ভ করুন | = (1 << TOIE0); // সক্রিয় করুন ওভারফ্লো নিরবচ্ছিন্ন sei (); // বিশ্বব্যাপী বাধাগুলি সক্ষম করুন tot_overflow = 0; // ওভারফ্লো কাউন্টার ভেরিয়েবল শুরু করুন}

সমস্যা বিবৃতির পদ্ধতি: ফ্ল্যাশ সেকেন্ড LED (নীল) প্রতি 1 সে

- একটি পূর্ণ ফ্রিকোয়েন্সি বৈদ্যুতিক সংকেতকে পূর্ণসংখ্যা বিভাগ দ্বারা কম করার জন্য একটি টাইমার 1 প্রেসকলার ব্যবহার করে;

- তুলনা (CTC) মোডে ক্লিয়ার টাইমার ব্যবহার করে;

- সিটিসি মোডের সাথে বাধা ব্যবহার করে;

অকার্যকর timer1_init () // টাইমার 1 আরম্ভ করুন, বাধা এবং পরিবর্তনশীল {TCCR1B | = (1 << WGM12) | (1 << CS12); // prescaler = 256 এবং CTC মোড TCNT1 = 0 দিয়ে টাইমার সেট করুন; // কাউন্টার OCR1A = 62500 শুরু করুন; // আরম্ভ করুন তুলনা মান TIMSK1 | = (1 << OCIE1A); // সক্ষম তুলনা বিরতি}

সমস্যা বিবৃতি পদ্ধতি: ফ্ল্যাশ তৃতীয় LED (লাল) প্রতি 16ms

- একটি পূর্ণ ফ্রিকোয়েন্সি বৈদ্যুতিক সংকেতকে পূর্ণসংখ্যা বিভাগ দ্বারা কম ফ্রিকোয়েন্সি কমাতে টাইমার 2 প্রেসকলার ব্যবহার করে;

- তুলনা (CTC) মোডে ক্লিয়ার টাইমার ব্যবহার করে;

- বাধা ছাড়াই হার্ডওয়্যার সিটিসি মোড ব্যবহার করা;

void timer2_init () // initializer timer2 {TCCR2A | = (1 << COM2A0) | (1 << WGM21); // টগল মোডে টাইমার OC2A পিন সেট আপ করুন এবং CTC মোড TCCR2B | = (1 << CS22) | (1 << CS21) | (1 << CS20); // prescaler = 1024 TCNT2 = 0 দিয়ে টাইমার সেট করুন; // কাউন্টার OCR2A = 250 শুরু করুন; // তুলনা মূল্যের সূচনা করুন}

TIMER0 ওভারফ্লো ইন্টারাপ্ট সার্ভিস রুটিন বলা হয় যখনই TCNT0 ওভারফ্লো হয়:

ISR (TIMER0_OVF_vect)

{tot_overflow ++; // ওভারফ্লো সংখ্যার উপর নজর রাখুন}

এই আইএসআর যখনই একটি ম্যাচ ঘটে তখন বহিস্কার করা হয়, টগল এখানে নিজেই নেতৃত্ব দেয়:

ISR (TIMER1_COMPA_vect) {PORTC ^= (1 << 1); // এখানে নেতৃত্বে টগল}

int প্রধান (শূন্য)

{DDRB | = (1 << 0); // সংযোগ 1 (সবুজ) পিন PB0 DDRC নেতৃত্বে | = (1 << 1); // সংযোগ 2 (নীল) পিন PC1 DDRB নেতৃত্বে | = (1 << 3); // সংযোগ 3 (লাল) পিন PB3 (OC2A) টাইমার 0_init (); // প্রারম্ভিক টাইমার 0 timer1_init (); // প্রারম্ভিক টাইমার 1 timer2_init (); // টাইমার 2 আরম্ভ করুন যখন (1) // চিরতরে লুপ {

যদি টাইমার 0 12 বার প্রবাহিত হয়, 12 * 4.096ms = 49.152ms পাস হবে। 13 তম পুনরাবৃত্তিতে, আমাদের 50ms - 49.152ms = 0.848ms এর বিলম্ব প্রয়োজন। এইভাবে, 13 তম পুনরাবৃত্তিতে, আমরা কেবল টাইমারকে 53 পর্যন্ত গণনা করার অনুমতি দিই এবং তারপরে এটি পুনরায় সেট করি।

if (tot_overflow> = 12) // না থাকলে চেক করুন। overflows = 12 নোট: '> =' ব্যবহার করা হয়

{যদি (TCNT0> = 53) // টাইমার গণনা 53 তে পৌঁছায় কিনা তা পরীক্ষা করুন {PORTB ^= (1 << 0); // নেতৃত্বাধীন TCNT0 = 0 টগল করে; // রিসেট কাউন্টার tot_overflow = 0; // ওভারফ্লো কাউন্টার রিসেট করুন}}}}

মাইক্রোকন্ট্রোলার ফ্ল্যাশ মেমরিতে HEX ফাইল আপলোড করা হচ্ছে:

ডস প্রম্পট উইন্ডোতে টাইপ করুন কমান্ড:

avrdude –c [প্রোগ্রামারের নাম] mp m328p –u –U ফ্ল্যাশ: w: [আপনার হেক্স ফাইলের নাম] আমার ক্ষেত্রে এটি হল: avrdude –c ISPProgv1 –p m328p –u –U ফ্ল্যাশ: w: Timers.hex

এই কমান্ডটি মাইক্রোকন্ট্রোলারের স্মৃতিতে হেক্স ফাইল লিখে। মাইক্রোকন্ট্রোলার ফ্ল্যাশ মেমরি বার্নের বিস্তারিত বিবরণ সহ ভিডিওটি দেখুন:

মাইক্রোকন্ট্রোলার ফ্ল্যাশ মেমরি জ্বলছে …

ঠিক আছে! এখন, মাইক্রোকন্ট্রোলার আমাদের প্রোগ্রামের নির্দেশনা অনুযায়ী কাজ করে। আসুন এটি পরীক্ষা করে দেখি!

ধাপ 6: বৈদ্যুতিক সার্কিট তৈরি করা

বৈদ্যুতিক সার্কিট তৈরি করা
বৈদ্যুতিক সার্কিট তৈরি করা
বৈদ্যুতিক সার্কিট তৈরি করা
বৈদ্যুতিক সার্কিট তৈরি করা
বৈদ্যুতিক সার্কিট তৈরি করা
বৈদ্যুতিক সার্কিট তৈরি করা

পরিকল্পিত ডায়াগ্রাম অনুসারে উপাদানগুলি সংযুক্ত করুন।

প্রস্তাবিত: