Atmega8 মাইক্রোকন্ট্রোলার। নতুনদের জন্য Atmega8 প্রোগ্রামিং

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

অতএব, এই নিবন্ধে আমরা স্পর্শ করব, বিশেষত, মাইক্রোকন্ট্রোলারগুলি ব্যবহার করার বিষয়গুলি, সেইসাথে তাদের সরাসরি ব্যবহারের জন্য যে সমস্ত মিশনগুলি প্রতিদিন আমাদের মুখোমুখি হয়। আসুন এই ডিভাইসটির মান কী এবং অনুশীলনে এটি ব্যবহার করা কতটা সহজ তা বের করা যাক।

একটি মাইক্রোকন্ট্রোলার হল একটি চিপ যার উদ্দেশ্য বৈদ্যুতিক ডিভাইসগুলি নিয়ন্ত্রণ করা। ক্লাসিক কন্ট্রোলার একটি চিপে প্রসেসর এবং রিমোট ডিভাইসের অপারেশন উভয়কে একত্রিত করে এবং একটি র্যান্ডম অ্যাক্সেস মেমরি ডিভাইস অন্তর্ভুক্ত করে। সাধারণভাবে, এটি একটি একক-চিপ ব্যক্তিগত কম্পিউটার যা তুলনামূলকভাবে সাধারণ কাজ সম্পাদন করতে পারে।

একটি মাইক্রোপ্রসেসর এবং একটি মাইক্রোকন্ট্রোলারের মধ্যে পার্থক্য হল স্টার্ট-স্টপ ডিভাইস, টাইমার এবং প্রসেসর চিপে তৈরি অন্যান্য দূরবর্তী কাঠামোর উপস্থিতি। একটি একক সেটের পরিবর্তে একটি মনোসার্কিটের উপর নির্মিত ব্যাপক ক্ষমতা সহ একটি মোটামুটি শক্তিশালী কম্পিউটিং যন্ত্রপাতির বর্তমান নিয়ামকের ব্যবহার, এর ভিত্তিতে তৈরি ডিভাইসগুলির স্কেল, খরচ এবং দাম উল্লেখযোগ্যভাবে হ্রাস করে।

এটি অনুসরণ করে যে এই ধরনের একটি ডিভাইস কম্পিউটিং প্রযুক্তিতে ব্যবহার করা যেতে পারে, যেমন একটি ক্যালকুলেটর, মাদারবোর্ড, সিডি কন্ট্রোলার। এগুলি বৈদ্যুতিক গৃহস্থালীর যন্ত্রপাতিগুলিতেও ব্যবহৃত হয় - মাইক্রোওয়েভ, ওয়াশিং মেশিন এবং আরও অনেকগুলি। মাইক্রোকন্ট্রোলারগুলি ইন্ডাস্ট্রিয়াল মেকানিক্সেও ব্যাপকভাবে ব্যবহৃত হয়, মাইক্রোরেলে থেকে মেশিন টুল কন্ট্রোল কৌশল পর্যন্ত।

AVR মাইক্রোকন্ট্রোলার

AVR-এর মতো আধুনিক প্রযুক্তির জগতে আরও সাধারণ এবং সুপ্রতিষ্ঠিত নিয়ামকের সাথে পরিচিত হই। এটিতে একটি উচ্চ-গতির RISC মাইক্রোপ্রসেসর, 2 ধরনের শক্তি-সাশ্রয়ী মেমরি (ফ্ল্যাশ প্রজেক্ট ক্যাশে এবং EEPROM তথ্য ক্যাশে), একটি RAM-টাইপ অপারেশনাল ক্যাশে, I/O পোর্ট এবং বিভিন্ন রিমোট ইন্টারফেস স্ট্রাকচার রয়েছে।

  • অপারেটিং তাপমাত্রা -55 থেকে +125 ডিগ্রি সেলসিয়াস পর্যন্ত;
  • স্টোরেজ তাপমাত্রা -60 থেকে +150 ডিগ্রি;
  • রিসেট পিনে সর্বোচ্চ ভোল্টেজ, GND অনুযায়ী: সর্বোচ্চ 13 V;
  • সর্বোচ্চ সরবরাহ ভোল্টেজ: 6.0 V;
  • ইনপুট/আউটপুট লাইনের সর্বাধিক বৈদ্যুতিক প্রবাহ: 40 mA;
  • পাওয়ার সাপ্লাই লাইন VCC এবং GND-এ সর্বাধিক কারেন্ট: 200 mA।

AVR মাইক্রোকন্ট্রোলার ক্ষমতা

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

দ্বিতীয় প্রজন্মের AVR মাইক্রোকন্ট্রোলারের জন্য ক্যাশে সেন্সাস বিপ্লবের প্রতিশ্রুত সংখ্যা 11 হাজার বিপ্লব, যখন বিপ্লবের মানক সংখ্যা 100 হাজার।

AVR-এর ইনপুট এবং আউটপুট পোর্টগুলির কাঠামোর কনফিগারেশনটি নিম্নরূপ: শারীরবৃত্তীয় আউটপুটটির উদ্দেশ্য হল তিনটি বিট নিয়ন্ত্রণ, এবং দুটি নয়, যেমন সুপরিচিত বিট কন্ট্রোলার (ইন্টেল, মাইক্রোচিপ, মটোরোলা, ইত্যাদি)। ) এই বৈশিষ্ট্যটি সুরক্ষার উদ্দেশ্যে মেমরিতে একটি ডুপ্লিকেট পোর্ট কম্পোনেন্ট থাকার প্রয়োজনীয়তা দূর করে, এবং বাইরের যন্ত্রগুলির সাথে একত্রে মাইক্রোকন্ট্রোলারের শক্তি দক্ষতাকেও গতি বাড়িয়ে দেয়, যেমন, বাইরে সম্পর্কিত বৈদ্যুতিক সমস্যাগুলির ক্ষেত্রে।

সমস্ত AVR মাইক্রোকন্ট্রোলার বহু-স্তরযুক্ত দমন প্রযুক্তি বৈশিষ্ট্যযুক্ত। এটি একটি অগ্রাধিকার এবং নির্দিষ্ট ইভেন্ট দ্বারা নির্ধারিত লক্ষ্য অর্জনের জন্য রাশিফায়ারের প্রমিত প্রবাহকে বাধাগ্রস্ত করে বলে মনে হচ্ছে। একটি নির্দিষ্ট ক্ষেত্রে একটি সাসপেনশন অনুরোধ রূপান্তর করার জন্য একটি রুটিন আছে, এবং এটি প্রকল্প মেমরিতে অবস্থিত।

যখন একটি সমস্যা দেখা দেয় যা একটি শাটডাউন ট্রিগার করে, তখন মাইক্রোকন্ট্রোলার কম্পোনেন্ট অ্যাডজাস্টমেন্ট কাউন্টারগুলিকে সংরক্ষণ করে, সাধারণ প্রসেসরকে এই প্রোগ্রামটি কার্যকর করা থেকে বিরত করে এবং শাটডাউন প্রক্রিয়াকরণ রুটিনটি কার্যকর করা শুরু করে। সম্পাদনের শেষে, সাসপেনশন প্রোগ্রামের পৃষ্ঠপোষকতায়, পূর্বে সংরক্ষিত প্রোগ্রাম কাউন্টারটি পুনরায় চালু করা হয় এবং প্রসেসর অসমাপ্ত প্রকল্পটি কার্যকর করতে থাকে।

AVR মাইক্রোকন্ট্রোলারের উপর ভিত্তি করে কারুশিল্প

AVR মাইক্রোকন্ট্রোলার ব্যবহার করে DIY কারুকাজগুলি তাদের সরলতা এবং কম শক্তি খরচের কারণে আরও জনপ্রিয় হয়ে উঠছে। এগুলি কী এবং কীভাবে আপনার নিজের হাত এবং মন ব্যবহার করে সেগুলি তৈরি করবেন, নীচে দেখুন।

"পরিচালক"

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

সার্কিটটি 11.0598 MHz এ একটি বহিরাগত কোয়ার্টজ রেজোনেটর থেকে ক্লক করা একটি AVR মাইক্রোকন্ট্রোলারের ভিত্তিতে তৈরি করা হয়েছে। U-blox থেকে NEO-6M GPS এর সাথে কাজ করার জন্য দায়ী। এটি, যদিও সেকেলে, একটি সুপরিচিত এবং বাজেট মডিউল যার অবস্থান নির্ণয় করার মোটামুটি স্পষ্ট ক্ষমতা রয়েছে৷ তথ্য Nokia 5670 এর স্ক্রিনে ফোকাস করা হয়েছে। মডেলটিতে একটি HMC5883L ম্যাগনেটিক ওয়েভ মিটার এবং একটি ADXL335 অ্যাক্সিলোমিটারও রয়েছে।


মোশন সেন্সর সহ ওয়্যারলেস অ্যালার্ম সিস্টেম

একটি দরকারী ডিভাইস যা একটি মুভমেন্ট ডিভাইস এবং দেওয়ার ক্ষমতা অন্তর্ভুক্ত করে, একটি রেডিও চ্যানেল অনুসারে, এটি ট্রিগার করা হয়েছে এমন একটি চিহ্ন। নকশা চলমান এবং একটি ব্যাটারি বা ব্যাটারি ব্যবহার করে চার্জ করা হয়. এটি তৈরি করতে, আপনার বেশ কয়েকটি HC-12 রেডিও মডিউল, সেইসাথে একটি HC-SR501 মোশন সেন্সর থাকতে হবে।

HC-SR501 মোশন ডিভাইসটি 4.5 থেকে 20 ভোল্টের সরবরাহ ভোল্টেজের সাথে কাজ করে। এবং একটি LI-Ion ব্যাটারি থেকে সর্বোত্তম অপারেশনের জন্য, আপনাকে পাওয়ার ইনপুটে সুরক্ষা LED এর চারপাশে যেতে হবে এবং লিনিয়ার স্টেবিলাইজার 7133 (2য় এবং 3য় পা) এর অ্যাক্সেস এবং আউটপুট বন্ধ করতে হবে। এই পদ্ধতিগুলি সম্পন্ন করার পরে, ডিভাইসটি 3 থেকে 6 ভোল্টের ভোল্টেজে ধ্রুবক অপারেশন শুরু করে।


মনোযোগ: HC-12 রেডিও মডিউলের সাথে একত্রে কাজ করার সময়, সেন্সরটি কখনও কখনও মিথ্যাভাবে ট্রিগার করে। এটি এড়াতে, ট্রান্সমিটারের শক্তি 2 গুণ কমাতে হবে (কমান্ড AT+P4)। সেন্সরটি তেলে চলে এবং 700 mAh ক্ষমতার একটি চার্জযুক্ত ব্যাটারি এক বছরেরও বেশি সময় ধরে চলবে।

মিনিটারমিনাল

ডিভাইসটি একটি দুর্দান্ত সহকারী হিসাবে প্রমাণিত হয়েছিল। একটি AVR মাইক্রোকন্ট্রোলার সহ একটি বোর্ড ডিভাইস তৈরির জন্য ভিত্তি হিসাবে প্রয়োজন। স্ক্রিনটি সরাসরি কন্ট্রোলারের সাথে সংযুক্ত থাকার কারণে, পাওয়ার সাপ্লাই 3.3 ভোল্টের বেশি হওয়া উচিত নয়, যেহেতু বেশি সংখ্যা ডিভাইসে সমস্যা সৃষ্টি করতে পারে।


আপনার LM2577 এর উপর ভিত্তি করে একটি রূপান্তরকারী মডিউল নেওয়া উচিত এবং ভিত্তিটি 2500 mAh এর ক্ষমতা সহ একটি Li-Ion ব্যাটারি হতে পারে। একটি দরকারী প্যাকেজ থাকবে যা সমগ্র অপারেটিং ভোল্টেজ পরিসীমা জুড়ে একটি ধ্রুবক 3.3 ভোল্ট সরবরাহ করে। চার্জ করার উদ্দেশ্যে, TP4056 চিপের উপর ভিত্তি করে একটি মডিউল ব্যবহার করুন, যা বাজেট-বান্ধব এবং মোটামুটি উচ্চ মানের বলে বিবেচিত হয়। স্ক্রিন জ্বলার ঝুঁকি ছাড়াই মিনিটারমিনালকে 5-ভোল্ট মেকানিজমের সাথে সংযোগ করতে সক্ষম হওয়ার জন্য, আপনাকে অবশ্যই UART পোর্ট ব্যবহার করতে হবে।

AVR মাইক্রোকন্ট্রোলার প্রোগ্রামিং এর প্রাথমিক দিক

মাইক্রোকন্ট্রোলার কোডিং প্রায়শই সমাবেশ বা SI স্টাইলে করা হয়, তবে, আপনি অন্যান্য Forth বা BASIC ভাষাও ব্যবহার করতে পারেন। সুতরাং, কন্ট্রোলারের প্রোগ্রামিং নিয়ে গবেষণা শুরু করার জন্য, আপনাকে নিম্নলিখিত উপাদানগুলির সেট সহ সজ্জিত করা উচিত: একটি মাইক্রোকন্ট্রোলার, তিন টুকরা পরিমাণে - ATmega8A-PU, ATtiny2313A-PU এবং ATtiny13A-PU অত্যন্ত জনপ্রিয় বলে বিবেচিত হয় এবং কার্যকর।

একটি মাইক্রোকন্ট্রোলারে একটি প্রোগ্রাম বাস্তবায়ন করার জন্য, আপনার একটি প্রোগ্রামার প্রয়োজন: USBASP প্রোগ্রামারকে সেরা হিসাবে বিবেচনা করা হয়, যা 5 ভোল্টের ভোল্টেজ প্রদান করে, যা ভবিষ্যতে ব্যবহার করা হবে। প্রকল্পের ফলাফলের চাক্ষুষ মূল্যায়ন এবং উপসংহারের উদ্দেশ্যে, ডেটা প্রতিফলন সংস্থানগুলির প্রয়োজন - এগুলি হল এলইডি, একটি এলইডি সূচনাকারী এবং একটি পর্দা।


অন্যান্য ডিভাইসের সাথে মাইক্রোকন্ট্রোলারের যোগাযোগ পদ্ধতি অধ্যয়ন করতে, আপনার একটি DS18B20 ডিজিটাল তাপমাত্রা ডিভাইস এবং একটি DS1307 ঘড়ি প্রয়োজন যা সঠিক সময় দেখায়। ট্রানজিস্টর, প্রতিরোধক, কোয়ার্টজ রেজোনেটর, ক্যাপাসিটর এবং বোতাম থাকাও গুরুত্বপূর্ণ।

সিস্টেমগুলি ইনস্টল করার জন্য, আপনাকে একটি নমুনা মাউন্টিং বোর্ডের প্রয়োজন হবে। একটি মাইক্রোকন্ট্রোলারে একটি নকশা তৈরি করতে, আপনার সোল্ডারিং ছাড়াই সমাবেশের জন্য একটি ব্রেডবোর্ড এবং এটির জন্য জাম্পারগুলির একটি সেট ব্যবহার করা উচিত: একটি নমুনা বোর্ড MB102 এবং বিভিন্ন ধরণের ব্রেডবোর্ডের সাথে জাম্পার সংযুক্ত করা - ইলাস্টিক এবং অনমনীয়, সেইসাথে ইউ-আকৃতির। মাইক্রোকন্ট্রোলারগুলি ইউএসবিএএসপি প্রোগ্রামার ব্যবহার করে কোড করা হয়।

AVR মাইক্রোকন্ট্রোলারের উপর ভিত্তি করে সবচেয়ে সহজ ডিভাইস। উদাহরণ

সুতরাং, AVR মাইক্রোকন্ট্রোলারগুলি কী এবং তাদের প্রোগ্রামিং সিস্টেমের সাথে পরিচিত হওয়ার পরে, আসুন সবচেয়ে সহজ ডিভাইসটি বিবেচনা করি যার জন্য এই নিয়ামকটি ভিত্তি হিসাবে কাজ করে। লো-ভোল্টেজ বৈদ্যুতিক মোটরের ড্রাইভারের উদাহরণ দেওয়া যাক। এই ডিভাইসটি একই সময়ে দুটি দুর্বল ক্রমাগত বৈদ্যুতিক মোটর নিয়ন্ত্রণ করা সম্ভব করে তোলে।

সর্বাধিক সম্ভাব্য বৈদ্যুতিক প্রবাহ যা দিয়ে একটি প্রোগ্রাম লোড করা যেতে পারে প্রতি চ্যানেলে 2 A, এবং মোটরগুলির সর্বাধিক শক্তি 20 W। বোর্ডে বৈদ্যুতিক মোটর সংযোগের জন্য দুই-টার্মিনাল ব্লকের একটি জোড়া এবং পরিবর্ধিত ভোল্টেজ সরবরাহের জন্য একটি তিন-টার্মিনাল ব্লক রয়েছে।

ডিভাইসটি 43 x 43 মিমি পরিমাপের একটি প্রিন্টেড সার্কিট বোর্ডের মতো দেখাচ্ছে এবং এটিতে একটি রেডিয়েটর মিনিসার্কিট তৈরি করা হয়েছে, যার উচ্চতা 24 মিলিমিটার এবং ওজন 25 গ্রাম। লোড ম্যানিপুলেশনের উদ্দেশ্যে, ড্রাইভার বোর্ডে প্রায় ছয়টি ইনপুট রয়েছে।

উপসংহার

উপসংহারে, AVR মাইক্রোকন্ট্রোলার একটি দরকারী এবং মূল্যবান টুল, বিশেষ করে টিঙ্কারদের জন্য। এবং এগুলি সঠিকভাবে ব্যবহার করে, প্রোগ্রামিংয়ের নিয়ম এবং সুপারিশগুলি মেনে চলার মাধ্যমে, আপনি কেবল দৈনন্দিন জীবনেই নয়, পেশাদার ক্রিয়াকলাপে এবং কেবল দৈনন্দিন জীবনেও একটি দরকারী জিনিস সহজেই অর্জন করতে পারেন।

মাইক্রোকন্ট্রোলার সার্কিট, গাড়ির জন্য ফার্মওয়্যার এবং ফটোগ্রাফ সহ নিবন্ধ এবং বিবরণ।

ATmega8 মাইক্রোকন্ট্রোলারে একটি সাধারণ ট্যাকোমিটার

ঘূর্ণন করতে সক্ষম যে কোনও অংশের ঘূর্ণন গতি পরিমাপ করতে গাড়িগুলিতে একটি ট্যাকোমিটার ব্যবহার করা হয়। এই জাতীয় ডিভাইসগুলির জন্য অনেকগুলি বিকল্প রয়েছে, আমি AVR মাইক্রোকন্ট্রোলার ATmega8 এ একটি বিকল্প অফার করব। আমার বিকল্পের জন্য, আপনিও...

সম্পূর্ণ পড়ুন

গাড়ির Attiny45 মাইক্রোকন্ট্রোলারে রঙিন সঙ্গীত

এই রঙিন সঙ্গীত, একটি ছোট আকার এবং 12V পাওয়ার সাপ্লাই সহ, বিকল্পভাবে যে কোনও ইভেন্টের জন্য একটি গাড়িতে ব্যবহার করা যেতে পারে। এই ডায়াগ্রামের প্রাথমিক উৎস হল রেডিও নং 5, 2013 এ. ল্যাপটেভ, জায়ারিয়ানভস্ক, কাজাখস্তান। পরিকল্পনা…

সম্পূর্ণ পড়ুন

উত্তপ্ত আয়না এবং পিছনের উইন্ডো কন্ট্রোলার

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

সম্পূর্ণ পড়ুন

গাড়ী বাতি জন্য dimmer

প্রায় সমস্ত গাড়ির অভ্যন্তরীণ আলো নিয়ন্ত্রণ থাকে, যা একটি অন-বোর্ড কম্পিউটার বা একটি পৃথক অন-বোর্ড সিস্টেম ব্যবহার করে করা হয়। আলো মসৃণভাবে জ্বলে এবং একটি নির্দিষ্ট বিলম্বের সাথে নিভে যায় (এর জন্য...

সম্পূর্ণ পড়ুন

মোবাইল ফোন বিজ্ঞপ্তি সহ জিএসএম অ্যালার্ম

আমি ATmega8 মাইক্রোকন্ট্রোলারের উপর ভিত্তি করে একটি খুব জনপ্রিয় কার অ্যালার্ম সার্কিট উপস্থাপন করছি। এই ধরনের অ্যালার্ম প্রশাসকের মোবাইল ফোনে কল বা এসএমএস আকারে একটি সতর্কতা দেয়। ডিভাইসটি ব্যবহার করে একটি মোবাইল ফোনের সাথে একীভূত হয়...

সম্পূর্ণ পড়ুন

মাইক্রোকন্ট্রোলারে স্টপাক জ্বলছে

আমি ব্লিঙ্কিং স্টপাকের একটি নতুন সংস্করণ তৈরি করেছি। অপারেটিং অ্যালগরিদম এবং নিয়ন্ত্রণ সার্কিট ভিন্ন, আকার এবং সংযোগ একই। ব্লিঙ্কিং এর ফ্রিকোয়েন্সি সামঞ্জস্য করা সম্ভব, একটি ধ্রুবক আভাতে স্যুইচ করার আগে সময়কাল এবং ডিউটি ​​চক্র...

সম্পূর্ণ পড়ুন

ডিআরএল প্লাস স্ট্রোব

এই নৈপুণ্য আপনাকে LED DRLs স্ট্রোব করতে দেয়। কারুকাজটি আকারে ছোট, শুধুমাত্র একটি বোতাম দিয়ে নিয়ন্ত্রিত হয় এবং এতে বিস্তৃত কাস্টমাইজেশন বিকল্প রয়েছে। বোর্ডের আকার 30 বাই 19 মিলিমিটার। বিপরীত দিকে একটি টার্মিনাল ব্লক আছে ...

সম্পূর্ণ পড়ুন

আমরা অ্যালার্ম সিস্টেমের কাছাকাছি দরজাটি তৈরি করি এবং সংযুক্ত করি

স্বয়ংক্রিয় জানালা সহ গাড়ির সংখ্যা ক্রমাগত বাড়ছে, এবং গাড়িতে একটি না থাকলেও, অনেকে এটি নিজেরাই তৈরি করে। আমার লক্ষ্য ছিল এই ধরনের একটি ডিভাইস একত্রিত করা এবং এটিকে সংযুক্ত করা...

সম্পূর্ণ পড়ুন

গতির উপর ভিত্তি করে এলইডি চালু হয়

এটি একটি "উপাদান" হিসাবে প্রমাণিত হয়েছিল: 5x7 ম্যাট্রিক্সে গিয়ারগুলি প্রদর্শনের প্রকল্পের জন্য গতি সেন্সরের অপারেটিং মোডটি পরীক্ষা করা প্রয়োজন ছিল, এর জন্য আমি একটি ছোট সার্কিট একত্রিত করেছি। সার্কিট নির্ভর করে LEDs চালু করতে পারে...

সম্পূর্ণ পড়ুন

AVR মাইক্রোকন্ট্রোলারে ডিজিটাল ট্যাকোমিটার (ATtiny2313)

ট্যাকোমিটার গাড়ির অংশ, প্রক্রিয়া এবং অন্যান্য উপাদানগুলির ঘূর্ণন গতি পরিমাপ করে। টেকোমিটার 2টি প্রধান অংশ নিয়ে গঠিত - একটি সেন্সর যা ঘূর্ণন গতি পরিমাপ করে এবং একটি প্রদর্শন যেখানে...

সম্পূর্ণ পড়ুন

ATmega8 মাইক্রোকন্ট্রোলারে সাধারণ ডিজিটাল স্পিডোমিটার

একটি স্পিডোমিটার একটি গাড়ির গতি নির্ধারণের জন্য একটি পরিমাপক যন্ত্র। পরিমাপ পদ্ধতি অনুসারে, বিভিন্ন ধরণের স্পিডোমিটার রয়েছে: সেন্ট্রিফিউগাল, ক্রোনোমেট্রিক, কম্পন, ইন্ডাকশন, ইলেক্ট্রোম্যাগনেটিক, ইলেকট্রনিক এবং অবশেষে জিপিএস স্পিডোমিটার।

সম্পূর্ণ পড়ুন

মাইক্রোকন্ট্রোলারে পরিপাটি এর মসৃণ ইগনিশন

এই সংস্করণটির একটি সামান্য ভিন্ন বিন্যাস রয়েছে: একটি দ্বিতীয় সেটিং বোতাম যোগ করা হয়েছে এবং ইগনিশন গতির পোটেনটিওমিটার সরানো হয়েছে। বৈশিষ্ট্য: দুটি পৃথক স্বাধীন চ্যানেল। প্রতিটি চ্যানেলের জন্য সামঞ্জস্যযোগ্য পরামিতিগুলির তিনটি গ্রুপ রয়েছে: শুরুর আগে বিলম্বের সময়...

ATMega8-এ প্রকল্প।

সহজতম এবং সবচেয়ে জনপ্রিয় মাইক্রোকন্ট্রোলারগুলির একটি অধ্যয়ন করার জন্য সহজ প্রকল্পগুলি।

কাজ করার জন্য আপনার কমপক্ষে CodeVision AVR2.04.4a এবং Proteus 7.2 SP6 লাগবে। আপনি যদি হার্ডওয়্যার নিয়ে কাজ করতে চান তবে আপনার একজন প্রোগ্রামারও লাগবে। আমি এটি সুপারিশ করছি - এটি একত্রিত করা সহজ এবং ভাল কাজ করে। প্রাথমিক ATMega8 ফার্মওয়্যারের সাথে একমাত্র সমস্যা, এটি LPT পোর্ট - 5-provodov-avr-এর মাধ্যমে করা যেতে পারে বা আপনি একটি "হার্ডওয়্যারড" মাইক্রোকন্ট্রোলার কিনতে পারেন, আমি এটি নিয়েছি।


ট্রাফিক লাইট নং 1।

এক দিক থেকে সহজ ট্রাফিক লাইট তৈরি করতে অনেক প্রচেষ্টা এবং দক্ষতার প্রয়োজন হয় না। সার্কিট কয়েক মিনিটের মধ্যে একত্রিত হয়। ব্যবহৃত এলইডির উপর ভিত্তি করে প্রতিরোধক নির্বাচন করা হয় (470 ওহম রেটিং "সোভিয়েত" AL307 এর জন্য নির্দেশিত), এটি লক্ষ করা উচিত যে ডায়াগ্রামে AVCC পিনটি পাওয়ার সাপ্লাইয়ের সাথে সংযুক্ত আছে, যদি এটি একটি বাস্তব মাইক্রোকন্ট্রোলারের সাথে সংযুক্ত না থাকে, বিল্ট-ইন ADC (অ্যানালগ-টু-ডিজিটাল কনভার্টার) ব্যবহার করা যাই হোক না কেন, তাহলে আপনি মাইক্রোসার্কিটের ক্ষতি করতে পারেন (যেকোন মেগা সিরিজ কন্ট্রোলারের জন্য সত্য)!!!

সোর্স কোড এত সহজ যে আমি এটি এখানে উপস্থাপন করব। আমি ইন্টারনেটে C এর জন্য এই কোডটি খুঁজে পেয়েছি এবং এটিকে কিছুটা সংশোধন করেছি, তবে, যে কোনও প্রোগ্রামার আপনাকে বলবে যে এই কোডটি বোকা (পরে আমি এই জাতীয় প্রোগ্রামগুলি কীভাবে লিখতে হয় তা বর্ণনা করব), তবে এটি সহজ, চাক্ষুষ এবং কার্যকর।

চিপের ধরন: ATmega8
প্রোগ্রামের ধরন: আবেদন

মেমরি মডেল: ছোট
ডেটা স্ট্যাকের আকার: 256


#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

অকার্যকর প্রধান (অকার্যকর)
{
// পোর্ট বি আরম্ভ
PORTB=0x00;
DDRB=0x00;

// পোর্ট সি আরম্ভ
PORTC=0x00;
DDRC=0x00;

// পোর্ট ডি আরম্ভ
PORTD=0x00;
DDRD=0x07;

// এক্সটার্নাল ইন্টারাপ্ট(গুলি) ইনিশিয়ালাইজেশন
// INT0: বন্ধ
// INT1: বন্ধ
MCUCR=0x00;


// এনালগ তুলনাকারী: বন্ধ

ACSR=0x80;
SFIOR=0x00;

যখন (1) (

PORTD.2=1; //সবুজ আলো
delay_ms(8000); // 8 সেকেন্ডের জন্য আলো


delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন


PORTD.2=0; //সবুজ বন্ধ করুন

PORTD.2=1; //সবুজ চালু করুন

/*delay_ms(500);//অর্ধেক সেকেন্ড অপেক্ষা করুন
PORTD.2=0; //সবুজ বন্ধ করুন
delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন
PORTD.2=1; //সবুজ চালু করুন
delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন*/

PORTD.1=1; //হলুদ চালু করুন
PORTD.2=0; //সবুজ বন্ধ করুন
delay_ms(3000); //3 সেকেন্ড অপেক্ষা করুন

PORTD.0=1; //লাল চালু করুন
PORTD.1=0; //হলুদ বন্ধ করুন
delay_ms(9000); //9 সেকেন্ডের জন্য

PORTD.1=1; //হলুদ থেকে লাল করুন
delay_ms(3000); //3 সেকেন্ড অপেক্ষা করুন
PORTD.0=0; //লাল বন্ধ করুন
PORTD.1=0; // এবং হলুদ
};
}

কোডটি আরও একটু সংক্ষিপ্ত করা যেতে পারে যদি আমরা বিবেচনা করি যে ডিফল্টভাবে প্রায় সমস্ত ATMega8 পোর্ট এবং রেজিস্টার 0-তে আরম্ভ করা হয়েছে। এখন নতুনদের জন্য, কিছু ব্যাখ্যা:

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

এগুলি তথাকথিত হেডার ফাইল; পদ্ধতিগুলি তাদের মধ্যে লেখা আছে যা আমরা অন্যান্য ফাইল থেকে প্রয়োগ করব। উদাহরণস্বরূপ, পদ্ধতি delay_ms(X), যা মিলিসেকেন্ডে বিলম্ব নির্ধারণ করে, অন্য একজন লিখেছিলেন এবং ফাইল delay.c-এ রয়েছে (আসলে, সবকিছু ঠিক সেরকম নাও হতে পারে, বা একেবারেই না - পদ্ধতি *. obj, *.asm) ধরনের একটি অবজেক্ট ফাইল থাকতে পারে এবং এর ব্যবহারের নিয়মগুলি delay.h ফাইলে বর্ণিত আছে, যা আমরা অন্তর্ভুক্ত করি।

PORTB=0x00;
DDRB=0x00;

কন্ট্রোলার পোর্ট রেজিস্টারগুলি নির্দেশ করে সংরক্ষিত নামগুলি (এর পিনগুলি বাইট দ্বারা গোষ্ঠীভুক্ত - 8 প্রতিটি, পোর্ট রেজিস্টারের প্রতিটি বিট তার নিজস্ব পিনের সাথে মিলে যায়) এবং পোর্ট এক্সচেঞ্জ ডিরেকশন রেজিস্টার (0-ইনপুট, 1-আউটপুট)

উদাহরণস্বরূপ, DDRB.5=1 লেখার অর্থ হল কন্ট্রোলারের PB5 পিনটি আউটপুটের জন্য কনফিগার করা হয়েছে এবং PORTB.5=0 বা =1 লেখার সময় এই পিনে আমরা 0 (0...0.8 ভোল্ট) বা 1 পাই। (4...5 ভোল্ট)। অবশ্যই, আপনি অবিলম্বে পুরো মানটি পোর্টে বরাদ্দ করতে পারেন: PORTB=0xFF, অর্থাৎ PB পোর্টের সমস্ত পিন হল 1।

while(1) (অভিব্যক্তি);

একটি অসীম লুপ কারণ 1=TRUE।

ট্রাফিক লাইট নং 2।


দুই দিকে ট্রাফিক লাইট পেতে, আপনাকে ট্রাফিক লাইট ডায়াগ্রাম নং 1 পরিবর্তন করতে হবে:


এবং ট্রাফিক লাইট কোড নং 1:

/*****************************************************
চিপের ধরন: ATmega8
প্রোগ্রামের ধরন: আবেদন
AVR কোর ক্লক ফ্রিকোয়েন্সি: 1.000000 MHz
মেমরি মডেল: ছোট
বাহ্যিক RAM আকার: 0
ডেটা স্ট্যাকের আকার: 256
*****************************************************/

#অন্তর্ভুক্ত
#অন্তর্ভুক্ত

অকার্যকর প্রধান (অকার্যকর)
{
// পোর্ট বি আরম্ভ
PORTB=0x00;
DDRB=0x00;

// পোর্ট সি আরম্ভ
PORTC=0x00;
DDRC=0x00;

// পোর্ট ডি আরম্ভ
PORTD=0x00;
DDRD=0b00111111;

ACSR=0x80;
SFIOR=0x00;

যখন (1)
{
PORTD.2=1; //সবুজ 1 লাইট আপ Z1
PORTD.3=1; // লাল 2 লাইট আপ K2
delay_ms(8000); //সবুজ1 8 সেকেন্ডের জন্য আলো জ্বলে

PORTD.2=0; // সবুজ1 ZM1 বন্ধ করুন
delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন

delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন

delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন
PORTD.2=1; //সবুজ1 চালু করুন
delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন

PORTD.1=1; //অরেঞ্জ1 J1 K2+J2 চালু করুন
PORTD.4=1; // কমলা2 চালু করুন
PORTD.2=0; // সবুজ1 বন্ধ করুন


PORTD.0=1; //লাল 1 কে 1 চালু করুন
PORTD.5=1; //সবুজ2 Z2 চালু করুন
PORTD.1=0; // কমলা1 বন্ধ করুন
PORTD.4=0; // কমলা 2 বন্ধ করুন
PORTD.3=0; //লাল 2 বন্ধ করুন
delay_ms(8000); //8 সেকেন্ড অপেক্ষা করুন

PORTD.5=0; // Green2 ZM2 বন্ধ করুন
delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন

delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন

delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন
PORTD.5=1; //সবুজ 2 চালু করুন
delay_ms(500); //অর্ধেক সেকেন্ড অপেক্ষা করুন

PORTD.1=1; //কমলা 1 থেকে লাল 1 K1+J1 চালু করুন
PORTD.4=1; // orange2 J2 চালু করুন
PORTD.5=0; // সবুজ 2 বন্ধ করুন
delay_ms(2000); // 2 সেকেন্ড অপেক্ষা করুন
PORTD.0=0; //লাল 1 বন্ধ করুন
PORTD.1=0; // এবং কমলা ১
PORTD.4=0; // এবং কমলা2
};
}

কোড মন্তব্য:

DDRD=0b00111111; //0b(b7)(b6)(b5)(b4)(b3)(b2)(b1)(b0)

ডানদিকে একটি সংখ্যার একটি বিট (বাইনারী) উপস্থাপনা যেখানে সবচেয়ে উল্লেখযোগ্য সংখ্যাটি বাম দিকে রয়েছে; এটি দশমিক (DDRD=63;) বা হেক্সাডেসিমেল (DDRD=0x3F;) এও লেখা যেতে পারে।

অকার্যকর প্রধান (অকার্যকর)

Main হল প্রধান পদ্ধতি, এটি দিয়েই প্রোগ্রামের এক্সিকিউশন শুরু হয়, void মানে আক্ষরিক অর্থে কিছুই নয় (শূন্য টাইপ), void এর পরিবর্তে আপনি int, long; float, double ইত্যাদি (এবং এমনকি অন্য ভেরিয়েবলের একটি পয়েন্টার, যা পরে আলোচনা করা হবে)। অধিকন্তু, প্রথম অবস্থানে কিছু টাইপ দিয়ে void প্রতিস্থাপনের অর্থ হল এই নির্মাণ একটি ফাংশন, একটি পদ্ধতি নয় এবং একটি মান ফেরত দিতে পারে, যেমন এটা শব্দ সঙ্গে ভিতরে সম্পূরক করা আবশ্যক ফিরে.

int fun(অকার্যকর) (
int a=10;
ফেরত (ক);
}

সমস্ত পরিবর্তন কাজের চিত্র অনুসারে করা হয়েছিল:


একটি ফ্ল্যাশিং সবুজ সংকেত সহ দুই দিকে ট্রাফিক লাইটের অপারেশনের চিত্র। এই চিত্রটিও ইন্টারনেট থেকে নেওয়া হয়েছে, এবং আমার মতে: আরও জ্বলজ্বল করা সবুজ সংকেত থাকা উচিত।



ট্রাফিক লাইট নং 3।


উদাহরণ নং 1 এবং নং 2 কোডের কিছুটা "সরল" ব্যবহার নির্দেশ করেছে, যা ছোট প্রোগ্রামগুলির জন্য গ্রহণযোগ্য, কিন্তু বড় অ্যাপ্লিকেশনগুলিতে সম্পদের অপচয়ের কারণে ব্যবহার করা যাবে না।
প্রযুক্তিগত অ্যাপ্লিকেশনগুলিতে কোড সহজ এবং ছোট করার জন্য, প্রোগ্রামাররা সাধারণত অটোমেটা ব্যবহার করে। অটোমেটন প্রক্রিয়াটির একটি সরলীকৃত এবং পর্যাপ্ত মডেল। উদাহরণস্বরূপ, একটি ট্র্যাফিক লাইটের সম্পূর্ণ ক্রিয়াকলাপকে একটি নির্দিষ্ট সীমাবদ্ধ সংখ্যক রাজ্যে ভাগ করা যেতে পারে যা একটি নির্দিষ্ট সময়ের সাথে পুনরাবৃত্তি হবে। অটোমেটনের প্রতিনিধিত্ব করার জন্য, আপনার একটি সফ্টওয়্যার স্টেট কাউন্টার এবং একটি স্টেট ডিকোডারের প্রয়োজন হবে। ট্র্যাফিক লাইট নং 3, যা 4টি দিকে একটি পরিবহন ট্রাফিক লাইট, 4টি পথচারী ট্রাফিক লাইট, 1টি রেল ক্রসিং লাইট, 1টি ফ্ল্যাশিং পথচারী একটি নিয়ে গঠিত, একটি স্বয়ংক্রিয় ডিভাইস ছাড়া তৈরি করতে সমস্যা হবে৷


পথচারী এবং রেলওয়ে ট্রাফিক লাইট প্রক্রিয়াকরণ ছাড়া কোড নীচে দেখানো হয়েছে. এটা বোঝা সহজ যে পদ্ধতি মত
void SetRedT1(void) //ট্রান্সপোর্ট ট্রাফিক লাইট1 লাল D3 চালু করুন
{
ptc|=0x01;
}
পৃথক বিট সেট বা পরিষ্কার করুন।

প্রধান লুপে, কাউন্টার i এর মান ক্রমাগত বৃদ্ধি পাচ্ছে যতক্ষণ না এটি 48 এ পৌঁছায়।
i++;
এই ক্ষেত্রে, কাউন্টারটি শূন্যে রিসেট করা হয়েছে।
যদি (i==48) (i=0;); // 24c=0.5*48

লুপে, কাউন্টার মান ক্রমাগত ধ্রুবকের সাথে তুলনা করা হয় এবং পোর্টগুলির সাথে কাজ করা হয়। যদিও এই কোডটি আগের দুটির তুলনায় আরো উন্নত, এটি কাজের তুলনায় স্বচ্ছতার জন্যও বেশি উপযুক্ত। পেশাদাররা প্রায়শই পৃথক তুলনা ক্রিয়াকলাপের সেট ব্যবহার করেন না, তবে সুইচ-কেস অপারেটর ব্যবহার করেন বা এমনকি অ্যারেতে প্রাক-গণনা করা ডেটা লিখতে পারেন - একটি তৈরি টেবিল ব্যবহার করুন:

ফ্ল্যাশ স্বাক্ষরবিহীন চর sw[N] =(
//G1Y1R1G2Y2R2 XX
0b10000100, //1 X পিরিয়ড Green1 এবং Red2 আলোকিত হয়
0b10000100, //2
...
0b00000100, // X পিরিয়ড সবুজ1 ফ্ল্যাশ,

0b10000100, //
...
0b01001100, //K-1 সবুজ1 বেরিয়ে যায়, হলুদ1 এবং হলুদ2 আলোকিত হয়
0b00110000, //K Red1 আলো জ্বলছে, Green1 আলো জ্বলছে, Yellow2 এবং Red2 নিভে গেছে

...
0b01101000 //N
};

যখন (1)
{
i++;


PORTC=(sw[i]>>x) | মুখোশ
PORTD=(sw[i]>>x) | মুখোশ
delay_ms(500);
};
}

অবশ্যই, অভিব্যক্তি (sw[i]>>x) | মুখোশ শর্তসাপেক্ষে বর্ণনা করা হয়, সবকিছু sw ধ্রুবকের সংকেত সম্পর্কে তথ্যের অবস্থানের উপর নির্ভর করে।

/*****************************************************
চিপের ধরন: ATmega8
প্রোগ্রামের ধরন: আবেদন
AVR কোর ক্লক ফ্রিকোয়েন্সি: 1.000000 MHz
মেমরি মডেল: ছোট
বাহ্যিক RAM আকার: 0
ডেটা স্ট্যাকের আকার: 256
*****************************************************/

#অন্তর্ভুক্ত
#অন্তর্ভুক্ত

স্বাক্ষরবিহীন চার ptb=0;
স্বাক্ষরবিহীন চার ptc=0;
স্বাক্ষরবিহীন char ptd=0;

void SetRedT1() //ট্রান্সপোর্ট ট্রাফিক লাইট1 লাল D3 চালু করুন
{
ptc|=0x01;
}

void ResetRedT1() //ট্রান্সপোর্ট ট্রাফিক লাইট1 লাল D3 বন্ধ করুন
{
ptc&=~0x01;
}

void SetYelT1() //ট্রান্সপোর্ট ট্রাফিক লাইট1 হলুদ D2 চালু করুন
{
ptc|=0x02;
}

void ResetYelT1() //ট্রান্সপোর্ট ট্রাফিক লাইট1 হলুদ D2 বন্ধ করুন
{
ptc&=~0x02;
}

void SetGrnT1() //ট্রান্সপোর্ট ট্রাফিক লাইট1 সবুজ D1 হয়ে যায়
{
ptc|=0x04;
}

void ResetGrnT1() //ট্রান্সপোর্ট ট্রাফিক লাইট1 সবুজ D1 বন্ধ করুন
{
ptc&=~0x04;
}

void SetRedT2() //ট্রান্সপোর্ট ট্রাফিক লাইট2 লাল D6 চালু করুন
{
ptc|=0x08;
}

void ResetRedT2() //ট্রান্সপোর্ট ট্রাফিক লাইট2 লাল D6 বন্ধ করুন
{
ptc&=~0x08;
}

void SetYelT2() //ট্রান্সপোর্ট ট্রাফিক লাইট2 হলুদ D5 চালু করুন
{
ptc|=0x10;
}

void ResetYelT2() //ট্রান্সপোর্ট ট্রাফিক লাইট2 হলুদ D5 বন্ধ করুন
{
ptc&=~0x10;
}

void SetGrnT2() //ট্রান্সপোর্ট ট্রাফিক লাইট2 সবুজ D4 হয়ে যায়
{
ptc|=0x20;
}

void ResetGrnT2() //ট্রান্সপোর্ট ট্রাফিক লাইট2 সবুজ D4 বন্ধ করুন
{
ptc&=~0x20;
}


void SetRedT3() //ট্রান্সপোর্ট ট্রাফিক লাইট3 লাল D9 চালু করুন
{
ptd|=0x01;
}

void ResetRedT3() //ট্রান্সপোর্ট ট্রাফিক লাইট3 লাল D9 বন্ধ করুন
{
ptd&=~0x01;
}

void SetYelT3() //ট্রান্সপোর্ট ট্রাফিক লাইট3 হলুদ D8 চালু করুন
{
ptd|=0x02;
}

void ResetYelT3() //ট্রান্সপোর্ট ট্রাফিক লাইট3 হলুদ D8 বন্ধ করুন
{
ptd&=~0x02;
}

void SetGrnT3() //ট্রান্সপোর্ট ট্রাফিক লাইট3 সবুজ D7 হয়ে যায়
{
ptd|=0x04;
}

void ResetGrnT3() //ট্রান্সপোর্ট ট্রাফিক লাইট3 সবুজ D7 বন্ধ করুন
{
ptd&=~0x04;
}


void SetRedT4() //ট্রান্সপোর্ট ট্রাফিক লাইট2 লাল D12 চালু করুন
{
ptd|=0x08;
}

void ResetRedT4() //ট্রান্সপোর্ট ট্রাফিক লাইট2 লাল D12 বন্ধ করুন
{
ptd&=~0x08;
}

void SetYelT4() //ট্রান্সপোর্ট ট্রাফিক লাইট2 হলুদ D11 চালু করুন
{
ptd|=0x10;
}

void ResetYelT4() //ট্রান্সপোর্ট ট্রাফিক লাইট2 হলুদ D11 বন্ধ করুন
{
ptd&=~0x10;
}

void SetGrnT4() //ট্রান্সপোর্ট ট্রাফিক লাইট2 সবুজ D10 হয়ে যায়
{
ptd|=0x20;
}

void ResetGrnT4() //ট্রান্সপোর্ট ট্রাফিক লাইট2 সবুজ D10 বন্ধ করুন
{
ptd&=~0x20;
}

// এখানে আপনার বিশ্বব্যাপী ভেরিয়েবল ঘোষণা করুন

অকার্যকর প্রধান (অকার্যকর)
{
স্বাক্ষরবিহীন চর i=0;

PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
ACSR=0x80;

যখন (1)
{
যদি (i==0) (ResetYelT1();ResetRedT1();SetGrnT1();
ResetYelT2();SetRedT2();
ResetYelT3();ResetRedT3();SetGrnT3();
ResetYelT4();SetRedT4();

); //0 সেকেন্ড
if (i==16) (ResetGrnT1();
ResetGrnT3();

); //8 সে
যদি (i==17) (SetGrnT1();
SetGrnT3();

};
if (i==18) (ResetGrnT1();
ResetGrnT3();

};
যদি (i==19) (SetGrnT1();
SetGrnT3();

};
যদি (i==20) (ResetGrnT1();SetYelT1();
SetYelT2();
ResetGrnT3();SetYelT3();
SetYelT4();

); //10 সেকেন্ড
যদি (i==24) (ResetYelT1();SetRedT1();
ResetYelT2();ResetRedT2();SetGrnT2();
ResetYelT3();SetRedT3();
ResetYelT4();ResetRedT4();SetGrnT4();

); //12সে
যদি (i==40) (ResetGrnT2();
ResetGrnT4();

); //20 সেকেন্ড
যদি (i==41) (SetGrnT2();
SetGrnT4();

};
যদি (i==42) (ResetGrnT2();
ResetGrnT4();

); //21সে
যদি (i==43) (SetGrnT2();
SetGrnT4();

};
যদি (i==44) (SetYelT1();
ResetGrnT2();SetYelT2();
SetYelT3();
ResetGrnT4();SetYelT4();

); //22সে
i++;
যদি (i==48) (i=0;); // 24c=0.5*48 - চক্র

//PORTB=ptb;
PORTC=ptc;
PORTD=ptd;
delay_ms(500);
};
}

কলাম সূচক।

যদি পূর্ববর্তী উদাহরণগুলি মাইক্রোকন্ট্রোলারের ডিজিটাল সংস্থানগুলি ব্যবহার করে, তবে এই উদাহরণটি এনালগগুলি ব্যবহার করে - ADCs। একটি এনালগ-টু-ডিজিটাল রূপান্তরকারী একটি নির্দিষ্ট স্যাম্পলিং ফ্রিকোয়েন্সি সহ একটি ডিজিটাল কোডে একটি এনালগ সংকেতকে পৃথক রূপান্তরের জন্য ডিজাইন করা হয়েছে। নতুনদের জন্য, আমি কেবল বলব যে সর্বাধিক ডিজিটাইজেশন গতি সীমিত।

বার ইন্ডিকেটর ইনপুট ভোল্টেজকে আলোকিত অংশগুলির একটি কলামের আকারে প্রদর্শন করে (বা কেবল স্বতন্ত্র নির্গতকারী), যা সমস্ত ধরণের সূচকের জন্য খুব দরকারী, যার উদাহরণ হল কলামার রেকর্ডিং লেভেল ইন্ডিকেটর (RLI)।

ইনপুট ভোল্টেজ সরবরাহ ভোল্টেজের বেশি হওয়া উচিত নয় এবং মাইক্রোকন্ট্রোলারের 5 ভোল্ট পাওয়ার সাপ্লাই রেফারেন্স ভোল্টেজ হিসাবে ব্যবহৃত হয় এবং AREF পিনের একটি বহিরাগত ক্যাপাসিটর ফিল্টার হিসাবে ব্যবহৃত হয়।

প্রোগ্রাম কোড নিচে দেওয়া হল:

/*****************************************************
চিপের ধরন: ATmega8
প্রোগ্রামের ধরন: আবেদন
AVR কোর ক্লক ফ্রিকোয়েন্সি: 4.000000 MHz
মেমরি মডেল: ছোট
বাহ্যিক RAM আকার: 0
ডেটা স্ট্যাকের আকার: 256
*****************************************************/

#অন্তর্ভুক্ত
#অন্তর্ভুক্ত

# ADC_VREF_TYPE 0x40 //5V Vcc + C 4.7uF AREF সংজ্ঞায়িত করুন

//PD0 LED1
//PD1 LED2
//PD2 LED3
//PD3 LED4
//PD4 LED5
//PD5 LED6
//PD6 LED7
//PD7 LED8
//PB0 LED9
//PB1 LED10
//PB2 LED11
//PB3 LED12
//PB4 LED13
//PB5 LED14

//PC4 LED15
//PC5 LED16

const
স্বাক্ষরবিহীন চর PD=
{
0b00000000, //0
0b00000001, //1
0b00000011, //2
0b00000111, //3
0b00001111, //4
0b00011111, //5
0b00111111, //6
0বি01111111, //7
0বি11111111, //8
//_____________
0বি11111111, //9
0বি11111111, //10
0বি11111111, //11
0বি11111111, //12
0বি11111111, //13
0বি11111111, //14
0বি11111111, //15
0বি11111111//16
};
স্বাক্ষরবিহীন চর PB=
{
0b00000000, //0
0b00000000, //1
0b00000000, //2
0b00000000, //3
0b00000000, //4
0b00000000, //5
0b00000000, //6
0b00000000, //7
0b00000000, //8
//_____________
0b00000001, //9
0b00000011, //10
0b00000111, //11
0b00001111, //12
0b00011111, //13
0বি00111111, //14
//_____________
0বি00111111, //15
0বি00111111 //16
};

// AD রূপান্তর ফলাফল পড়ুন
স্বাক্ষরবিহীন int read_adc (অস্বাক্ষরবিহীন চার adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// ADC ইনপুট ভোল্টেজের স্থিতিশীলতার জন্য বিলম্ব প্রয়োজন
delay_us(10);
// AD রূপান্তর শুরু করুন
ADCSRA|=0x40;
// AD রূপান্তর সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন
যখন ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
ফেরত ADCW;
}

অকার্যকর ADC_init()
{
//ADC আরম্ভ
//ADC ঘড়ি ফ্রিকোয়েন্সি: 125.000 kHz
// ADC ভোল্টেজ রেফারেন্স: Vcc, ক্যাপ। AREF-এ
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x85;
}

অকার্যকর ডিকোড (int সংকেত)
{
PORTD=PD;
PORTB=PB;

যদি (সংকেত==15) (PORTC |= 0b00010000; PORTC &= 0b11011111;)
অন্যথায় যদি (সংকেত==16) (PORTC |= 0b00110000;)
অন্য (PORTC &= 0b11001111;)
}

অকার্যকর SetupIO()
{
// ইনপুট/আউটপুট পোর্ট শুরু
PORTB=0b00000000;
DDRB = 0b00111111;

PORTC=0b00001100;
DDRC = 0b00110000; //PC0,PC1 = ADC0,ADC1, PC2, PC3 সেটআপ পিনের সাথে পিউপি

PORTD=0x00;
DDRD=0xFF;
}

অকার্যকর প্রধান (অকার্যকর)
{
// এনালগ কম্প্যারেটর আরম্ভ
// এনালগ তুলনাকারী: বন্ধ
// টাইমার/কাউন্টার 1 দ্বারা অ্যানালগ তুলনাকারী ইনপুট ক্যাপচার: বন্ধ
ACSR=0x80;
SFIOR=0x00;

সেটআপআইও();
ADC_init();

যখন (1)
{
ডিকোড(read_adc(0)*0.049*0.32);
delay_ms(100);
};
}

এই কোডে ব্যবহৃত প্রায় সমস্ত কৌশল উপরে আলোচনা করা হয়েছে। শুধুমাত্র যে জিনিসটি আমি লক্ষ্য করতে চাই তা হল if বিবৃতি সহ বর্ধিত নির্মাণ:
যদি () () // যদি (শর্ত পূরণ হয়) তাহলে ( )
অন্যথায় যদি () () // অন্যথায় যদি (শর্ত পূরণ হয়) তাহলে ( )
অন্যথায় () // অন্যথায় ( )

এবং অভিব্যক্তি read_adc(0)*0.049*0.32
আসল বিষয়টি হল যে ADC তার মানগুলি 0-1023 (2^10) স্কেলে তৈরি করে, যা 0-5 ভোল্টের স্কেলের সাথে মিলে যায় (যেহেতু রেফারেন্স ভোল্টেজ 5 ভোল্ট), এবং আমাদের প্রথমে পেতে হবে ভোল্ট, এবং তারপর তাদের পরিমাণ সেগমেন্টে রূপান্তর করুন। 1024*0.049*0.32=16 অর্থাৎ পুরো ADC স্কেল হল 16 সেগমেন্ট।
0.049 সংখ্যাটিকে 5 ভোল্ট / 1024 গণনা = 0.0048828 (~10 ADC গণনা) এর গুণিতক হিসাবে নেওয়া হয় এবং তারপর পছন্দসই ইনপুট ভোল্টেজে শেষ অংশের ইগনিশন পেতে পরীক্ষামূলকভাবে 0.32 দ্বারা গুণ করা হয়।



সিরিয়াল পোর্ট।

এবং এখন আমি ইন্টারফেসের জগতে ডুব দেওয়ার প্রস্তাব করছি। সবচেয়ে সহজ এবং বহুল ব্যবহৃত সিরিয়াল প্রোটোকল, RS232, সম্প্রতি অবধি, যদিও অপ্রচলিত বলে বিবেচিত হয়, তবুও আধুনিক মাইক্রোকন্ট্রোলারগুলির উত্পাদনে অন্তর্ভুক্ত - এবং শুধুমাত্র একটি নয়, একটি নিয়ম হিসাবে, এখন তাদের মধ্যে কমপক্ষে 4টি রয়েছে। এছাড়াও, অনেক ডিভাইস এখনও এই ইন্টারফেসটি ব্যবহার করে (উদাহরণস্বরূপ, কিছু NoritakeItron VFD স্ক্রিন, ধীর উত্পাদন ডিভাইস ইত্যাদি)। এই উদাহরণটি আপনাকে মাইক্রোকন্ট্রোলারে RS232 (USART) কনফিগার করা এবং ব্যবহার করা কতটা সহজ তা মূল্যায়ন করতে দেয়।


নীচে কোডটি 0 অক্ষর প্রেরণ করে।

/*****************************************************
চিপের ধরন: ATmega8
প্রোগ্রামের ধরন: আবেদন
AVR কোর ক্লক ফ্রিকোয়েন্সি: 1.000000 MHz
মেমরি মডেল: ছোট
বাহ্যিক RAM আকার: 0
ডেটা স্ট্যাকের আকার: 256
*****************************************************/

#অন্তর্ভুক্ত

// স্ট্যান্ডার্ড ইনপুট/আউটপুট ফাংশন
//#অন্তর্ভুক্ত

#BAUDRATE 57600 সংজ্ঞায়িত করুন
#BaudValue সংজ্ঞায়িত করুন ((11059200UL/(BAUDRATE*16UL))-1)

অকার্যকর USART_Transmit(অস্বাক্ষরিত চর ডেটা)
{
//(যখন (!(UCSRA & (1<
UDR = data;
যখন(!(UCSRA & (1<
//ইউডিআর = ডেটা; // ডেটা স্থানান্তর শুরু করুন
}

অকার্যকর USART_init(অকার্যকর)
{
UBRRH = BaudValue >> 8;
UBRRL = BaudValue & 0xFF;
//
UCSRB=(1<
DDRD=0x02;
UCSRC = (1<
//UCSRA = (1<
}

অকার্যকর প্রধান (অকার্যকর)
{
ACSR=0x80;
SFIOR=0x00;
USART_init();
যখন (1){ USART_Transmit(0x30);};
}


অনুগ্রহ করে মনে রাখবেন যে প্রোটিয়াস অনুকরণ সমর্থন করে না UCSRC (পোর্ট কমিউনিকেশন প্যারামিটার সেটিং), তাই অসিলেটর ফ্রিকোয়েন্সি 3500000 এ সেট করুন এবং টার্মিনালে নিম্নলিখিত প্যারামিটার সেট করুন:




হ্যালো, Datagorians!

আমার প্রথম নিবন্ধটি প্রকাশের পর, আমি মাইক্রোকন্ট্রোলার, কিভাবে, কী, কোথায়, কেন... সম্পর্কে প্রশ্নে আপ্লুত হয়েছিলাম।

যাতে আপনি বুঝতে পারেন কিভাবে এই ব্ল্যাক বক্স কাজ করে, আমি আপনাকে মাইক্রোকন্ট্রোলার (এর পরে MK) ATmega8 সম্পর্কে বলব। নীতিগতভাবে, অ্যাটমেল AVR পরিবারের এমকেগুলির একটি সম্পূর্ণ সিরিজ তৈরি করে - এগুলি হল ক্ষুদ্র এবং মেগা সাবফ্যামিলি। আমি নির্দিষ্ট MK-এর গুণাবলী বর্ণনা করব না; এটি আপনার উপর নির্ভর করে যে আপনার জন্য কোনটি সবচেয়ে উপযুক্ত। বর্ধিত পরিবারের কিছু প্রতিনিধি:

সুতরাং, ATmega8, সমস্ত ATmegas এর মধ্যে সহজতম MK:

আসুন একটি সরলীকৃত কাঠামোগত চিত্র ব্যবহার করে অভ্যন্তরীণ অধ্যয়ন শুরু করি:

এটি সমস্ত ATmega এর একটি সাধারণ চিত্র।

সমস্ত AVR মাইক্রোকন্ট্রোলার তথাকথিত হার্ভার্ড আর্কিটেকচার অনুসারে তৈরি করা হয়, অর্থাৎ, প্রোগ্রাম মেমরি এবং ডেটা মেমরির পৃথক ঠিকানা ব্যবহার করা হয়। এই আর্কিটেকচারের সুবিধা হল গতি বৃদ্ধি করা, উদাহরণস্বরূপ ATmega প্রতি ঘড়ির পালসে একটি নির্দেশ কার্যকর করে, অর্থাৎ, 16 MHz ফ্রিকোয়েন্সিতে MK প্রতি সেকেন্ডে 16 মিলিয়ন অপারেশন করে।

এবং এখন ক্রমে ট্রিপ সম্পর্কে.
1. ঘড়ি জেনারেটর সমস্ত অভ্যন্তরীণ ডিভাইস সিঙ্ক্রোনাইজ করে।
2. ROM হল একটি শুধুমাত্র পঠনযোগ্য মেমরি ডিভাইস যা প্রোগ্রাম এবং অপরিবর্তনীয় ডেটা (ধ্রুবক) সংরক্ষণ করতে ব্যবহৃত হয়।
3. কমান্ড ডিকোডার - তিনি এখানে সবচেয়ে গুরুত্বপূর্ণ একজন, তিনি তার হাতে আসা সবকিছু নিয়ন্ত্রণ করেন।
4. ALU হল একটি গাণিতিক-লজিক্যাল ডিভাইস যা সংখ্যার উপর পাটিগণিত (যোগ, বিয়োগ, ইত্যাদি) এবং লজিক্যাল (AND, OR, NOT, XOR) অপারেশন করে।
5. RON - সাধারণ উদ্দেশ্য রেজিস্টার, ALU তাদের সাথে কাজ করে এবং অস্থায়ী ডেটা স্টোরেজের জন্যও ব্যবহৃত হয়। RON রেজিস্টারগুলিকে রেজিস্টার জোড়ায় একত্রিত করা যেতে পারে:
r26: r27 – X;
r28: r29 – Y;
r30: r31 – Z

রেজিস্টার জোড়া ব্যবহার করা হয় পরোক্ষভাবে RAM-তে ডেটা অ্যাড্রেস করতে।
6. RAM হল একটি র্যান্ডম অ্যাক্সেস মেমরি ডিভাইস যা ডেটা, অ্যারে এবং স্ট্যাক সংরক্ষণ করতে ব্যবহৃত হয়।
7. PORTA-PORTn - বাইরের বিশ্বের সাথে যোগাযোগ, ইনপুট/আউটপুট পোর্ট, ভাল, এটা পরিষ্কার কেন...
8. বিশেষ UVV হল বিশেষ ইনপুট/আউটপুট ডিভাইস, বিভিন্ন পেরিফেরালের কন্ট্রোলার, উদাহরণস্বরূপ USART (COM পোর্ট নামেও পরিচিত), কখনও কখনও USB, ADC, DAC, I2C, সংক্ষেপে, যা কিছু আছে...

ঠিক আছে, এটি সমস্ত তত্ত্ব, তবে আপনি কিছু একসাথে রাখার জন্য অপেক্ষা করতে পারবেন না, এটি চেষ্টা করুন এবং এটি কার্যকর করুন! তারপর আমাদের যা প্রয়োজন তা তালিকাভুক্ত করা যাক:

1. উপযুক্ত সফ্টওয়্যার সহ একজন প্রোগ্রামার, আমি গত নিবন্ধে এই বিষয়ে লিখেছিলাম;
2. সি ল্যাঙ্গুয়েজ কম্পাইলার, কোড ভিশন AVR, MK এর জন্য প্রোগ্রাম ডেভেলপ করার জন্য ভালো টুলস আছে;

আপনি সি-তে প্রোগ্রামিং শুরু করার আগে, এই ভাষার কিছু সাহিত্যের সাথে নিজেকে পরিচিত করা ভাল হবে, উদাহরণস্বরূপ, কার্নিঘান এবং রিচির "দ্য সি ল্যাঙ্গুয়েজ" এর একটি দুর্দান্ত বই রয়েছে।

ঠিক আছে, শুরু করা যাক...

টেস্ট সার্কিট।

আসুন এই চিত্রটি একত্রিত করা যাক:

এটি হবে বেস মডেল। যাইহোক, একটি ব্রেডবোর্ডে সার্কিটটি একত্রিত করা এবং এমকে সকেটে রাখা ভাল। কিন্তু এই ধরনের পরিকল্পনা অর্থহীন। আসুন, উদাহরণস্বরূপ, একটি LED যোগ করি এবং বর্তমান-সীমাবদ্ধ প্রতিরোধক সম্পর্কে ভুলবেন না। এটিকে B পোর্টের জিরো পিনের সাথে সংযুক্ত করি।
চিত্রটি এইরকম দেখাবে:

এর পাওয়ার চালু করা যাক... শূন্য!!! আপনি প্রোগ্রাম ছাড়া কি চান?
মানে…

আসুন একটি প্রোগ্রাম লিখি!

তাই আপনি CVAVR চালু করেছেন, আপনার প্রথমে কী করা উচিত? টুলবারে গিয়ার বোতামে ক্লিক করে কোড উইজার্ড AVR চালু করুন, একটি উইজার্ড উইন্ডো প্রদর্শিত হবে:

এখানে আমরা MK প্রকার এবং ঘড়ির ফ্রিকোয়েন্সি নির্বাচন করি। পরবর্তী, পোর্ট ট্যাবে যান:

এবং আমরা কনফিগার করি কোন পোর্টের কোন বিটটি ইনপুট বা আউটপুটের জন্য কনফিগার করা হবে, পোর্ট B বিট 0 একটি সিগন্যাল আউটপুট করবে এবং বাকিরা গ্রহণ করবে।
সেটিংস সংরক্ষণ করতে, ফাইল / জেনারেট সেভ এবং প্রস্থান মেনু নির্বাচন করুন, পরবর্তী সমস্ত অনুরোধের জন্য ফাইলের নাম লিখুন, সেগুলি একই হওয়া বাঞ্ছনীয়, উদাহরণস্বরূপ "prj"। এটাই, উইজার্ডে নির্দিষ্ট সেটিংস সহ আমরা প্রোগ্রামের উত্স পাঠ তৈরি করেছি।

দেখা যাক আমরা কি পেয়েছি। প্রথম 22 লাইন একটি মন্তব্য, অর্থাৎ, এটি প্রোগ্রামের ক্রিয়াকলাপের উপর কোন প্রভাব ফেলে না, তাই "/*" এবং "*/" এর মধ্যে যা কিছু আছে তা একটি মন্তব্য, এবং কম্পাইলার এই পুরো বিষয়টিকে উপেক্ষা করে। 24 তম মেয়াদে, আমরা একটি হেডার ফাইল অন্তর্ভুক্ত করি, এটি বর্ণনা করে যে রেজিস্টারগুলিকে কী বলা হয় এবং তারা কোন ঠিকানায় অবস্থিত। সি প্রোগ্রামিংয়ের জন্য, বিশদ বিবরণ এখানে অপ্রয়োজনীয়।
28 লাইন থেকে আমরা ফাংশনের সংজ্ঞা দিয়ে মূল প্রোগ্রাম শুরু করি প্রধান(),

এর নিচে স্ক্রোল করা যাক. 36 এবং 37 লাইনে মনোযোগ দিন, এখানে পোর্ট B-এ একটি মান বরাদ্দ করা হয়েছে এবং ট্রান্সমিশন দিক নির্বাচন করা হয়েছে। সাধারণভাবে এটি এই মত দেখায়:

অর্থাৎ, DDRB রেজিস্টারের যেকোনো বিটে যদি একটি লেখা থাকে, তাহলে পোর্ট B-এর সংশ্লিষ্ট বিটটি আউটপুট হিসেবে কাজ করবে। আমাদের ক্ষেত্রে এটি বিট 0।
যাইহোক, ATmega-এর পোর্টগুলির একটি চমৎকার বৈশিষ্ট্য রয়েছে: এমনকি যদি পোর্টটি ইনপুটের জন্য কনফিগার করা হয়, এবং PORTx রেজিস্টার লেখা থাকে, অভ্যন্তরীণ পুল-আপ প্রতিরোধকগুলি পাওয়ার সাপ্লাই পজিটিভের সাথে সংযুক্ত থাকবে, যা ব্যবহারকে বাদ দেয়। বহিরাগত দুল প্রতিরোধক. যেকোনো সেন্সর এবং বোতাম সংযোগ করার সময় এটি সুবিধাজনক।

আসুন প্রোগ্রামটি কম্পাইল করি; এটি করার জন্য, মেক দ্য প্রজেক্ট বোতামে ক্লিক করুন, অথবা প্রজেক্ট/মেক মেনুর মাধ্যমে। আপনি কিছু টুইক না করা পর্যন্ত কোন ত্রুটি থাকা উচিত নয়।

চলুন C:\cvavr\bin\ ফোল্ডারটি খুলি, সেখানে prj.hex ফাইলটি খুঁজুন। এই প্রোগ্রাম আমরা MK জন্য কম্পাইল. আসুন প্রোগ্রামারকে পিসি এবং এমকে সংযুক্ত করি। আসুন Pony Prog প্রোগ্রাম চালু করি এবং prj.hex ফাইলটিকে এর উইন্ডোতে টেনে আনুন। এমকে পাওয়ার চালু করুন এবং আমাদের প্রোগ্রামটি এতে লোড করুন... আবার কিছু না? কিন্তু সমস্যা হল আমরা B পোর্টের শূন্য বিটে কিছু আউটপুট করিনি, বা বরং, আমরা এটি আউটপুট করি, শুধুমাত্র এটি শূন্য। এবং আমাদের LED আলোর জন্য, আমাদের একটি আউটপুট করতে হবে। চলুন এটিই করি, 36 লাইনে "PORTB=0x00;" প্রতিস্থাপন করুন "PORTB=0x01;" থেকে এর প্রোগ্রাম আবার কম্পাইল করা যাক. এবং Pony Prog প্রোগ্রামে আমরা Ctrl+L কীবোর্ড শর্টকাট বা ফাইল/রিলোড ফাইল মেনু ব্যবহার করে ফাইলটি পুনরায় লোড করব। আসুন MK মুছে ফেলি এবং আবার ফার্মওয়্যার আপলোড করি। হুররে!!! এটা কাজ করে!!!

যাইহোক, Pony Prog স্ক্রিপ্ট সমর্থন করে, এবং যাতে রিবুট করা, মুছে ফেলা এবং লেখার বিষয়ে চিন্তা না করতে হয়, আপনি কেবল .e2s এক্সটেনশনের সাথে একটি স্ক্রিপ্ট লিখতে পারেন এবং এটিকে কল করতে পারেন, উদাহরণস্বরূপ, prog.e2s। আপনি একটি নোটপ্যাড ব্যবহার করে এটি করতে পারেন। এর বিষয়বস্তু এইরকম হবে:

ATMEGA8 ডিভাইস নির্বাচন করুন
ক্লিয়ারবাফার
লোড-সমস্ত prj.hex
সব মুছে ফেল
সব লিখুন

স্ক্রিপ্টটি .hex ফাইলের মতো একই ফোল্ডারে স্থাপন করা উচিত এবং এটিতে ডাবল ক্লিক করে রান করা উচিত। আপনি আপনার ডেস্কটপে একটি শর্টকাট রাখতে পারেন, এটি কতটা সুবিধাজনক তার উপর নির্ভর করে...

চলবে…

সাধারণ জ্ঞাতব্য

Arduino কন্ট্রোলারের এই সংস্করণ, যদি সহজ না হয়, অবশ্যই স্ব-উৎপাদনের জন্য সবচেয়ে সাশ্রয়ী মূল্যের। এটি ATMega8 কন্ট্রোলারে ইতিমধ্যেই ক্লাসিক Arduino সার্কিটের উপর ভিত্তি করে তৈরি।

মোট, দুটি বিকল্প তৈরি করা হয়েছে:

  • মডুলার
  • একক বোর্ড

মডুলার বিকল্প

এই কন্ট্রোলার বিকল্পটি তিনটি বোর্ড নিয়ে গঠিত:

একক বোর্ড বিকল্প

সবকিছু একই, শুধুমাত্র একটি বোর্ডে:

বোর্ডটি একক-পার্শ্বযুক্ত ফয়েল PCB দিয়ে তৈরি এবং এটি ব্যবহার করে বাড়িতে প্রতিলিপি করা যেতে পারে, উদাহরণস্বরূপ, LUT প্রযুক্তি। বোর্ডের মাত্রা: 95x62

মাইক্রোকন্ট্রোলার প্রোগ্রামিং

বোর্ড একত্রিত করার পরে, আপনাকে কন্ট্রোলারটিকে "ফ্ল্যাশ" করতে হবে, এতে "বুটলোডার" লোড করতে হবে। এর জন্য আপনার একজন প্রোগ্রামার লাগবে। আমরা একটি পরিষ্কার ATMega8 টাইপ কন্ট্রোলার নিই, এটি প্রোগ্রামারে ইনস্টল করি এবং এটি কম্পিউটারের সাথে সংযুক্ত করি। আমি ATMega8-48-88-168 অ্যাডাপ্টারের সাথে AVR ISP mkII প্রোগ্রামার ব্যবহার করেছি। আমরা Arduino IDE ব্যবহার করে প্রোগ্রাম করি, এটি স্বয়ংক্রিয়ভাবে প্রয়োজনীয় ফিউজ বিট সেট করবে। ক্রমটি হল:

1. একটি প্রোগ্রামার নির্বাচন করুন (পরিষেবা > প্রোগ্রামার > AVRISP mkII)। যদি এই প্রোগ্রামারটি প্রথমবার ব্যবহার করা হয়, তাহলে আপনাকে AVRISP-MKII-libusb-drv.zip ড্রাইভারটি ইনস্টল করতে হবে। আপনি যদি AVRISP mkII ছাড়া অন্য কোনো প্রোগ্রামার ব্যবহার করেন, তাহলে আপনাকে তালিকা থেকে আপনার প্রয়োজনীয় একটি নির্বাচন করতে হবে।

2. মাইক্রোকন্ট্রোলারের জন্য একটি বোর্ড নির্বাচন করা (সরঞ্জাম > বোর্ড > Arduino NG বা পুরোনো w/ ATmega8)। আপনি যদি ATmega8 ব্যতীত অন্য একটি মাইক্রোকন্ট্রোলার ব্যবহার করেন তবে আপনাকে এটির সাথে মেলে এমন বোর্ড বেছে নিতে হবে।

3. রেকর্ড বুটলোডার (সরঞ্জাম > রেকর্ড বুটলোডার)।

4. বোর্ডে কন্ট্রোলার ইনস্টল করুন, এবং এটিই, আরডুইনো কাজ করার জন্য প্রস্তুত।