תוכן עניינים:
- שלב 1: צור מונה קלט
- שלב 2: צור מחלק שעון LED
- שלב 3: יצירת בקר ה- LED
- שלב 4: קביעת אילוצים והרכבה
- שלב 5: שימוש במתג העמעם שלך
וִידֵאוֹ: LED שניתן לעמעם באמצעות לוח Basys 3: 5 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:14
במדריך זה אנו הולכים לבנות ולשלוט על מערכת עמעום LED חיצונית. בעזרת הכפתורים הזמינים, המשתמש יכול לעמעם את נורת הלד לכל בהירות רצויה. המערכת משתמשת בלוח Basys 3, והיא מחוברת ללוח לחם המכיל נגד ונורת הלד. לחיצה על כפתור "למעלה" המיועד תגדיל את הבהירות ולחיצה על כפתור "למטה" תפחית את הבהירות עד לאפס. זה לא רק מונע מהמשתמש להסתנוור מנורות בהירות כשמש, אלא שהוא גם חוסך אנרגיה!
שלב 1: צור מונה קלט
עבור שלב זה אנו יוצרים את הרכיב הקובע את רמת הבהירות (באמצעות שעון) באמצעות שני מתגים: אחד להגדיל ואחד לירידה. באמצעות VHDL, ייצרנו את הדלפק באמצעות כפכפי D. לחיצה על כפתור "למעלה" מעבירה את המצב הבא למצב הנוכחי, ומוציאה לתצוגת שבעה המגזרים ולנורת ה- 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; up_enable: ב-; סוף updown_counter; ארכיטקטורה ההתנהגות של updown_counter מתחילה בפלופ: תהליך (next_state, clk, up_enable, down_enable, previous_state) מתחיל אם (rising_edge (clk)) ואז אם (up_enable = '1' ולא (next_state = "0000")) ואז present_state <= הבא_מדינה; elsif (down_enable = '1' ולא (previous_state = "1111")) ואז present_state <= previous_state; סוף אם; סוף אם; סיום פלופ התהליך; סוף התנהגותי;
אנו זקוקים גם לשעון עבור כל קלט שניתן להיצמד אליו (כאשר הוא עולה), ולכן יצרנו גם מחלק שעון הקובע כמה מהר ניתן ללחוץ על הלחצנים בין כל רמת בהירות. מחלק השעונים הזה מאפשר לנו להציג כראוי את הרמה הנכונה בתצוגת שבעת הקטע ולייצר את רמת העוצמה הנכונה עבור כל רמה.
ישות counter_clkDiv היא
Port (clk: in std_logic; sclk: out std_logic); סוף counter_clkDiv; האדריכלות my_clk_div של counter_clkDiv היא קבועה max_count: integer: = (10000000); אות tmp_clk: std_logic: = '0'; התחל 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
עבור שלב זה אנו יוצרים מחלק שעון לנורת הלד לקביעת 16 רמות עוצמה שונות. כאשר 0 כבוי ל -15 מציג בהירות מרבית, מחלק השעון מגדיל כל לחיצה על כפתור לפי מה שהגדרנו להיות רמות הבהירות. כל עלייה ברמה פירושה עלייה בשעון הנורה LED. נזכור כי הבהירות אינה גדלה באופן לינארי, הפעלנו את השעון לגבוה ביותר שהוא יכול ללכת והורדנו את השעונים בהתאם.
הערה: אנו משתמשים בנורית כחולה. שימוש בצבע אחר (כמו אדום) ידרוש שעונים מעט שונים לגמרי; הגדרת בהירות בינונית לכחול יכולה להיות כבר בהירות מרבית עבור אדום. זה קורה מכיוון שאורכי גל שונים של אור ידרשו כמויות שונות של אנרגיה, כאשר הצבעים הקרירים יותר כמו סגול וכחול דורשים יותר אנרגיה, בעוד שהצבעים החמים יותר כמו אדום וכתום דורשים פחות אנרגיה.
ישות led_clkDiv היא Port (present_state: ב- STD_LOGIC_VECTOR (3 עד 0); clk: ב- STD_LOGIC; led_clk: out STD_LOGIC); סוף led_clkDiv; ארכיטקטורה ההתנהגות של led_clkDiv היא אות tmp_clk: std_logic: = '0'; משתנה משותף max_count: integer; begin count_stuff: process (present_state) begin 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: 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.
לסיכום, הרכיבים בהם נעשה שימוש הם כדלקמן:
- מונה קלט (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; קטעים: החוצה STD_LOGIC_VECTOR (7 עד 0); DISP_EN: החוצה STD_LOGIC_VECTOR (3 למטה 0); led_clk: החוצה STD_LOGIC); מונה קצה; ארכיטקטורה התנהגות המונה היא רכיב updown_counter הוא יציאה (present_state: out STD_LOGIC_VECTOR (3 downto 0); state_state: in STD_LOGIC_VECTOR (3 downto 0); next_state: in STD_LOGIC_VECTOR (3 downto 0); clk: in STD_LOGIC; down_enable: in_ENOG: up_enable: ב- STD_LOGIC); רכיב סוף updown_counter; רכיב counter_clkDiv הוא Port (clk: in std_logic; sclk: out std_logic); רכיב קצה counter_clkDiv; רכיב sseg_dec הוא Port (ALU_VAL: ב- std_logic_vector (7 למטה ל -0); SIGN: ב- std_logic; VALID: ב- std_logic; CLK: ב- std_logic; DISP_EN: out std_logic_vector (3 למטה 0); מגזרים 0); רכיב סוף sseg_dec; רכיב led_clkDiv הוא Port (present_state: ב- STD_LOGIC_VECTOR (3 עד 0); clk: ב- STD_LOGIC; led_clk: out STD_LOGIC); רכיב סוף led_clkDiv; signal present_state: STD_LOGIC_VECTOR (3 downto 0): = "0000"; האות next_state: STD_LOGIC_VECTOR (3 עד 0): = "0000"; אות הקודם_מדינה: STD_LOGIC_VECTOR (3 עד 0): = "0000"; אות Alu_Val: STD_LOGIC_VECTOR (7 עד 0); אות sclk: STD_LOGIC; התחל Alu_Val (7 downto 4) <= "0000"; Alu_Val (3 עד 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) ו- present_state (1)) xor present_state (2); next_state (3) <= (present_state (0) ו- present_state (1) ו- present_state (2)) xor present_state (3); הקודם_מדינה (0) <= not (present_state (0)); הקודם_מדינה (1) <= present_state (0) xnor present_state (1); קודמת_מדינה (2) <= (נוכח_מצב (0) ולא_הווה_מצב (1)) או_הווה_מצב (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: קביעת אילוצים והרכבה
אילוצים
כדי להתקין ולתכנן את לוח 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
לאחר שהגדרת את כל זה, כל שעליך לעשות הוא ליצור את bitstream שלך (עם כל תוכנה שבה אתה משתמש, כלומר Vivado), לתכנת את הלוח שלך ובום! קיבלת לעצמך לוח עבודה.
הערה: מיפוי הסיכות ניתן למצוא בגיליון הנתונים של Basys 3 כאן.
הַרכָּבָה
שלב 5: שימוש במתג העמעם שלך
אם הכל מתנהל כשורה, אמורה להיות לך מערכת דימר המתפקדת באופן מלא. לסיכום, לחיצה על הכפתור העליון תגדיל את הבהירות שלך (עד 15) ולחיצה על הלחצן למטה תפחית את הבהירות שלך (עד 0). מקווה שהכל יסתדר לראייתך הנינוחה כעת!
מוּמלָץ:
עשה זאת בעצמך -- כיצד להכין רובוט עכביש שניתן לשלוט בו באמצעות סמארטפון באמצעות Arduino Uno: 6 שלבים
עשה זאת בעצמך || איך להכין רובוט עכביש שאפשר לשלוט בו באמצעות סמארטפון באמצעות Arduino Uno: בזמן ייצור רובוט עכביש אפשר ללמוד כל כך הרבה דברים על רובוטיקה. כמו לייצר רובוטים זה גם מבדר וגם מאתגר. בסרטון זה אנו הולכים להראות לכם כיצד לייצר רובוט עכביש, אותו נוכל להפעיל באמצעות הסמארטפון שלנו (Androi
תאורת LED שניתן לעמעם: 11 שלבים
תאורת LED שניתן לעמעם: בנה את תאורת ה- LED שלך 18W להילחם בכחולי החורף. תיבת אור זו מפושטת וניתן לעיכול באמצעות PWM. אם יש לך טיימר מנורה, אתה יכול להשתמש בו כחלופה לשעון מעורר
לוח LED שניתן לעמעם: 15 שלבים (עם תמונות)
לוח LED שניתן לעמעם: כשראיתי את תחרות ה- LED גרם לי לחשוב אם יש משהו שיהיה כיף להכין עם מנורות LED משומשות. אני לא ממש איש חשמל אז חשבתי שזה יהיה אתגר מהנה. כבר זמן מה חיפשתי להשיג מנורת עבודה אז
מנורת LED צפונית LED שניתן לעמעם: 5 שלבים (עם תמונות)
מנורת LED צפונית LED שניתן לעמעם: נורות הצפה לעיתים נוטות להפסיק לעבוד לאורך זמן, אם כי כיום הן משתמשות במנורות LED. זה יכול לנבוע מסיבות רבות כגון התחממות יתר או תקלה במנהג ה- LED או תקלה בתהליך הייצור. רובנו בסופו של דבר זורקים מוצר
מערך לד שניתן לעמעם: 4 שלבים
מערך לד שניתן לעמעם: פרויקט זה משיג שלוש מטרות עיקריות:- קריאת ערך אנלוגי מפוטנציומטר- כתוב ערך אנלוגי לכל לד- השתנה הבהירות של כל לד על בסיס קלט הפוטנציומטר חומרים נדרשים:- 5 נוריות- פוטנציומטר- (5) גודל של 220 אוהם