সুচিপত্র:

ATtiny13 এবং WS2812: 7 ধাপ সহ একটি $ 1 LED মুড ল্যাম্প
ATtiny13 এবং WS2812: 7 ধাপ সহ একটি $ 1 LED মুড ল্যাম্প

ভিডিও: ATtiny13 এবং WS2812: 7 ধাপ সহ একটি $ 1 LED মুড ল্যাম্প

ভিডিও: ATtiny13 এবং WS2812: 7 ধাপ সহ একটি $ 1 LED মুড ল্যাম্প
ভিডিও: ESP32 Tutorial 54 - Set WS2812 LED Strip Color over Wifi | SunFounder's ESP32 IoT Learnig kit 2024, নভেম্বর
Anonim
ATtiny13 এবং WS2812 সহ একটি $ 1 LED মুড ল্যাম্প
ATtiny13 এবং WS2812 সহ একটি $ 1 LED মুড ল্যাম্প

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

একটি একক বোর্ড কম্পিউটারে ব্যক্তিগত CalDAV সার্ভার
একটি একক বোর্ড কম্পিউটারে ব্যক্তিগত CalDAV সার্ভার
একটি একক বোর্ড কম্পিউটারে ব্যক্তিগত CalDAV সার্ভার
একটি একক বোর্ড কম্পিউটারে ব্যক্তিগত CalDAV সার্ভার
এলসিডি আক্রমণকারী: 16x2 এলসিডি ক্যারেক্টার ডিসপ্লেতে একটি স্পেস ইনভেডার্স লাইক গেম
এলসিডি আক্রমণকারী: 16x2 এলসিডি ক্যারেক্টার ডিসপ্লেতে একটি স্পেস ইনভেডার্স লাইক গেম
এলসিডি আক্রমণকারী: 16x2 এলসিডি ক্যারেক্টার ডিসপ্লেতে একটি স্পেস ইনভেডার্স লাইক গেম
এলসিডি আক্রমণকারী: 16x2 এলসিডি ক্যারেক্টার ডিসপ্লেতে একটি স্পেস ইনভেডার্স লাইক গেম
অক্টারিন: WS2812 RGB LEDs সহ একটি কালার ম্যাচিং গেম
অক্টারিন: WS2812 RGB LEDs সহ একটি কালার ম্যাচিং গেম
অক্টারিন: WS2812 RGB LEDs সহ একটি কালার ম্যাচিং গেম
অক্টারিন: WS2812 RGB LEDs সহ একটি কালার ম্যাচিং গেম

এটি একটি স্বল্পমূল্যের মুড ল্যাম্প যার চারটি মোড রয়েছে।

1. রেইনবো স্পার্ক। আলোর একটি স্ফুলিঙ্গ সময়ের সাথে সাথে উপরের দিকে চলে যায় এবং ধীরে ধীরে রঙ পরিবর্তন করে।

2. রেইনবো গ্লো। একটি স্থিতিশীল আভা যা ধীরে ধীরে রঙ পরিবর্তন করে।

3. মোমবাতি আগুন সিমুলেশন।

4. বন্ধ।

আপনি উপরে একটি টাচ বোতাম ট্যাপ করে মোড পরিবর্তন করতে পারেন। বর্তমান মোড EEPROM মেমরিতে পাওয়ার অফ করার পর সেভ করা হয়।

ATtiny13 কত ছোট?

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

এই প্রকল্পের মধ্যে সবচেয়ে চ্যালেঞ্জিং ছিল সমস্ত কোডকে ATtiny13 এ ঠেলে দেওয়া। মাইক্রোকন্ট্রোলারে রয়েছে 1K বাইট ফ্ল্যাশ এবং মাত্র 64 বাইট র‍্যাম। হ্যাঁ, যখন আমি "বাইট" বলি, আমার মানে আটটি বিট নিয়ে গঠিত। আপনার সমস্ত স্থানীয় ভেরিয়েবল এবং কল স্ট্যাকের জন্য 64 বাইট। এটা পরিষ্কার করার জন্য, বিবেচনা করুন আমাদের 8 RGB LEDs নিয়ন্ত্রণ করতে হবে। তাদের প্রত্যেককে 3 বাইট (যথাক্রমে লাল, সবুজ এবং নীল চ্যানেলের জন্য) দ্বারা সংজ্ঞায়িত করা হয়েছে। সুতরাং, কেবলমাত্র 8 টি এলইডি স্টেট রাখার জন্য, আমাদের 8 টি স্ট্রাকচার 3 বাইটের একটি অ্যারে বাস্তবায়ন করতে হবে এবং এই অ্যারের শুরুতে একটি পয়েন্টার আরও একটি বাইট লাগবে। সুতরাং, 64 বাইটের মধ্যে 25 টি বেরিয়ে গেছে। আমরা মাত্র%% র‍্যাম ব্যবহার করেছি এবং এখনো শুরু করিনি। উপরন্তু, সাতটি মৌলিক রংধনু সংরক্ষণ করার জন্য, আপনার 7 × 3 = 21 বাইটের প্রয়োজন হবে, তাই 72% র RAM্যাম শেষ হয়ে গেছে। আচ্ছা, মৌলিক রঙের ক্ষেত্রে, আমি অতিরঞ্জিত করি: র‍্যামে তাদের একই সময়ে আমাদের সবার প্রয়োজন নেই এবং সেগুলি কখনই পরিবর্তিত হয় না, তাই সেগুলি র.্যামের পরিবর্তে ফ্ল্যাশে সংরক্ষণ করার জন্য একটি ধ্রুবক অ্যারে হিসাবে প্রয়োগ করা যেতে পারে। যাইহোক, এটি ব্যবহৃত হার্ডওয়্যার সম্পর্কে একটি সামগ্রিক ধারণা দেয়।

অকাল অপ্টিমাইজেশন সম্পর্কে নুথের বক্তব্যটি মনে রেখে, আমি কী ঘটে তা দেখতে তিনটি ল্যাম্প মোড আলাদাভাবে প্রোটোটাইপ করা থেকে শুরু করেছি। আমি তাদের আলাদাভাবে পরীক্ষা করেছি যাতে তারা সঠিকভাবে কাজ করে এবং প্রত্যেকটি আমার মাইক্রোকন্ট্রোলারের সাথে মানানসই হয়। এটা সম্পন্ন করতে কয়েকটা সন্ধ্যা লেগেছিল এবং সবকিছু ঠিকঠাক চলছিল … যতক্ষণ না আমি সেগুলো সুইচ স্টেটমেন্টের ভিতরে একত্রিত করার চেষ্টা করেছি। avr-size ইউটিলিটি রিপোর্ট করেছে 1.5 Kb টেক্সট সেকশন সাইজ (avs-gcc এর -s পতাকা সহ)। সেই মুহুর্তে আমার মূল উদ্দেশ্য ছিল 2Kb ফ্ল্যাশ দিয়ে কিছু ATtiny25 দখল করা এবং এটি এই গল্পের সুখী সমাপ্তি হতে পারে।

কিন্তু একরকম আমি অনুভব করেছি যে যথেষ্ট অপ্টিমাইজেশনের পরে আমি সেই কপাল কোডটিকে 1 কেবিতে সঙ্কুচিত করতে পারি। যাইহোক, এটা বুঝতে আরও এক সপ্তাহ লেগেছে যে এটা অসম্ভব এবং যেভাবেই হোক তা সম্পন্ন করতে আরও এক সপ্তাহ। আমাকে একটি রংধনু পাঁচটি মৌলিক রঙে কাটাতে হয়েছিল (উল্লেখযোগ্য চাক্ষুষ পার্থক্য ছাড়াই)। আমি কেস স্টেটমেন্ট থেকে মুক্তি পেয়েছি এবং বাইনারি কোড সাইজ কমানোর জন্য if-then-if এর চেইন ব্যবহার করেছি। ফায়ার অ্যানিমেশনের জন্য একটি ছদ্মবেশী সংখ্যা জেনারেটর প্রয়োজন যা বেশ ভারী, তাই আমি ধ্রুবক প্রাথমিক মান সহ এলএফএসআর এর একটি সরলীকৃত সংস্করণ প্রয়োগ করেছি। আমি পিআরএনজি পূর্ণ চক্রের দৈর্ঘ্য সম্পর্কে চিন্তা করি না এবং কেবল কোড আকার এবং "বাস্তবসম্মত ফায়ার অ্যানিমেশন" এর মধ্যে একটি বংশানুক্রমিক ভারসাম্য খুঁজছি। আমি অনেক ছোটখাটো অপ্টিমাইজেশন প্রয়োগ করেছি যা আমি এখন মনে করতে পারছি না এবং এমনকি চিপে আগুন ছাড়াও সমস্ত মোড ফ্ল্যাশ করতে পেরেছি। যখন আমার ধারণা শেষ হয়ে গেল, আমার মোট কোড ছিল প্রায় 1200 বাইট।

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

avrdude: ফ্ল্যাশ লেখা (1004 বাইট):

লেখা | ############################################# | 100% 0.90 সে

এটা বলার দরকার নেই যে আমি বর্তমান মোড সঞ্চয় করার জন্য প্রায় সব RAM এবং EEPROM এর মাত্র একটি বাইট ব্যবহার করেছি। আমি বলছি না যে এটি একটি আদর্শ এবং চূড়ান্ত বাস্তবায়ন। এটি কেবল কাজ করে এবং মাইক্রোকন্ট্রোলারকে ফিট করে। আমি নিশ্চিত, আপনি এটি আরও ভাল করতে পারেন। আমি সত্যিই তাই. আমি কেবল একটি দৃশ্যত অবৈধ সমস্যা সমাধানের মজা শেয়ার করতে চাই যা আপনি শুরুতে প্রায় অসম্ভব বলে মনে করেন। "এইভাবে, হ্যাকিং মানে যা সম্ভব তার সীমা অন্বেষণ করা …" -রিচার্ড স্টলম্যান

সরবরাহ:

1x ATtiny13 MCU (SOP-8 প্যাকেজে MCU এর জন্য $ 0.28 = $ 0.24 এবং DIP8 অ্যাডাপ্টারের জন্য $ 0.04)

8x WS2812 RGB LEDs (আমি একটি বোর্ড বা LED স্ট্রাইপের একটি টুকরা সুপারিশ করি) ($ 0.42)

1x TTP223 টাচ বোতাম ($ 0.10)

1x মাইক্রো ইউএসবি থেকে ডিআইপি অ্যাডাপ্টার ($ 0.14)

1x 10kΩ প্রতিরোধক (<$ 0.01)

1x 100nF সিরামিক ক্যাপাসিটর (<$ 0.01)

1x 10–47µF ইলেক্ট্রোলাইটিক ক্যাপাসিটর (<$ 0.01)

মোট <$ 0.97

ধাপ 1: সফটওয়্যার সেটআপ

সফটওয়্যার সেটআপ
সফটওয়্যার সেটআপ

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

github.com/arduinocelentano/t13_ws2812_lamp

আপনার একটি light_ws2812 লাইব্রেরিরও প্রয়োজন হবে:

github.com/cpldcpu/light_ws2812

একবার আপনি avr-gcc টুলচেইন এবং প্রকল্পের উৎস পেয়ে গেলে, আপনার টার্মিনালটি চালান এবং নিম্নলিখিত কোডটি টাইপ করুন:

সিডি পাথ/থেকে/প্রকল্প

তৈরি করা

পদক্ষেপ 2: মাইক্রোকন্ট্রোলার প্রোগ্রামিং

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

যদি আপনার কোন ধরণের USBASP প্রোগ্রামার থাকে, তবে এটির পিনআউট অনুযায়ী এটিকে অ্যাটিনির সাথে সংযুক্ত করুন। সাধারণত এটি দেখতে এইরকম হবে কিন্তু আমি দৃ actual়ভাবে আপনার প্রকৃত পিনআউট পরীক্ষা করার সুপারিশ!

বিকল্পভাবে, আপনি একটি প্রোগ্রামার হিসাবে একটি Arduino বোর্ড ব্যবহার করতে পারেন। Arduino IDE খুলুন এবং "File → Examples" মেনুতে Arduino ISP উদাহরণটি খুঁজুন। স্কেচ আপলোড করার পর আপনার Arduino বোর্ড একজন প্রোগ্রামার হিসেবে কাজ করে। স্কেচ কোডে মন্তব্যগুলি আপনাকে পিনআউট করার একটি সূত্র দেবে।

এখন দৌড়

ফ্ল্যাশ করা

MCU ফ্ল্যাশ করতে এবং

ফিউজ তৈরি করুন

ফিউজ বিট সেট করতে।

প্রস্তাবিত: