সুচিপত্র:

Attiny85 সমবয়সী প্রোগ্রামিং বা বহু রঙের চোখ দিয়ে কুমড়া: 7 টি ধাপ
Attiny85 সমবয়সী প্রোগ্রামিং বা বহু রঙের চোখ দিয়ে কুমড়া: 7 টি ধাপ

ভিডিও: Attiny85 সমবয়সী প্রোগ্রামিং বা বহু রঙের চোখ দিয়ে কুমড়া: 7 টি ধাপ

ভিডিও: Attiny85 সমবয়সী প্রোগ্রামিং বা বহু রঙের চোখ দিয়ে কুমড়া: 7 টি ধাপ
ভিডিও: ষষ্ঠ শ্রেনির ইসলাম ও নৈতিক শিক্ষা বইয়ের পঞ্চম অধ্যায় আদর্শ জীবনচরিত পাঠ-২ হযরত আবু বকর (রা.) - এর 2024, নভেম্বর
Anonim

লেখক দ্বারা আরো অনুসরণ করুন:

আর্তনাদ
আর্তনাদ
আর্তনাদ
আর্তনাদ
বাইরের পাওয়ার সাপ্লাই দিয়ে NiCd ব্যাটারির প্রতিস্থাপন
বাইরের পাওয়ার সাপ্লাই দিয়ে NiCd ব্যাটারির প্রতিস্থাপন
বাইরের পাওয়ার সাপ্লাই দিয়ে NiCd ব্যাটারির প্রতিস্থাপন
বাইরের পাওয়ার সাপ্লাই দিয়ে NiCd ব্যাটারির প্রতিস্থাপন
ডিজিটাল ক্যামেরা হ্যান্ডেল
ডিজিটাল ক্যামেরা হ্যান্ডেল
ডিজিটাল ক্যামেরা হ্যান্ডেল
ডিজিটাল ক্যামেরা হ্যান্ডেল

সম্পর্কে: আমি বে এরিয়া (ক্যালিফোর্নিয়া) কোম্পানীর একটি সফটওয়্যার ইঞ্জিনিয়ার হিসাবে কাজ করি। যখনই আমার সময় থাকে তখন আমি মাইক্রো কন্ট্রোলার প্রোগ্রাম করতে, যান্ত্রিক খেলনা তৈরি করতে এবং কিছু বাড়ির উন্নতি প্রকল্প করতে পছন্দ করি। জ্যাম্বলভিউ সম্পর্কে আরও

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

GitHub- এ প্রকাশিত প্রকল্প কোড:

সরবরাহ

প্রোগ্রামিং করার আগে একজনকে সার্কিট তৈরি করতে হবে। এখানে উপাদানগুলি রয়েছে:

  • Attiny85 নিয়ামক (কোন ইলেকট্রনিক সরবরাহকারী)।
  • সাধারণ অ্যানোডের সাথে দুটি তিনটি রঙের 10 মিমি এলইডি। Adafruit LEDs
  • প্রতিরোধক 100 ওহম, 120 ওহম, 150 ওহম 0.125 বা 0.250 ওয়াট (যেকোন ইলেকট্রনিক সরবরাহকারী)।
  • AVR ISP ইন্টারফেসের জন্য ছয়টি পিন হেডার। এই Adafruit হেডার থেকে তৈরি করা যেতে পারে
  • কিছু রুটি বোর্ড বা মুদ্রিত টেমপ্লেট বোর্ড। আমি এটি https://www.adafruit.com/product/589 ব্যবহার করেছি
  • AVR ISP MKII ইন্টারফেস এবং এটমেল স্টুডিও.1.১ (পরবর্তী সংস্করণেও কাজ করা উচিত)।

ধাপ 1: সার্কিট

সার্কিট
সার্কিট

নকশা পাঁচটি চিপ পিন ব্যবহার করে:

  • অ্যানোড নিয়ন্ত্রণ করতে ব্যবহৃত দুটি পিন: প্রতিটি LED অ্যানোড ডেডিকেটেড পিনের সাথে সংযুক্ত।
  • এলইডি ক্যাথোডগুলিতে তিনটি পিন সংযুক্ত (প্রতিরোধকের মাধ্যমে) (একই পিনের সাথে সংযুক্ত প্রতিটি নেতৃত্বের একই রঙের ক্যাথোড)

কেউ জিজ্ঞাসা করবে: কেন চিপের ছয়টি ইন/আউট পিন ব্যবহার করবেন না যাতে LED অ্যানোডগুলি সরাসরি +5 v এর সাথে সংযুক্ত হবে এবং প্রতিটি ক্যাথোডের নিজস্ব ডেডিকেটেড পিন থাকবে? এটি প্রোগ্রামিংকে সহজবোধ্য করে তুলবে। হায়, সমস্যা আছে: পিন PB5 (RESET) একটি দুর্বল পিন যা বর্তমান মাত্র ~ 2 mA প্রদান করতে সক্ষম, যখন ~ 20 mA থাকা প্রয়োজন।

অবশ্যই কেউ এই দুর্বল পিনের জন্য ট্রানজিস্টার পরিবর্ধক তৈরি করতে পারে কিন্তু আমি নিজে যখনই সম্ভব কোডের মাধ্যমে সমস্যার সমাধান করতে পছন্দ করি।

ধাপ 2: টাইমিং ডায়াগ্রাম

টাইমিং ডায়াগ্রাম
টাইমিং ডায়াগ্রাম

টাইমিং ডায়াগ্রাম আমাদের বুঝতে সাহায্য করে যে আমাদের কোন প্রোগ্রাম করতে হবে।

ডায়াগ্রামে উপরের দুটি সারি LED অ্যানোডগুলিতে ভোল্টেজ পরিবর্তন দেখায়। LED অ্যানোডের সাথে সংযুক্ত পিনের ভোল্টেজ frequency 250 Hz ফ্রিকোয়েন্সি সহ দোলায়। বাম LED এর জন্য এই ভোল্টেজ দোলন ডান LED এর দোলনের বিপরীত। যখন অ্যানোডে ভোল্টেজ উচ্চ হয় তখন সংশ্লিষ্ট LED উজ্জ্বল হতে পারে। যখন এটি কম সংশ্লিষ্ট LED অন্ধকার হয়। এর মানে হল যে প্রতিটি LED 2 মিলিসেকেন্ডের ব্যবধানে উজ্জ্বল হতে পারে এবং অন্য 2 মিলিসেকেন্ডের সময় অন্ধকার হতে পারে। যেহেতু মানুষের চোখের কিছু জড়তা রয়েছে, পর্যবেক্ষক দ্বারা 250 Hz ঝলকানি লক্ষ্য করা যায় না। ডায়াগ্রামে নীচের তিনটি সারি LEDs ক্যাথোডের সাথে সংযুক্ত পিনের ভোল্টেজ পরিবর্তন দেখায়। আসুন প্রথম ডায়াগ্রাম কলামটি দেখি। বাম এলইডি লাল রঙে এবং ডান এলইডি সবুজ রঙে এটি দেখায়। এখানে রেড ক্যাথোড কম থাকে যখন বাম অ্যানোড বেশি থাকে, সবুজ ক্যাথোড কম থাকে যখন ডান অ্যানোড বেশি থাকে এবং নীল ক্যাথোড সব সময় কম থাকে। ডায়াগ্রামের অন্যান্য কলামগুলি বিভিন্ন রঙের জন্য ক্যাথোড এবং অ্যানোড ভোল্টেজের সমন্বয় দেখায়।

আমরা দেখতে পাচ্ছি পিনের অবস্থার উপর পরস্পর নির্ভরতা রয়েছে। কিছু কাঠামো ছাড়া এটি সমাধান করা সহজ হবে না। এবং সেখানেই প্রোটোথ্রেড লাইব্রেরি কাজে আসে।

ধাপ 3: প্রোগ্রামিং ম্যাক্রো এবং সংজ্ঞা

প্রোগ্রামিং। ম্যাক্রো এবং সংজ্ঞা
প্রোগ্রামিং। ম্যাক্রো এবং সংজ্ঞা

প্রোগ্রামিং ধাপে উদাহরণ সামান্য সরলীকৃত সংস্করণ উপস্থাপন করে। প্রোগ্রাম সংক্ষিপ্ত করা হয়েছে, এবং কিছু প্রতীকী সংজ্ঞা স্পষ্ট ধ্রুবক সঙ্গে প্রতিস্থাপিত।

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

