বেসিস 3 বোর্ড ব্যবহার করে Dimmable LED: 5 টি ধাপ
বেসিস 3 বোর্ড ব্যবহার করে Dimmable LED: 5 টি ধাপ
Anonim
বেসিস 3 বোর্ড ব্যবহার করে Dimmable LED
বেসিস 3 বোর্ড ব্যবহার করে Dimmable LED

এই নির্দেশিকায় আমরা একটি বহিরাগত LED ডিমিং সিস্টেম তৈরি এবং নিয়ন্ত্রণ করতে যাচ্ছি। উপলব্ধ বোতামগুলির সাহায্যে, ব্যবহারকারী LED বাল্বকে যে কোন কাঙ্ক্ষিত উজ্জ্বলতায় কমিয়ে দিতে পারেন। সিস্টেমটি বেসিস 3 বোর্ড ব্যবহার করে এবং এটি একটি রুটিবোর্ডের সাথে সংযুক্ত থাকে যাতে একটি প্রতিরোধক এবং LED বাল্ব থাকে। নির্ধারিত "আপ" বোতাম টিপলে উজ্জ্বলতা বাড়বে, এবং "ডাউন" বোতাম টিপলে উজ্জ্বলতা পুরোপুরি শূন্যে নেমে আসবে। এটি কেবল ব্যবহারকারীকে উজ্জ্বল-দ্য-সান লাইট বাল্ব দ্বারা অন্ধ হতে বাধা দেয় না বরং এটি শক্তি সংরক্ষণ করে!

ধাপ 1: ইনপুট কাউন্টার তৈরি করুন

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

সত্তা updown_counter হয়

বন্দর (present_state: আউট STD_LOGIC_VECTOR (0 ডাউনটো 3); পূর্ববর্তী_স্টেট: STD_LOGIC_VECTOR (3 ডাউনটো 0); next_state: STD_LOGIC_VECTOR (3 ডাউনটো 0); শেষ update_counter; আপডাউন_কাউন্টারের স্থাপত্যের আচরণ ফ্লপ শুরু হয়: প্রক্রিয়া (next_state, clk, up_enable, down_enable, previous_state) যদি শুরু হয় (রাইজিং_ইজ (clk)) তারপর যদি (up_enable = '1' এবং না (next_state = "0000")) তাহলে present_state <= next_state; elsif (down_enable = '1' এবং না (previous_state = "1111")) তারপর present_state <= previous_state; যদি শেষ; যদি শেষ; শেষ প্রক্রিয়া ফ্লপ; শেষ আচরণ;

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

সত্তা counter_clkDiv হয়

পোর্ট (clk: in std_logic; sclk: out std_logic); শেষ counter_clkDiv; স্থাপত্য my_clk_div এর counter_clkDiv ধ্রুবক max_count: পূর্ণসংখ্যা: = (10000000); সিগন্যাল tmp_clk: std_logic: = '0'; শুরু my_div: প্রক্রিয়া (clk, tmp_clk) পরিবর্তনশীল div_cnt: পূর্ণসংখ্যা: = 0; যদি শুরু হয় div_cnt: = 0; অন্যথায় div_cnt: = div_cnt + 1; যদি শেষ; যদি শেষ; sclk <= tmp_clk; শেষ প্রক্রিয়া my_div; শেষ my_clk_div;

ধাপ 2: এলইডি ক্লক ডিভাইডার তৈরি করুন

এই ধাপের জন্য আমরা 16 টি ভিন্ন মাত্রার তীব্রতা নির্ধারণের জন্য LED বাল্বের জন্য একটি ঘড়ি বিভাজক তৈরি করি। 0 থেকে 15 তে সর্বাধিক উজ্জ্বলতা প্রদর্শনের সাথে সাথে, ঘড়ির বিভাজক প্রতিটি বাটন চাপ দেয় যা আমরা উজ্জ্বলতার মাত্রা হিসাবে সেট করি। প্রতিটি বর্ধিত স্তর LED বাল্বের জন্য ঘড়ির বৃদ্ধি বোঝায়। মনে রাখবেন যে উজ্জ্বলতা রৈখিকভাবে বৃদ্ধি পায় না, আমরা ঘড়িটিকে সর্বাধিক ক্র্যাঙ্ক করেছিলাম এবং সে অনুযায়ী আমাদের ঘড়িগুলি হ্রাস করে।

দ্রষ্টব্য: আমরা একটি নীল LED ব্যবহার করছি। একটি ভিন্ন রঙ (যেমন লাল) ব্যবহার করার জন্য সম্পূর্ণ ভিন্ন ঘড়ির প্রয়োজন হবে; নীল জন্য একটি মাঝারি উজ্জ্বলতা সেটিং ইতিমধ্যে লাল জন্য সর্বোচ্চ উজ্জ্বলতা হতে পারে। এটি ঘটে কারণ আলোর বিভিন্ন তরঙ্গদৈর্ঘ্যের জন্য বিভিন্ন পরিমাণ শক্তির প্রয়োজন হবে, যেমন বেগুনি এবং নীল রঙের শীতল রঙের জন্য বেশি শক্তির প্রয়োজন হয়, যখন লাল এবং কমলার মতো উষ্ণ রঙের কম শক্তির প্রয়োজন হয়।

সত্তা led_clkDiv হল পোর্ট (present_state: STD_LOGIC_VECTOR (3 ডাউনটো 0); clk: STD_LOGIC; led_clk: STD_LOGIC এর বাইরে); শেষ led_clkDiv; led_clkDiv এর আর্কিটেকচার বিহেভিয়ারাল হল সিগন্যাল tmp_clk: std_logic: = '0'; ভাগ করা পরিবর্তনশীল max_count: integer; count_stuff: process (present_state) start case present_state হয় যখন "0000" => max_count: = 0; যখন "0001" => max_count: = 2; যখন "0010" => max_count: = 4; যখন "0011" => max_count: = 6; যখন "0100" => max_count: = 8; যখন "0101" => max_count: = 10; যখন "0110" => max_count: = 12; যখন "0111" => max_count: = 14; যখন "1000" => max_count: = 16; যখন "1001" => max_count: = 25; যখন "1010" => max_count: = 50; যখন "1011" => max_count: = 100; যখন "1100" => max_count: = 150; যখন "1101" => max_count: = 200; যখন "1110" => max_count: = 250; যখন "1111" => max_count: = 300; শেষ কেস; শেষ প্রক্রিয়া count_stuff; my_div: প্রক্রিয়া (clk, tmp_clk, present_state) পরিবর্তনশীল div_cnt: পূর্ণসংখ্যা: = 0; যদি শুরু হয় div_cnt: = 0; অন্যথায় div_cnt: = div_cnt + 1; যদি শেষ; যদি শেষ; led_clk <= tmp_clk; শেষ প্রক্রিয়া my_div; শেষ আচরণ;

ধাপ 3: LED কন্ট্রোলার তৈরি করা

এখন যেহেতু আমরা এটিকে এতদূর তৈরি করেছি, এখনই শেষ পর্যন্ত আমাদের তৈরি করা সমস্ত উপাদানগুলিকে LED কন্ট্রোলার ফাইলে একত্রিত করার সময় এসেছে।

সংক্ষেপে, ব্যবহৃত উপাদানগুলি নিম্নরূপ:

  • ইনপুট কাউন্টার (updown_counter)
  • ঘড়ি বিভাজক (counter_clkDiv)
  • LED ক্লক ডিভাইডার (led_clkDiv)
  • সেভেন সেগমেন্ট ডিসপ্লে ড্রাইভার (sseg_dec) (সংযুক্ত ফাইল)

সাত-সেগমেন্ট ডিসপ্লে ড্রাইভারটি আসলে আগে আলোচনা করা হয়নি কারণ আমরা আসলে দীর্ঘ এবং জটিল কোডের কারণে ড Dr. ব্রায়ান মেলির কাছ থেকে ভিএইচডিএল ফাইল ধার করেছিলাম। এটি মূলত যা করে তা হল আমাদের বাটন ইনপুটগুলিকে বেসিস 3 বোর্ডে সাত-সেগমেন্ট ডিসপ্লেতে নিয়ে যাওয়া যাতে আমরা জানতে পারি যে কোন স্তরের উজ্জ্বলতা রয়েছে।

সামনের দিকে, এলইডি কন্ট্রোলার ফ্লিপ ফ্লপ ব্যবহার করে গণনা বৃদ্ধি বা হ্রাস করে যা সাতটি সেগমেন্ট ডিসপ্লে এবং LED বাল্বের উজ্জ্বলতার মাত্রা একই সাথে নিয়ন্ত্রণ করে।

সত্তা কাউন্টার হল পোর্ট (clk: STD_LOGIC এ; up_enable: STD_LOGIC এ; down_enable: STD_LOGIC এ; সেগমেন্টস: STD_LOGIC_VECTOR আউট (7 ডাউনটো 0); শেষ কাউন্টার; স্থাপত্য আচরণের পাল্টা হল উপাদান updown_counter হল পোর্ট (present_state: আউট STD_LOGIC_VECTOR (3 downto 0); previous_state: STD_LOGIC_VECTOR- এ up_enable: STD_LOGIC এ); শেষ উপাদান updown_counter; উপাদান counter_clkDiv হল পোর্ট (clk: std_logic; sclk: out std_logic); শেষ উপাদান counter_clkDiv; কম্পোনেন্ট sseg_dec হল পোর্ট (ALU_VAL: std_logic_vector (7 downto 0); SIGN: std_logic; VALID: std_logic; CLK: std_logic;; শেষ উপাদান sseg_dec; উপাদান led_clkDiv হল পোর্ট (present_state: STD_LOGIC_VECTOR (0 ডাউনটো 0); clk: STD_LOGIC; led_clk: STD_LOGIC এর বাইরে); শেষ উপাদান led_clkDiv; সিগন্যাল present_state: STD_LOGIC_VECTOR (0 ডাউনটো 0): = "0000"; সংকেত next_state: STD_LOGIC_VECTOR (3 ডাউনটো 0): = "0000"; সিগন্যাল previous_state: STD_LOGIC_VECTOR (3 ডাউনটো 0): = "0000"; আলু_ওয়াল সংকেত: STD_LOGIC_VECTOR (0 ডাউনটোতে 7); সিগন্যাল sclk: STD_LOGIC; Alu_Val শুরু করুন (7 থেকে 4 পর্যন্ত) <= "0000"; আলু_ওয়াল (3 ডাউনটো 0) <= বর্তমান_ রাজ্য; next_state (0) <= not (present_state (0)); next_state (1) <= present_state (0) xor present_state (1); next_state (2) <= (present_state (0) এবং present_state (1)) xor present_state (2); next_state (3) <= (present_state (0) এবং present_state (1) এবং present_state (2)) xor present_state (3); previous_state (0) <= not (present_state (0)); previous_state (1) <= present_state (0) xnor present_state (1); previous_state (2) <= (present_state (0) অথবা present_state (1)) xor present_state (2); previous_state (3) sclk, next_state => next_state, previous_state => previous_state, up_enable => up_enable, down_enable => down_enable, present_state => present_state); প্রদর্শন: sseg_dec পোর্ট ম্যাপ (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv পোর্ট ম্যাপ (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv পোর্ট ম্যাপ (clk => clk, sclk => sclk); শেষ আচরণ;

ধাপ 4: সীমাবদ্ধতা এবং সমাবেশ স্থাপন

সীমাবদ্ধতা

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

বোতাম

  • T18 কে "up_enable" এ পরিবর্তন করা হয়েছে (উজ্জ্বলতা বৃদ্ধি করুন)
  • U17 কে "ডাউন_নেবল" এ পরিবর্তন করা হয়েছে (উজ্জ্বলতা হ্রাস করুন)

7 সেগমেন্ট ডিসপ্লে

  • W7, W6, U8, V8, U5, V5, U7, V7 একটি প্রদর্শনীর প্রতিটি অংশের প্রতিনিধিত্ব করে
  • U2, U4, V4, W4 প্রদর্শিত প্রতিটি অ্যানোডের প্রতিনিধিত্ব করে (শুধুমাত্র 2 টি সক্রিয় কারণ আমাদের সর্বোচ্চ সংখ্যা 15)

PMOD হেডার JC

JC7 হল যেখানে আমরা LED বাল্বের একটি তারের সাথে সংযোগ স্থাপন করি এবং অন্য তারটি গ্রাউন্ডের দিকে নিয়ে যায়।

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

দ্রষ্টব্য: পিন ম্যাপিং এখানে Basys 3 ডেটাশীটে পাওয়া যাবে।

সমাবেশ

ধাপ 5: আপনার ডিমার সুইচ ব্যবহার করে

যদি সবকিছু ঠিকঠাক থাকে তবে আপনার একটি সম্পূর্ণরূপে কার্যকরী ডিমার সিস্টেম থাকা উচিত। সংক্ষেপে বলতে গেলে, উপরের বোতাম টিপলে আপনার উজ্জ্বলতা বৃদ্ধি পাবে (15 পর্যন্ত), এবং ডাউন বোতাম টিপলে আপনার উজ্জ্বলতা হ্রাস পাবে (0 পর্যন্ত সমস্ত উপায়)। আশা করি আপনার এখন আরামদায়ক দৃষ্টিশক্তির জন্য সব ঠিক আছে!

প্রস্তাবিত: