Turinys:
- 1 veiksmas: sukurkite įvesties skaitiklį
- 2 veiksmas: sukurkite LED laikrodžio daliklį
- 3 žingsnis: sukurkite LED valdiklį
- 4 žingsnis: Apribojimų nustatymas ir surinkimas
- 5 veiksmas: reguliatoriaus naudojimas
Video: Reguliuojamas šviesos diodas naudojant „Basys 3“plokštę: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:46
Šiame vadove mes ketiname sukurti ir valdyti išorinę šviesos diodų pritemdymo sistemą. Naudodamas galimus mygtukus, vartotojas gali pritemdyti LED lemputę iki norimo ryškumo. Sistema naudoja „Basys 3“plokštę ir yra prijungta prie duonos lentos, kurioje yra rezistorius ir LED lemputė. Paspaudus nurodytą mygtuką „aukštyn“, ryškumas padidės, o paspaudus mygtuką „žemyn“- ryškumas sumažės iki nulio. Tai ne tik neleidžia vartotojui apakinti ryškių saulės spindulių lempučių, bet ir taupo energiją!
1 veiksmas: sukurkite įvesties skaitiklį
Šiam žingsniui mes sukuriame komponentą, kuris nustato ryškumo lygį (per laikrodį), naudodami du jungiklius: vieną padidinti ir kitą sumažinti. Naudodami VHDL, skaitiklį pagaminome naudodami D šlepetes. Paspaudus mygtuką „aukštyn“, būsena perkeliama į dabartinę būseną, išvedama į septynių segmentų ekraną ir LED lemputę.
subjektas updown_counter yra
Uostas (dabartinė_stata: iš STD_LOGIC_VECTOR (nuo 3 iki 0); ankstesnė_statė: į STD_LOGIC_VECTOR (nuo 3 iki 0); kita_statė: į STD_LOGIC_VECTOR (nuo 3 iki 0); clk: į STD_LOGIC; įjungta: įjungta: pagal STD_LOGIC; up_enable: į ST) end updown_counter; architektūra Updown_counter elgsena prasideda flop: procesas (next_state, clk, up_enable, down_enable, previous_state) prasideda if (kylančioji briauna (clk)) tada if (up_enable = '1', o ne (next_state = "0000")) tada present_state <= next_state; elsif (down_enable = '1', o ne (ankstesnė_stata = "1111")) tada dabartinė_stata <= ankstesnė_stata; pabaiga, jei; pabaiga, jei; pabaigos proceso šnipštas; pabaiga Elgesys;
Mums taip pat reikia laikrodžio, kad kiekvienas įėjimas būtų užfiksuotas (kai jis pakyla), todėl mes taip pat sukūrėme laikrodžio daliklį, kuris nustato, kaip greitai galima paspausti mygtukus tarp kiekvieno ryškumo lygio. Šis laikrodžio daliklis leidžia tinkamai parodyti tinkamą lygį septynių segmentų ekrane ir kiekvienam lygiui sukurti reikiamą intensyvumo lygį.
subjektas counter_clkDiv yra
Uostas (clk: in std_logic; sclk: out std_logic); end counter_clkDiv; architektūra my_clk_div iš counter_clkDiv yra pastovi max_count: integer: = (10000000); signalas tmp_clk: std_logic: = '0'; pradėti my_div: process (clk, tmp_clk) kintamasis div_cnt: integer: = 0; pradėti, jei (kylančioji briauna (clk)), tada jei (div_cnt> = MAX_COUNT), tada tmp_clk <= ne tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; pabaiga, jei; pabaiga, jei; sclk <= tmp_clk; baigti procesą my_div; pabaiga my_clk_div;
2 veiksmas: sukurkite LED laikrodžio daliklį
Šiam žingsniui sukuriame laikrodžio daliklį, skirtą LED lemputei, kad būtų galima nustatyti 16 skirtingų stiprumo lygių. Kai 0 yra išjungtas iki 15, rodomas maksimalus ryškumas, laikrodžio daliklis kiekvieną mygtuko paspaudimą padidina pagal mūsų nustatytus ryškumo lygius. Kiekvienas didėjantis lygis reiškė LED lemputės laikrodžio padidėjimą. Prisimindami, kad ryškumas nedidėja tiesiškai, mes pasukome laikrodį iki aukščiausios galios ir atitinkamai sumažinome laikrodžius.
Pastaba: mes naudojame mėlyną šviesos diodą. Naudojant kitokią spalvą (pvz., Raudoną), iš viso reikės šiek tiek skirtingų laikrodžių; vidutinio ryškumo mėlynos spalvos nustatymas jau gali būti maksimalus raudonos spalvos ryškumas. Taip atsitinka todėl, kad skirtingiems šviesos bangos ilgiams reikės skirtingo energijos kiekio, o šaltesnėms spalvoms, tokioms kaip violetinė ir mėlyna, reikia daugiau energijos, o šiltesnėms spalvoms, tokioms kaip raudona ir oranžinė, reikia mažiau energijos.
subjektas led_clkDiv yra uostas (dabartinė_stata: į STD_LOGIC_VECTOR (3 iki 0); clk: į STD_LOGIC; led_clk: iš STD_LOGIC); pabaiga led_clkDiv; architektūra LED_clkDiv elgsena yra signalas tmp_clk: std_logic: = '0'; bendrinamas kintamasis maks. kai "0001" => max_count: = 2; kai "0010" => max_count: = 4; kai "0011" => max_count: = 6; kai "0100" => max_count: = 8; kai "0101" => max_count: = 10; kai "0110" => max_count: = 12; kai "0111" => max_count: = 14; kai "1000" => max_count: = 16; kai "1001" => max_count: = 25; kai "1010" => max_count: = 50; kai "1011" => max_count: = 100; kai "1100" => max_count: = 150; kai "1101" => max_count: = 200; kai "1110" => max_count: = 250; kai "1111" => max_count: = 300; pabaigos atvejis; pabaigos procesas count_stuff; my_div: process (clk, tmp_clk, present_state) kintamasis div_cnt: sveikasis skaičius: = 0; pradėti, jei (kylančioji briauna (clk)), tada jei (div_cnt> = max_count), tada tmp_clk <= ne tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; pabaiga, jei; pabaiga, jei; led_clk <= tmp_clk; baigti procesą my_div; pabaiga Elgesys;
3 žingsnis: sukurkite LED valdiklį
Dabar, kai pasiekėme tiek laiko, atėjo laikas pagaliau sujungti visus iki šiol sukurtus komponentus į LED valdiklio failą.
Apibendrinant, naudojami šie komponentai:
- Įvesties skaitiklis (updown_counter)
- Laikrodžio daliklis (counter_clkDiv)
- LED laikrodžio daliklis (led_clkDiv)
- Septynių segmentų ekrano tvarkyklė (sseg_dec) (pridėtas failas)
Septynių segmentų ekrano tvarkyklė anksčiau nebuvo aptarta, nes mes iš tikrųjų pasiskolinome VHDL failą iš daktaro Bryano Mealy dėl ilgo ir sudėtingo kodo. Tai iš esmės nukreipia mūsų mygtuko įvestis į septynių segmentų ekraną „Basys 3“plokštėje, kad žinotume, koks ryškumo lygis.
Judėdamas į priekį, LED valdiklis naudoja šlepetes, kad padidintų arba sumažintų skaičių, kuris vienu metu valdo septynių segmentų ekraną ir LED lemputės ryškumo lygį.
objekto skaitiklis yra prievadas (clk: STD_LOGIC; up_enable: in STD_LOGIC; down_enable: 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); galinis skaitiklis; architektūra Skaitiklio elgesys yra komponentas upown_counter yra uostas (dabartinė_stata: iš STD_LOGIC_VECTOR (nuo 3 iki 0); ankstesnė_statė: į STD_LOGIC_VECTOR (nuo 3 iki 0); next_state: į STD_LOGIC_VECTOR (nuo 3 iki 0); clk: in STD_LOGIC; in ST_Lable) up_enable: STD_LOGIC); pabaigos komponentas updown_counter; komponentas counter_clkDiv yra prievadas (clk: in std_logic; sclk: out std_logic); pabaigos komponentas counter_clkDiv; komponentas sseg_dec yra prievadas (ALU_VAL: std_logic_vector (7 iki 0); SIGN: in std_logic; VALID: in std_logic; CLK: in std_logic; DISP_EN: out std_logic_vector (3 downto 0); SEGMENTS: out 0 std_); pabaigos komponentas sseg_dec; komponentas led_clkDiv yra prievadas (dabartinė_stata: į STD_LOGIC_VECTOR (3 iki 0); clk: į STD_LOGIC; led_clk: iš STD_LOGIC); pabaigos komponentas led_clkDiv; signalas dabartinė_stata: STD_LOGIC_VECTOR (nuo 3 iki 0): = "0000"; signalas next_state: STD_LOGIC_VECTOR (3 iki 0): = "0000"; signalas ankstesnė_stata: STD_LOGIC_VECTOR (nuo 3 iki 0): = "0000"; signalas Alu_Val: STD_LOGIC_VECTOR (nuo 7 iki 0); signalo sclk: STD_LOGIC; pradėti Alu_Val (nuo 7 iki 4) <= "0000"; Alu_Val (3 iki 0) <= dabartinė_stata; kita_stata (0) <= ne (dabartinė_stata (0)); kita_stata (1) <= dabartinė_stata (0) x arba dabartinė_stata (1); kita_stata (2) <= (dabartinė_stata (0) ir dabartinė_stata (1)) x arba dabartinė_stata (2); kita_stata (3) <= (dabartinė_stata (0) ir dabartinė_stata (1) ir dabartinė_stata (2)) x arba dabartinė_stata (3); ankstesnė_stata (0) <= ne (dabartinė_stata (0)); ankstesnė_stata (1) <= dabartinė_stata (0) xnor dabartinė_stata (1); ankstesnė_stata (2) <= (dabartinė_stata (0) ir dabartinė_stata (1)) x arba dabartinė_stata (2); ankstesnė_stata (3) sclk, sekanti_stata => kita_stata, ankstesnė_stata => ankstesnė_stata, aukštyn_galima => aukštyn_galima, žemyn_galima => žemyn įjungta, dabartinė_stata => dabartinė_stata); rodyti: sseg_dec uosto žemėlapis (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv uosto žemėlapis (clk => clk, present_state => present_state, led_clk => led_clk); clk_div: counter_clkDiv uosto žemėlapis (clk => clk, sclk => sclk); pabaiga Elgesys;
4 žingsnis: Apribojimų nustatymas ir surinkimas
Apribojimai
Norėdami tinkamai nustatyti ir užprogramuoti „Basys 3“plokštę, pirmiausia turime nustatyti suvaržymų failą, kuris pridedamas prie šio veiksmo. Buvo sureguliuoti šie nustatymai:
Mygtukai
- T18 pakeistas į „up_enable“(padidinkite ryškumą)
- U17 pakeistas į „down_enable“(sumažinkite ryškumą)
7 segmentų ekranas
- W7, W6, U8, V8, U5, V5, U7, V7 reiškia kiekvieną vieno ekrano segmentą
- U2, U4, V4, W4 reiškia kiekvieną rodomą anodą (tik 2 yra aktyvūs, nes didžiausias mūsų skaičius yra 15)
PMOD antraštė JC
JC7 yra vieta, kur mes prijungiame vieną iš LED lemputės laidų, o kita - prie GROUND
Nustačius visa tai, jums tereikia sugeneruoti bitų srautą (naudojant bet kokią programinę įrangą, kurią naudojate, pvz., „Vivado“), užprogramuoti plokštę ir pakilti! Turite darbo lentą.
Pastaba: kaiščių atvaizdavimą rasite „Basys 3“duomenų lape.
Surinkimas
5 veiksmas: reguliatoriaus naudojimas
Jei viskas gerai, turėtumėte turėti visiškai veikiančią apšvietimo sistemą. Apibendrinant galima pasakyti, kad paspaudus viršutinį mygtuką, ryškumas padidės (iki 15), o paspaudus žemyn - ryškumas sumažės (iki 0). Tikimės, kad viskas gerai jūsų dabar atsipalaidavusiam regėjimui!
Rekomenduojamas:
Pulsuojantis šviesos diodas naudojant 555 laikmatį ir potenciometrus: 4 žingsniai
Pulsuojantis šviesos diodas naudojant 555 laikmatį ir potenciometrus: Sveiki! Šioje pamokoje mes parodysime, kaip sukurti LED apšvietimo grandinę, kuri veikia reguliuojama laiko kilpa, naudojant potenciometrą, 555 laikmatį ir kitus pagrindinius grandinės komponentus. Šio projekto idėją pirmiausia gavome iš
„Bluetooth“valdomas šviesos diodas naudojant „Arduino Uno“: 7 žingsniai
„Bluetooth“valdomas šviesos diodas naudojant „Arduino Uno“: Šis projektas skirtas LED lempučių valdymui naudojant „Arduino“ir „Bluetooth“programą. Šiam projektui naudojau „Arduino Uno“, tačiau galite naudoti bet kurią „Arduino“plokštę. Prieš pradėdami projektą, atsisiųskite šį šaltinio kodą ir įkelkite jį į savo lentą
STM32L100 mirksintis šviesos diodas naudojant „Atollic TrueSTUDIO“ir „STM32CubeMX“: 5 žingsniai
STM32L100 mirksintis šviesos diodas naudojant „Atollic TrueSTUDIO“ir „STM32CubeMX“: Šiame projekte aš jums pasakysiu, kaip mirksėti LED naudojant 32L100discovery. Taigi čia aš jums papasakosiu apie šio „mirksėjimo“vadovo veikimo principą, taip pat apie tai, kokios rūšies programinės įrangos ir techninės įrangos jums reikia
Internetu valdomas šviesos diodas naudojant „NodeMCU“: 6 žingsniai
Internetu valdomas šviesos diodas naudojant „NodeMCU“: Daiktų internetas (daiktų internetas) yra tarpusavyje susijusių skaičiavimo įrenginių, mechaninių ir skaitmeninių mašinų, objektų, gyvūnų ar žmonių sistema, kuri turi unikalius identifikatorius ir galimybę perduoti duomenis tinklu nereikalaujant žmonių
KAIP PADARYTI IR IR IR ŠVIESOS ŠVIESOS ŠVIESOS ŠVIESOS KAMERĄ: 5 žingsniai (su paveikslėliais)
KAIP PADARYTI IR IR IR ŠVIESOS ŠVIESOS ŠVIESOS KAMERĄ: Supratau infraraudonųjų spindulių kamerą, kad galėčiau ją naudoti judesio fiksavimo sistemoje. Su juo taip pat galite gauti tokių nuostabių vaizdų: blizgių objektų, matomų fotoaparate, kurie yra normalūs realybėje. Už pigią kainą galite gauti gana gerų rezultatų. Jis