فهرست مطالب:

LED کم نور با استفاده از برد Basys 3: 5 مرحله
LED کم نور با استفاده از برد Basys 3: 5 مرحله

تصویری: LED کم نور با استفاده از برد Basys 3: 5 مرحله

تصویری: LED کم نور با استفاده از برد Basys 3: 5 مرحله
تصویری: انگلستان - فرانسه: یک چهارم نهایی - جام جهانی فوتبال 2022 - پیش بینی، تجزیه و تحلیل، آمار 2024, جولای
Anonim
LED کم نور با استفاده از برد Basys 3
LED کم نور با استفاده از برد Basys 3

در این راهنما ما قصد داریم یک سیستم کم نور LED خارجی را بسازیم و کنترل کنیم. با استفاده از دکمه های موجود ، کاربر می تواند لامپ LED را تا میزان روشنایی دلخواه کم کند. این سیستم از برد Basys 3 استفاده می کند و به یک تخته نان متصل است که حاوی مقاومت و لامپ LED است. فشار دادن دکمه تعیین شده "بالا" باعث افزایش روشنایی می شود و فشار دادن دکمه "پایین" روشنایی را تا صفر کاهش می دهد. این امر نه تنها مانع از کور شدن کاربر توسط لامپ های روشن مانند خورشید می شود ، بلکه باعث صرفه جویی در مصرف انرژی نیز می شود!

مرحله 1: ایجاد شمارنده ورودی

برای این مرحله ما مولفه ای را ایجاد می کنیم که سطح روشنایی (از طریق یک ساعت) را با استفاده از دو سوئیچ تعیین می کند: یکی برای افزایش و دیگری برای کاهش. با استفاده از VHDL ، ما شمارنده را با استفاده از فلیپ فلاپ های D تولید کردیم. فشار دادن دکمه "بالا" حالت بعدی را به وضعیت فعلی هدایت می کند و به صفحه نمایش هفت بخش و لامپ LED خروجی می دهد.

نهاد updown_counter است

بندر (حال حاضر: خروجی STD_LOGIC_VECTOR (3 پایین 0) ؛ previous_state: در STD_LOGIC_VECTOR (3 پایین 0 تا) ؛ next_state: در STD_LOGIC_VECTOR (3 پایین 0) ؛ clk: STD_LOGGIC؛ پایان Updown_counter؛ معماری رفتار Updown_counter شروع فلاپ است: روند (next_state ، clk ، up_enable ، down_enable ، previous_state) اگر (افزایش next_state؛ elsif (down_enable = '1' و نه (previous_state = "1111")) سپس present_state <= previous_state؛ پایان اگر؛ پایان اگر؛ پایان فرآیند فلاپ ؛ پایان دادن به رفتار ؛

ما همچنین به یک ساعت برای اتصال هر ورودی (هنگام افزایش) نیاز داریم ، بنابراین یک تقسیم کننده ساعت نیز ایجاد کردیم که تعیین می کند با چه سرعتی می توان دکمه ها را بین هر سطح روشنایی فشار داد. این تقسیم ساعت به ما اجازه می دهد تا سطح مناسب را در صفحه هفت قسمت به درستی نمایش دهیم و شدت مناسب را برای هر سطح تولید کنیم.

نهاد counter_clkDiv است

بندر (clk: در std_logic ؛ sclk: out std_logic) ؛ پایان counter_clkDiv؛ معماری my_clk_div از counter_clkDiv ثابت max_count است: عدد صحیح: = (10000000)؛ سیگنال tmp_clk: std_logic: = '0'؛ begin my_div: process (clk، tmp_clk) متغیر div_cnt: integer: = 0؛ اگر (افزایش_دانه (clk)) و سپس اگر (div_cnt> = MAX_COUNT) سپس tmp_clk <= نه tmp_clk؛ div_cnt: = 0؛ else div_cnt: = div_cnt + 1؛ پایان اگر؛ پایان اگر؛ sclk <= tmp_clk؛ پایان روند my_div؛ پایان my_clk_div؛

مرحله 2: ایجاد تقسیم ساعت LED

برای این مرحله ما یک ساعت تقسیم کننده برای لامپ LED ایجاد می کنیم تا 16 سطح مختلف شدت را تعیین کند. با خاموش بودن 0 تا 15 نمایش حداکثر روشنایی ، تقسیم ساعت هر فشار دکمه را بر اساس میزان روشنایی افزایش می دهد. هر سطح افزایش به معنی افزایش ساعت برای لامپ LED است. به یاد داشته باشید که روشنایی بصورت خطی افزایش نمی یابد ، ما ساعت را به بالاترین میزان ممکن رساندیم و بر این اساس ساعت خود را کاهش دادیم.

توجه: ما از LED آبی استفاده می کنیم. استفاده از یک رنگ متفاوت (مانند قرمز) به طور کلی به ساعتهای کمی متفاوت نیاز دارد. یک تنظیم روشنایی متوسط برای آبی می تواند حداکثر روشنایی برای قرمز باشد. این امر به این دلیل اتفاق می افتد که طول موج های مختلف نور به مقادیر متفاوتی از انرژی نیاز دارند ، رنگهای سردتر مانند بنفش و آبی نیاز به انرژی بیشتری دارند ، در حالی که رنگهای گرمتر مانند قرمز و نارنجی به انرژی کمتری نیاز دارند.

نهاد led_clkDiv Port است (وضعیت فعلی: در 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) شروع مورد 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: process (clk، tmp_clk، present_state) متغیر div_cnt: integer: = 0؛ اگر if (افزایش div_cnt: = 0؛ else div_cnt: = div_cnt + 1؛ پایان اگر؛ پایان اگر؛ led_clk <= tmp_clk؛ پایان روند my_div؛ پایان دادن به رفتار ؛

مرحله 3: ایجاد کنترلر LED

اکنون که ما تا اینجا پیشرفت کرده ایم ، وقت آن است که در نهایت همه اجزایی که تاکنون ایجاد کرده ایم را در فایل LED Controller ترکیب کنیم.

به طور خلاصه ، اجزای مورد استفاده به شرح زیر است:

  • شمارنده ورودی (updown_counter)
  • تقسیم ساعت (counter_clkDiv)
  • تقسیم ساعت LED (led_clkDiv)
  • درایور صفحه نمایش هفت بخش (sseg_dec) (فایل پیوست)

درایور صفحه نمایش هفت قسمتی قبلاً مورد بحث قرار نگرفت زیرا ما در واقع فایل VHDL را از دکتر برایان میلی به دلیل کد طولانی و پیچیده آن وام گرفته بودیم. آنچه در اصل انجام می دهد این است که ورودی های دکمه ما را به صفحه هفت قسمتی روی برد Basys 3 هدایت می کند تا بدانیم میزان روشنایی در چه سطحی است.

با حرکت رو به جلو ، کنترلر LED از دمپایی برای افزایش یا کاهش تعداد استفاده می کند که هم صفحه نمایش هفت قسمت و هم سطح روشنایی لامپ LED را همزمان کنترل می کند.

شمارنده نهاد Port است (clk: در STD_LOGIC ؛ up_enable: در STD_LOGIC ؛ down_enable: در STD_LOGIC ؛ SEGMENTS: خارج از STD_LOGIC_VECTOR (7 پایین 0) ؛ DISP_EN: خروجی STD_LOGIC_VECTOR: 3 خروجی)؛ شمارنده انتهایی ؛ معماری رفتار شمارنده جزء updown_counter پورت است (وضعیت_حال: خارج up_enable: در STD_LOGIC) ؛ پایان جزء updown_counter؛ جزء counter_clkDiv Port است (clk: در std_logic ؛ sclk: out std_logic) ؛ جزء پایان counter_clkDiv؛ جزء sseg_dec Port است (ALU_VAL: در std_logic_vector (7 پایین 0) ؛ امضا: در std_logic ؛ معتبر: در std_logic ؛ CLK: در std_logic ؛ DISP_EN: out std_logic_vector (3 پایین 0) ؛ SEGMENTS: 0 ؛ جزء پایان sseg_dec؛ جزء led_clkDiv بندر است (وضعیت حال حاضر: در STD_LOGIC_VECTOR (3 پایین 0) ؛ clk: در STD_LOGIC ؛ led_clk: خارج STD_LOGIC) ؛ جزء پایان led_clkDiv؛ سیگنال present_state: STD_LOGIC_VECTOR (3 پایین 0): = "0000"؛ سیگنال next_state: STD_LOGIC_VECTOR (3 پایین 0): = "0000"؛ سیگنال previous_state: STD_LOGIC_VECTOR (3 پایین 0): = "0000"؛ سیگنال Alu_Val: STD_LOGIC_VECTOR (7 پایین به 0)؛ سیگنال sclk: STD_LOGIC؛ شروع Alu_Val (7 پایین 4) <= "0000"؛ Alu_Val (3 پایین 0) <= state_state؛ 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) <= (state_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) <= (state_state (0) nor 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_clk نقشه پورت div (clk => clk، present_state => present_state، led_clk => led_clk) ؛ clk_div: counter_clk نقشه پورت div (clk => clk، sclk => sclk) ؛ پایان دادن به رفتار ؛

مرحله 4: ایجاد محدودیت ها و مونتاژ

محدودیت ها

برای راه اندازی و برنامه ریزی صحیح برد Basys 3 ، ابتدا باید فایل محدودیت های خود را که به این مرحله ضمیمه شده است ، تنظیم کنیم. تنظیمات زیر تنظیم شده است:

دکمه ها

  • T18 را به "up_enable" تغییر داد (افزایش روشنایی)
  • U17 را به "down_enable" (کاهش روشنایی) تغییر داد

نمایش 7 قسمتی

  • W7 ، W6 ، U8 ، V8 ، U5 ، V5 ، U7 ، V7 نشان دهنده هر بخش از یک صفحه نمایش است
  • U2 ، U4 ، V4 ، W4 هر آندی را نشان می دهد (فقط 2 عدد فعال است زیرا بیشترین عدد ما 15 است)

سربرگ PMOD JC

JC7 جایی است که ما یکی از سیم های لامپ LED را متصل می کنیم و سیم دیگر به GROUND منتهی می شود

پس از تنظیم همه اینها ، تنها کاری که باید انجام دهید این است که بیت استریم خود را (با هر نرم افزاری که از Vivado استفاده می کنید) ایجاد کنید ، برد خود را برنامه ریزی کرده و رونق بگیرید! شما برای خود یک تخته کار تهیه کرده اید.

توجه: نقشه پین را می توانید در Datasheet Basys 3 پیدا کنید.

مونتاژ

مرحله 5: از سوئیچ دیمر خود استفاده کنید

اگر همه چیز خوب پیش رفت ، باید یک سیستم کم نور کاملاً عملکردی داشته باشید. به طور خلاصه ، با فشار دادن دکمه بالا روشنایی شما (تا 15) افزایش می یابد و با فشار دادن دکمه پایین روشنایی شما کاهش می یابد (تا 0). امیدوارم همه چیز برای بینایی آرام شما خوب پیش برود!

توصیه شده: