Πίνακας περιεχομένων:
- Βήμα 1: Δημιουργία μετρητή εισόδου
- Βήμα 2: Δημιουργήστε διαχωριστικό ρολογιού LED
- Βήμα 3: Δημιουργία του ελεγκτή LED
- Βήμα 4: Καθιέρωση περιορισμών και συνέλευσης
- Βήμα 5: Χρήση του διακόπτη dimmer σας
Βίντεο: Dimmable LED Χρησιμοποιώντας τον πίνακα Basys 3: 5 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:34
Σε αυτόν τον οδηγό πρόκειται να κατασκευάσουμε και να ελέγξουμε ένα εξωτερικό σύστημα φωτισμού LED. Με τα διαθέσιμα κουμπιά, ο χρήστης μπορεί να μειώσει τη λάμπα LED σε οποιαδήποτε επιθυμητή φωτεινότητα. Το σύστημα χρησιμοποιεί τον πίνακα Basys 3 και είναι συνδεδεμένος με μια σανίδα ψωμιού που περιέχει μια αντίσταση και τη λάμπα LED. Πατώντας το καθορισμένο κουμπί "πάνω" θα αυξηθεί η φωτεινότητα και το πάτημα του κουμπιού "κάτω" θα μειώσει τη φωτεινότητα μέχρι το μηδέν. Αυτό όχι μόνο εμποδίζει τον χρήστη να τυφλωθεί από λαμπτήρες όπως ο ήλιος, αλλά και εξοικονομεί ενέργεια!
Βήμα 1: Δημιουργία μετρητή εισόδου
Για αυτό το βήμα δημιουργούμε το στοιχείο που καθορίζει το επίπεδο φωτεινότητας (μέσω ρολογιού) χρησιμοποιώντας δύο διακόπτες: έναν για αύξηση και έναν για μείωση. Χρησιμοποιώντας VHDL, δημιουργήσαμε τον πάγκο με τη χρήση σαγιονάρων D. Πατώντας το κουμπί "επάνω" ωθεί την επόμενη κατάσταση στην παρούσα κατάσταση, εξάγοντας στην οθόνη των επτά τμημάτων και τη λάμπα LED.
οντότητα updown_counter είναι
Θύρα (παρούσα_ κατάσταση: εκτός STD_LOGIC_VECTOR (3 προς τα κάτω 0), προηγούμενη κατάσταση: σε STD_LOGIC_VECTOR (3 από 0 προς 0), επόμενη κατάσταση: σε STD_LOGIC_VECTOR (3 κάτω προς 0); τερματισμός updown_counter? αρχιτεκτονική Συμπεριφορά του updown_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: σε 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; ξεκινήστε εάν (αυξανόμενη_ακμή (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 is 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: ακέραιος; έναρξη count_stuff: διαδικασία (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: διαδικασία (clk, tmp_clk, present_state) μεταβλητή div_cnt: ακέραιος: = 0; ξεκινήστε εάν (αυξανόμενη άκρη (clk)) στη συνέχεια εάν (div_cnt> = max_count) τότε tmp_clk <= όχι tmp_clk? 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 από τον Dr. Bryan Mealy λόγω του μακρού και περίπλοκου κώδικα. Αυτό που ουσιαστικά κάνει είναι να οδηγεί τις εισόδους των κουμπιών μας στην οθόνη επτά τμημάτων στον πίνακα Basys 3, έτσι ώστε να γνωρίζουμε σε ποιο επίπεδο φωτεινότητας υπάρχει.
Προχωρώντας προς τα εμπρός, το LED Controller χρησιμοποιεί σαγιονάρες για να αυξήσει ή να μειώσει τον αριθμό που ελέγχει τόσο την οθόνη των επτά τμημάτων όσο και το επίπεδο φωτεινότητας του λαμπτήρα LED ταυτόχρονα.
ο μετρητής οντοτήτων είναι Port (clk: σε STD_LOGIC; up_enable: σε STD_LOGIC; down_enable: σε STD_LOGIC; SEGMENTS: εκτός STD_LOGIC_VECTOR (7 κάτω προς 0); DISP_EN: out STD_LOGIC_VECTO) 3 outow; τελικός μετρητής? αρχιτεκτονική Συμπεριφορά του μετρητή είναι το στοιχείο updown_counter είναι Port (present_state: out STD_LOGIC_VECTOR (3 προς τα κάτω 0), previous_state: σε STD_LOGIC_VECTOR (3 προς τα κάτω 0); next_state: σε STD_LOGIC_VECTO_DOW: up_enable: σε STD_LOGIC); τερματικό στοιχείο updown_counter? component counter_clkDiv is Port (clk: in std_logic; sclk: out std_logic); τελικό στοιχείο counter_clkDiv; το στοιχείο sseg_dec είναι Port (ALU_VAL: σε std_logic_vector (7 προς 0); ΣΗΜΑ: σε std_logic; VALID: in std_logic; CLK: in std_logic; DISP_EN: out std_logic_vector (3 downto 0); SEGMENTS: out) ? τελικό στοιχείο sseg_dec; component led_clkDiv is Port (present_state: σε STD_LOGIC_VECTOR (3 προς τα κάτω 0); clk: σε STD_LOGIC; led_clk: out 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) <= 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); 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: Καθιέρωση περιορισμών και συνέλευσης
Περιορισμοί
Για να ρυθμίσετε και να προγραμματίσετε σωστά τον πίνακα Basys 3, πρέπει πρώτα να ρυθμίσετε το αρχείο περιορισμών που επισυνάπτεται σε αυτό το βήμα. Οι ακόλουθες ρυθμίσεις έχουν προσαρμοστεί:
Κουμπιά
- Αλλαγή T18 σε "up_enable" (αύξηση φωτεινότητας)
- Άλλαξε το U17 σε "down_enable" (μείωση φωτεινότητας)
Οθόνη 7 τμημάτων
- Τα W7, W6, U8, V8, U5, V5, U7, V7 αντιπροσωπεύουν κάθε τμήμα μιας οθόνης
- U2, U4, V4, W4 αντιπροσωπεύουν κάθε άνοδο που εμφανίζεται (μόνο 2 είναι ενεργές επειδή ο μεγαλύτερος αριθμός μας είναι 15)
PMOD Header JC
Το JC7 είναι όπου συνδέουμε ένα από τα καλώδια του λαμπτήρα LED και το άλλο καλώδιο οδηγεί στο GROUND
Αφού τα ρυθμίσετε όλα αυτά, το μόνο που έχετε να κάνετε είναι να δημιουργήσετε το bitstream (με οποιοδήποτε λογισμικό χρησιμοποιείτε, δηλαδή το Vivado), να προγραμματίσετε τον πίνακα και να κάνετε έκρηξη! Έχετε έναν πίνακα εργασίας.
Σημείωση: Η αντιστοίχιση καρφιτσών βρίσκεται στο φύλλο δεδομένων Basys 3 εδώ.
Συνέλευση
Βήμα 5: Χρήση του διακόπτη dimmer σας
Εάν όλα πάνε καλά, θα πρέπει να έχετε ένα πλήρως λειτουργικό σύστημα dimmer. Συνοψίζοντας, το πάτημα του επάνω κουμπιού θα αυξήσει τη φωτεινότητά σας (μέχρι 15) και το πάτημα του κουμπιού κάτω θα μειώσει τη φωτεινότητά σας (μέχρι το 0). Ελπίζω να πάνε όλα καλά για τη χαλαρή πλέον όρασή σας!
Συνιστάται:
Πώς να δημιουργήσετε και να εισαγάγετε έναν πίνακα και να προσθέσετε επιπλέον στήλες και/ή σειρές σε αυτόν τον πίνακα στο Microsoft Office Word 2007: 11 βήματα
Πώς να δημιουργήσετε και να εισαγάγετε έναν πίνακα και να προσθέσετε επιπλέον στήλες και/ή σειρές σε αυτόν τον πίνακα στο Microsoft Office Word 2007: Είχατε ποτέ πολλά δεδομένα με τα οποία εργάζεστε και σκεφτήκατε τον εαυτό σας … " πώς μπορώ να κάνω όλα αυτά τα δεδομένα φαίνονται καλύτερα και είναι πιο εύκολα κατανοητά; " Αν ναι, τότε η απάντησή σας μπορεί να είναι ένας πίνακας στο Microsoft Office Word 2007
$ 9 RTSP Video Streamer Χρησιμοποιώντας τον πίνακα ESP32-CAM: 3 βήματα
$ 9 RTSP Video Streamer Χρησιμοποιώντας τον πίνακα ESP32-CAM: Αυτή η ανάρτηση θα σας δείξει πώς μπορείτε να δημιουργήσετε μια συσκευή ροής βίντεο αξίας $ 9 που χρησιμοποιεί RTSP και την πλακέτα ESP32-CAM. Το σκίτσο μπορεί να διαμορφωθεί για σύνδεση σε υπάρχον δίκτυο WiFi ή μπορεί επίσης να δημιουργήσει το δικό του σημείο πρόσβασης στο οποίο μπορείτε να συνδεθείτε, σε
Πώς να ελέγξετε τον κινητήρα DC χωρίς ψήκτρες Quadcopter Drone (Τύπος 3 καλωδίων) χρησιμοποιώντας τον ελεγκτή ταχύτητας κινητήρα HW30A και το Arduino UNO: 5 βήματα
Πώς να ελέγξετε τον κινητήρα DC χωρίς ψήκτρες Quadcopter Drone (Τύπος 3 καλωδίων) χρησιμοποιώντας τον ελεγκτή ταχύτητας HW30A Motor και το Arduino UNO: Περιγραφή: Ο ελεγκτής ταχύτητας κινητήρα HW30A μπορεί να χρησιμοποιηθεί με μπαταρίες LiPo 4-10 NiMH/NiCd ή 2-3 κυψελών. Το BEC είναι λειτουργικό με έως και 3 κελιά LiPo. Μπορεί να χρησιμοποιηθεί για τον έλεγχο της ταχύτητας του κινητήρα DC χωρίς ψήκτρες (3 καλώδια) με μέγιστο έως 12Vdc. Ειδικό
Πώς να προγραμματίσετε έναν πίνακα AVR χρησιμοποιώντας έναν πίνακα Arduino: 6 βήματα
Πώς να προγραμματίσετε έναν πίνακα AVR χρησιμοποιώντας έναν πίνακα Arduino: Έχετε μια πλακέτα μικροελεγκτή AVR τοποθετημένη γύρω; Είναι δύσκολο να το προγραμματίσεις; Λοιπόν, βρίσκεστε στο σωστό μέρος. Εδώ, θα σας δείξω πώς να προγραμματίσετε μια πλακέτα μικροελεγκτή Atmega8a χρησιμοποιώντας έναν πίνακα Arduino Uno ως προγραμματιστή. Χωρίς λοιπόν
Μια συσκευή μέτρησης ομιλίας UV, χρησιμοποιώντας τον αισθητήρα VEML6075 και τον μικρό φίλο ομιλητή: 5 βήματα
Μια συσκευή μέτρησης που μιλάει με δείκτη UV, χρησιμοποιώντας τον αισθητήρα VEML6075 και το Little Buddy Talker: Τα καλοκαίρια έρχονται! Ο ήλιος λάμπει! Αυτό είναι υπέροχο. Αλλά καθώς η υπεριώδης (UV) ακτινοβολία γίνεται πιο έντονη, άνθρωποι σαν εμένα παθαίνουν φακίδες, μικρά καφέ νησιά που κολυμπούν σε μια θάλασσα κόκκινου, ηλιοκαμένου, φαγούρα δέρματος. Να μπορείς να έχεις πληροφορίες σε πραγματικό χρόνο