ধাপ 4: প্রোগ্রামিং। প্রধান লুপ

প্রোগ্রামিং। প্রধান লুপ
প্রোগ্রামিং। প্রধান লুপ

তারপরে আসুন আমরা দেখি যে মূল পদ্ধতিটি কী রয়েছে।

কিছু প্রাথমিক কাজ করার পরে ফাংশন প্রধান চিরতরে লুপে থাকে। সেই লুপে এটি পরবর্তী পদক্ষেপগুলি তৈরি করে:

  • বাম LED এর জন্য প্রোটোথ্রেড রুটিনকে আহ্বান করে। এটি কিছু পিনের ভোল্টেজ পরিবর্তন করে।
  • দুই মিলিসেকেন্ড বিলম্ব করুন। পিন ভোল্টেজের কোন পরিবর্তন নেই।
  • সঠিক LED এর জন্য প্রোটোথ্রেড আহ্বান করে। এটি কিছু পিন ভোল্টেজ পরিবর্তন করে।
  • 2 এমএস বিলম্ব করুন। পিন ভোল্টেজের কোন পরিবর্তন নেই।

ধাপ 5: প্রোগ্রামিং। সহায়ক কার্যাবলী

প্রোগ্রামিং। সহায়ক কার্যাবলী
প্রোগ্রামিং। সহায়ক কার্যাবলী

প্রোটোথ্রেড নিয়ে আলোচনা শুরু করার আগে আমাদের কিছু সাহায্যকারী ফাংশন দেখতে হবে। প্রথমে নির্দিষ্ট রঙ সেট করার ফাংশন আছে। তারা সোজা। সমর্থিত রঙের সংখ্যা (সাত) এবং LED ডার্ক (NoColor) সেট করার জন্য আরও একটি ফাংশন রয়েছে।

এবং আরও একটি ফাংশন রয়েছে যা প্রোটোথ্রেড রুটিন দ্বারা সরাসরি আহ্বান করা হবে। এর নাম DoAndCountdown ()।

প্রযুক্তিগতভাবে এই ধরনের একটি ফাংশনের ব্যবহার বাধ্যতামূলক নয় কিন্তু আমি এটি সুবিধাজনক বলে মনে করেছি। এর তিনটি যুক্তি রয়েছে:

  • পয়েন্টার ফাংশন সেটিং LED কালার (যেমন রেড কালার বা গ্রিন কালার বা ইত্যাদি)
  • বিপরীত কাউন্টারের প্রাথমিক মান: নির্দিষ্ট প্রোটোথ্রেড পর্যায়ে এই ফাংশনটি কতবার আহ্বান করতে হবে তার সংখ্যা।
  • বিপরীত পাল্টা নির্দেশক। এটা ধরে নেওয়া হয় যে যখন রঙের পরিবর্তন হয় তখন বিপরীত কাউন্টারটি 0 হয়, তাই প্রথমে পুনরাবৃত্তির কোড সেই কাউন্টারের প্রাথমিক মান নির্ধারণ করবে। প্রতিটি পুনরাবৃত্তির কাউন্টার হ্রাস করা হয়।

ফাংশন DoAndCountdown () বিপরীত কাউন্টারের মান প্রদান করে।

ধাপ 6: প্রোগ্রামিং প্রোটোথ্রেড রুটিন

প্রোগ্রামিং। প্রোটোথ্রেড রুটিন
প্রোগ্রামিং। প্রোটোথ্রেড রুটিন

এবং এখানে ফ্রেমওয়ার্ক কোর: প্রোটোথ্রেড রুটিন। সরলতার জন্য উদাহরণটি কেবল তিনটি ধাপের মধ্যে সীমাবদ্ধ: রঙ পরিবর্তনের জন্য লাল, সবুজ এবং নীল।

ফাংশন দুটি আর্গুমেন্ট সঙ্গে আহ্বান করা হয়:

  • প্রোটোথ্রেড স্ট্রাকচারের নির্দেশক। মূল লুপ শুরু হওয়ার আগে সেই কাঠামোটি প্রধান দ্বারা শুরু করা হয়েছিল।
  • বিপরীত পাল্টা নির্দেশক। প্রধান লুপ শুরু হওয়ার আগে এটি 0 দ্বারা প্রধান সেট করা হয়েছিল।

ফাংশন বাম LED সক্রিয় করতে ভোল্টেজ সেট করে এবং তারপর প্রোটোথ্রেড সেগমেন্ট শুরু করে। এই সেগমেন্টটি ম্যাক্রো PT_BEGIN এবং PT_END এর মধ্যে। ভিতরে কিছু কোড আছে যা আমাদের ক্ষেত্রে শুধুমাত্র ম্যাক্রো PT_WAIT_UNTIL পুনরাবৃত্তি করে। এই ম্যাক্রো পরবর্তী সঞ্চালন করে:

  • DoAndCountdown ফাংশনের আহ্বান। এটি নির্দিষ্ট রঙ নির্গত করতে LED ক্যাথোডে ভোল্টেজ সেট করে।
  • 0 এর সাথে তুলনা করলে ফলাফল ফিরে আসে।
  • যখন প্রোটোথ্রেডটি পরবর্তীতে চালু করা হয় তখন এটি আবার PT_BEGIN এর আগে কোডটি চালায়, তারপর সরাসরি PT_WAIT_UNTIL ম্যাক্রোর ভিতরে ঝাঁপ দেয়, যেখান থেকে এটি শেষবার ফিরে এসেছে।
  • DoAndCountdown এর ফলাফল না হওয়া পর্যন্ত এই ধরনের কাজগুলি পুনরাবৃত্তি হয়। সেই ক্ষেত্রে কোন রিটার্ন নেই, প্রোগ্রামটি প্রোটোথ্রেডে থাকে এবং কোডের পরবর্তী লাইনটি চালায়। আমাদের ক্ষেত্রে এটি পরবর্তী PT_WAIT_UNTIL কিন্তু সাধারণভাবে বলতে গেলে এটি প্রায় যেকোনো সি কোড হতে পারে।
  • দ্বিতীয় PT_WAIT_UNTIL রিভার্স কাউন্টারের প্রাথমিক এক্সিকিউশনে 0 হয়, তাই DoAndCountdown () পদ্ধতিটি প্রাথমিক মান সেট করে। দ্বিতীয় ম্যাক্রো আবার 250 বার চালানো হবে যতক্ষণ না রিভার্স কাউন্টার 0 তে পৌঁছায়।
  • স্ট্রাক্ট pt এর অবস্থা রিসেট করা হয় যত তাড়াতাড়ি নিয়ন্ত্রণ PT_END ম্যাক্রোতে পৌঁছায়। যখন প্রোটোথ্রেড ফাংশন চালু হয় পরের বার প্রোটোথ্রেড সেগমেন্ট PT_BEGIN এর ঠিক পরে কোডের লাইন চালানো শুরু করে।

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

ধাপ 7: অভ্যন্তরীণ

অভ্যন্তরীণ
অভ্যন্তরীণ

পুরো প্রোগ্রামটি কোডের 200 লাইনের কম (মন্তব্য এবং খালি লাইন সহ) এবং Attiny85 কোড মেমরির 20% এরও কম সময় নেয়। প্রয়োজনে এখানে আরও বেশ কয়েকটি প্রোটোথ্রেড রুটিন ব্যবহার করা সম্ভব এবং তাদের কাছে আরও জটিল যুক্তি দেওয়া সম্ভব।

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

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

আপনি সম্ভবত জানতে চান কিভাবে প্রোটোথ্রেড আসলে কাজ করে? যাদু কোথায় লুকিয়ে আছে? প্রোটোথ্রেডগুলি বিশেষ সি ল্যাঙ্গুয়েজ ফিচারের উপর নির্ভর করে: সি সুইচ কেস স্টেটমেন্টটি যদি বা অন্য কোনো ব্লকে (যেমন সময় বা জন্য) অন্তর্ভুক্ত করা যায়। বিস্তারিত আপনি অ্যাডাম ডানকেলস সাইটে খুঁজে পেতে পারেন

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

প্রস্তাবিত: