جدول المحتويات:

LED قابل للتعتيم باستخدام لوحة Basys 3: 5 خطوات
LED قابل للتعتيم باستخدام لوحة Basys 3: 5 خطوات

فيديو: LED قابل للتعتيم باستخدام لوحة Basys 3: 5 خطوات

فيديو: LED قابل للتعتيم باستخدام لوحة Basys 3: 5 خطوات
فيديو: My life, my Tunisia - Complete audiobook in English 2024, يوليو
Anonim
عكس الضوء LED باستخدام لوحة Basys 3
عكس الضوء LED باستخدام لوحة Basys 3

في هذا الدليل ، سنقوم ببناء نظام تعتيم LED خارجي والتحكم فيه. باستخدام الأزرار المتاحة ، يمكن للمستخدم تعتيم لمبة LED إلى أي سطوع مرغوب. يستخدم النظام لوحة Basys 3 ، وهو متصل بلوح يحتوي على مقاوم ومصباح LED. الضغط على الزر "up" المخصص سيزيد السطوع ، والضغط على الزر "down" سيقلل السطوع حتى الصفر. هذا لا يمنع فقط المستخدم من العمى بسبب المصابيح الساطعة للشمس ولكنه يحافظ أيضًا على الطاقة!

الخطوة 1: إنشاء عداد إدخال

في هذه الخطوة ، نقوم بإنشاء المكون الذي يحدد مستوى السطوع (من خلال ساعة) باستخدام مفتاحين: أحدهما للزيادة والآخر للتقليل. باستخدام VHDL ، قمنا بإنتاج العداد من خلال استخدام D flip-flops. يؤدي الضغط على الزر "لأعلى" إلى دفع الحالة التالية إلى الحالة الحالية ، حيث يتم إخراجها إلى شاشة العرض ذات الأجزاء السبعة ولمبة LED.

الكيان updown_counter هو

المنفذ (الحالة_الحالية: خارج STD_LOGIC_VECTOR (3 أسفل إلى 0) ؛ الحالة السابقة: في STD_LOGIC_VECTOR (3 أسفل إلى 0) ؛ الحالة التالية: في STD_LOGIC_VECTOR (3 أسفل إلى 0) ؛ clk: في STD_LOGIC ؛ down_enable: في STD_LOGIC ؛ STD_LOGIC: في STD_LOGIC ؛ نهاية updown_counter ؛ الهندسة المعمارية يبدأ سلوك updown_counter بالتخبط: العملية (next_state، clk، up_enable، down_enable، previous_state) تبدأ إذا (ارتفاع_حرف (clk)) ثم إذا (up_enable = '1' وليس (next_state = "0000")) ثم الحالة الحالية <= الدولة التالية elsif (down_enable = '1' وليس (previous_state = "1111")) ثم present_state <= previous_state ؛ إنهاء إذا؛ إنهاء إذا؛ نهاية العملية بالتخبط نهاية السلوك

نحتاج أيضًا إلى ساعة لكل إدخال ليتم تثبيته (عندما يرتفع) ، لذلك قمنا أيضًا بإنشاء مقسم ساعة يحدد مدى سرعة الضغط على الأزرار بين كل مستوى من مستويات السطوع. يسمح لنا مقسم الساعة هذا بعرض المستوى الصحيح بشكل صحيح على الشاشة ذات الأجزاء السبعة وإنتاج المستوى المناسب من الشدة لكل مستوى.

الكيان counter_clkDiv هو

المنفذ (clk: in std_logic ؛ sclk: خارج std_logic) ؛ نهاية counter_clkDiv ؛ العمارة my_clk_div لـ counter_clkDiv ثابتة max_count: عدد صحيح: = (10000000) ؛ إشارة tmp_clk: std_logic: = '0' ؛ start my_div: process (clk، tmp_clk) متغير div_cnt: عدد صحيح: = 0؛ ابدأ إذا (Rising_edge (clk)) ثم إذا (div_cnt> = MAX_COUNT) ثم tmp_clk <= not tmp_clk؛ div_cnt: = 0 ؛ آخر div_cnt: = div_cnt + 1 ؛ إنهاء إذا؛ إنهاء إذا؛ sclk <= tmp_clk ؛ إنهاء عملية my_div ؛ إنهاء my_clk_div ؛

الخطوة 2: إنشاء مقسم ساعة LED

في هذه الخطوة ، نقوم بإنشاء مقسم ساعة لمصباح LED لتحديد 16 مستوى مختلف من الشدة. مع إيقاف تشغيل 0 إلى 15 لعرض أقصى سطوع ، يقوم مقسم الساعة بزيادة كل زر بالضغط على ما حددناه ليكون مستويات السطوع. كل مستوى زيادة يعني زيادة في ساعة لمبة LED. تذكر أن السطوع لا يزيد خطيًا ، فقد قمنا برفع الساعة إلى أعلى مستوى يمكن أن تذهب إليه وقللنا من ساعاتنا وفقًا لذلك.

ملاحظة: نحن نستخدم مؤشر LED أزرق. سيتطلب استخدام لون مختلف (مثل الأحمر) ساعات مختلفة تمامًا تمامًا ؛ يمكن أن يكون إعداد السطوع المتوسط للأزرق بالفعل أقصى سطوع للأحمر. يحدث هذا لأن الأطوال الموجية المختلفة للضوء ستتطلب كميات مختلفة من الطاقة ، حيث تتطلب الألوان الأكثر برودة مثل البنفسجي والأزرق مزيدًا من الطاقة ، بينما تتطلب الألوان الأكثر دفئًا مثل الأحمر والبرتقالي طاقة أقل.

الكيان led_clkDiv هو المنفذ (الحالة_الحالية: في STD_LOGIC_VECTOR (3 أسفل إلى 0) ؛ clk: في STD_LOGIC ؛ led_clk: خارج STD_LOGIC) ؛ نهاية led_clkDiv ؛ سلوك العمارة led_clkDiv هو إشارة tmp_clk: std_logic: = '0' ؛ max_count المتغير المشترك: عدد صحيح ؛ بدء count_stuff: العملية (الحالة_الحالية) تبدأ الحالة الحالة الحالية عندما تكون "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 ؛ حالة النهاية عدد العمليات النهائية ؛ my_div: process (clk، tmp_clk، present_state) متغير div_cnt: عدد صحيح: = 0 ؛ ابدأ إذا (Rising_edge (clk)) ثم إذا (div_cnt> = max_count) ثم tmp_clk <= not tmp_clk؛ div_cnt: = 0 ؛ آخر 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 من Dr. Bryan Mealy نظرًا لرمزه الطويل والمعقد. ما تفعله بشكل أساسي هو دفع مدخلات الزر الخاصة بنا إلى شاشة العرض المكونة من سبعة أجزاء على لوحة Basys 3 حتى نعرف مستوى السطوع الموجود.

من الآن فصاعدًا ، تستخدم وحدة التحكم LED قلابًا لزيادة أو تقليل العدد الذي يتحكم في كل من عرض الأجزاء السبعة ومستوى سطوع لمبة LED في وقت واحد.

عداد الكيان هو المنفذ (clk: in STD_LOGIC؛ up_enable: in STD_LOGIC؛ down_enable: in STD_LOGIC؛ SEGMENTS: out STD_LOGIC_VECTOR (7 down to 0)؛ DISP_EN: out STD_LOGIC_VECTOR (3 down to 0)؛ led_clk: out STD_LOGIC)؛ عداد النهاية الهندسة المعمارية سلوك العداد هو المكون updown_counter هو المنفذ (الحالة_الحالية: خارج STD_LOGIC_VECTOR (3 أسفل إلى 0) ؛ الحالة السابقة: في STD_LOGIC_VECTOR (3 أسفل إلى 0) ؛ التالي_الحالة: في STD_LOGIC_VECTOR (3 أسفل إلى 0) ؛ clk: في STD_LOGIC ؛ STD_LOGIC ؛ down_enable up_enable: في STD_LOGIC) ؛ عنصر النهاية updown_counter ؛ المكون counter_clkDiv هو المنفذ (clk: في std_logic ؛ sclk: خارج std_logic) ؛ مكون النهاية counter_clkDiv ؛ المكون sseg_dec هو المنفذ (ALU_VAL: في std_logic_vector (7 أسفل إلى 0) ؛ SIGN: في std_logic ؛ VALID: في std_logic ؛ CLK: في std_logic ؛ DISP_EN: خارج std_logic_vector (3 downto 0) ؛ SEGMENTS: out std_logic_vector (3 downto 0)) ؛ مكون النهاية sseg_dec ؛ المكون led_clkDiv هو المنفذ (الحالة_الحالية: في STD_LOGIC_VECTOR (3 أسفل إلى 0) ؛ clk: في STD_LOGIC ؛ led_clk: خارج STD_LOGIC) ؛ المكون النهائي led_clkDiv ؛ إشارة الحالة الحالية: STD_LOGIC_VECTOR (3 أسفل إلى 0): = "0000" ؛ إشارة next_state: STD_LOGIC_VECTOR (3 لأسفل حتى 0): = "0000" ؛ الإشارة السابقة_الحالة: STD_LOGIC_VECTOR (3 لأسفل حتى 0): = "0000" ؛ إشارة Alu_Val: STD_LOGIC_VECTOR (7 downto 0) ؛ إشارة sclk: STD_LOGIC ؛ تبدأ Alu_Val (7 downto 4) <= "0000" ؛ Alu_Val (3 downto 0) <= present_state ؛ next_state (0) <= not (present_state (0)) ؛ next_state (1) <= present_state (0) xor present_state (1) ؛ next_state (2) <= (present_state (0) and present_state (1)) xor present_state (2) ؛ next_state (3) <= (current_state (0) and present_state (1) and 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) ؛ display: sseg_dec port map (ALU_VAL => Alu_Val، SIGN => '0'، VALID => '1'، CLK => clk، DISP_EN => DISP_EN، SEGMENTS => SEGMENTS) ؛ led_div: led_clkDiv port map (clk => clk، present_state => present_state، led_clk => led_clk) ؛ clk_div: counter_clkDiv خريطة المنفذ (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) ، وبرمجة اللوحة الخاصة بك ، والازدهار! لقد حصلت على لوحة عمل لنفسك.

ملاحظة: يمكن العثور على تعيين الدبوس في ورقة بيانات Basys 3 هنا.

المجسم

الخطوة 5: استخدام مفتاح التعتيم

إذا سارت الأمور على ما يرام ، يجب أن يكون لديك نظام باهتة يعمل بكامل طاقته. للتلخيص ، سيؤدي الضغط على الزر العلوي إلى زيادة سطوعك (وصولاً إلى 15) ، وسيؤدي الضغط على الزر السفلي إلى تقليل السطوع (وصولاً إلى 0). آمل أن يكون كل شيء على ما يرام لبصرك المريح الآن!

موصى به: