Përmbajtje:

LED i zbehtë duke përdorur tabelën Basys 3: 5 hapa
LED i zbehtë duke përdorur tabelën Basys 3: 5 hapa

Video: LED i zbehtë duke përdorur tabelën Basys 3: 5 hapa

Video: LED i zbehtë duke përdorur tabelën Basys 3: 5 hapa
Video: Электрика в квартире своими руками. Финал. Переделка хрущевки от А до Я. #11 2024, Korrik
Anonim
LED i zbehtë duke përdorur bordin Basys 3
LED i zbehtë duke përdorur bordin Basys 3

Në këtë udhëzues ne do të ndërtojmë dhe kontrollojmë një sistem të jashtëm të zbehjes LED. Me butonat e disponueshëm, përdoruesi mund ta zbehë llambën LED në çdo shkëlqim të dëshiruar. Sistemi përdor bordin Basys 3, dhe është i lidhur me një dërrasë buke që përmban një rezistencë dhe llambën LED. Shtypja e butonit të caktuar "lart" do të rrisë shkëlqimin, dhe shtypja e butonit "poshtë" do të zvogëlojë shkëlqimin deri në zero. Kjo jo vetëm që e pengon përdoruesin të verbohet nga llamba të ndritshme, por gjithashtu kursen energji!

Hapi 1: Krijoni një numërues hyrës

Për këtë hap ne krijojmë përbërësin që përcakton nivelin e ndriçimit (përmes një ore) duke përdorur dy ndërprerës: një për të rritur dhe një për të zvogëluar. Duke përdorur VHDL, ne prodhuam sportelin përmes përdorimit të rrokullisjeve D. Shtypja e butonit "lart" e shtyn gjendjen tjetër në gjendjen aktuale, duke dalë në ekranin me shtatë segmente dhe llambën LED.

njësia updown_counter është

Port (shteti aktual: jashtë STD_LOGIC_VECTOR (3 poshtë 0); gjendja e mëparshme: në STD_LOGIC_VECTOR (3 nga 0 në 0); shteti tjetër: në STD_LOGIC_VECTOR (3 poshtë 0); clk: në STD_LOGGIC; poshtë; përfundoni rinovimin_ counter; arkitektura Sjellja e updown_counter është fillimi i dështimit: procesi (shteti tjetër, clk, lart_aktivizimi, poshtë_aktivizimi, gjendja e mëparshme) fillon nëse (ngritja_shtimit (clk)) pastaj nëse (up_enable = '1' dhe jo (next_state = "0000")) atëherë present_state <= shteti i ardhshëm; elsif (down_enable = '1' dhe jo (shteti i mëparshëm = "1111")) atëherë shteti i pranishëm <= shteti i mëparshëm; mbaron nëse; mbaron nëse; përfundimi i procesit dështim; fund Sjellja;

Ne gjithashtu kemi nevojë për një orë që secila hyrje të fiksohet (kur ngrihet), kështu që ne gjithashtu krijuam një ndarës të orës që përcakton se sa shpejt mund të shtypen butonat midis çdo niveli shkëlqimi. Ky ndarës i orës na lejon të shfaqim siç duhet nivelin e duhur në ekranin me shtatë segmente dhe të prodhojmë nivelin e duhur të intensitetit për secilin nivel.

entiteti counter_clkDiv është

Port (clk: në std_logic; sclk: out std_logic); fund counter_clkDiv; arkitektura my_clk_div e counter_clkDiv është konstante max_count: numër i plotë: = (10000000); sinjal tmp_clk: std_logic: = '0'; fillo my_div: proces (clk, tmp_clk) ndryshore div_cnt: numër i plotë: = 0; filloni nëse (buzë_e ngritur (clk)) pastaj nëse (div_cnt> = MAX_COUNT) atëherë tmp_clk <= jo tmp_clk; div_cnt: = 0; tjetër div_cnt: = div_cnt + 1; mbaron nëse; mbaron nëse; sclk <= tmp_clk; përfundoj procesin my_div; mbaroj my_clk_div;

Hapi 2: Krijoni ndarësin e orës LED

Për këtë hap ne krijojmë një ndarës të orës për llambën LED për të përcaktuar 16 nivele të ndryshme të intensitetit. Me 0 që është fikur në 15 duke shfaqur shkëlqimin maksimal, pjesëtuesi i orës rrit çdo shtypje të butonit me atë që kemi vendosur të jetë niveli i shkëlqimit. Çdo nivel në rritje nënkuptonte një rritje të orës për llambën LED. Duke kujtuar se shkëlqimi nuk rritet në mënyrë lineare, ne e ngritëm orën në nivelin më të lartë që mund të shkonte dhe i ulëm orët tona në përputhje me rrethanat.

Shënim: ne po përdorim një LED blu. Përdorimi i një ngjyre të ndryshme (si e kuqja) do të kërkojë orë pak më ndryshe; një mjedis ndriçimi mesatar për ngjyrën blu tashmë mund të jetë shkëlqimi maksimal për të kuqen. Kjo ndodh sepse gjatësi vale të ndryshme të dritës do të kërkojnë sasi të ndryshme të energjisë, me ngjyrat më të ftohta si vjollca dhe bluja që kërkojnë më shumë energji, ndërsa ngjyrat më të ngrohta si e kuqja dhe portokallia kërkojnë më pak energji.

entiteti led_clkDiv është Port (gjendja e tanishme: në STD_LOGIC_VECTOR (3 poshtë 0); clk: në STD_LOGIC; led_clk: jashtë STD_LOGIC); fund led_clkDiv; arkitektura Sjellja e led_clkDiv është sinjal tmp_clk: std_logic: = '0'; ndryshorja e përbashkët max_count: integer; fillo count_stuff: process (present_state) begin case case_state është kur "0000" => max_count: = 0; kur "0001" => max_count: = 2; kur "0010" => max_count: = 4; kur "0011" => max_count: = 6; kur "0100" => max_count: = 8; kur "0101" => max_count: = 10; kur "0110" => max_count: = 12; kur "0111" => max_count: = 14; kur "1000" => max_count: = 16; kur "1001" => max_count: = 25; kur "1010" => max_count: = 50; kur "1011" => max_count: = 100; kur "1100" => max_count: = 150; kur "1101" => max_count: = 200; kur "1110" => max_count: = 250; kur "1111" => max_count: = 300; rasti përfundimtar; përfundimi i procesit të numërimit të_produkteve; my_div: proces (clk, tmp_clk, present_state) ndryshore div_cnt: integer: = 0; filloni nëse (buzë_e ngritur (clk)) pastaj nëse (div_cnt> = max_count) atëherë tmp_clk <= jo tmp_clk; div_cnt: = 0; tjetër div_cnt: = div_cnt + 1; mbaron nëse; mbaron nëse; led_clk <= tmp_clk; përfundoj procesin my_div; fund Sjellja;

Hapi 3: Krijimi i kontrolluesit LED

Tani që e kemi arritur deri tani, është koha që më në fund të kombinojmë të gjithë përbërësit që kemi krijuar deri më tani në skedarin Controller LED.

Për ta përmbledhur, përbërësit e përdorur janë si më poshtë:

  • Numëruesi i hyrjes (updown_counter)
  • Ndarës i orës (counter_clkDiv)
  • Ndarës i orës LED (led_clkDiv)
  • Drejtuesi i ekranit me shtatë segmente (sseg_dec) (skedari i bashkangjitur)

Drejtuesi i ekranit me shtatë segmente në fakt nuk ishte diskutuar më parë sepse ne në fakt huazuam skedarin VHDL nga Dr. Bryan Mealy për shkak të kodit të tij të gjatë dhe të komplikuar. Ajo që në thelb bën është të çojë inputet e butonave tanë në ekranin me shtatë segmente në tabelën Basys 3, në mënyrë që të dimë se në çfarë niveli ndriçimi është.

Duke ecur përpara, Kontrolluesi LED përdor rrokullisje për të rritur ose ulur numrin që kontrollon si ekranin e shtatë segmenteve ashtu edhe nivelin e shkëlqimit të llambës LED njëkohësisht.

numëruesi i entitetit është Port (clk: në STD_LOGIC; up_enable: në STD_LOGIC; down_enable: në STD_LOGIC; SEGMENTS: jashtë STD_LOGIC_VECTOR (7 poshtë 0); DISP_EN: jashtë STD_LOGIC_VECTOR: 3 jashtë; numërues fundi; arkitektura Sjellja e sportelit është komponenti updown_counter është Port (gjendja e tanishme: jashtë STD_LOGIC_VECTOR (3 poshtë 0); shteti i mëparshëm: në STD_LOGIC_VECTOR (3 poshtë 0); shteti tjetër: në STD_LOGIC_VECTOR; 3 downto; up_enable: në STD_LOGIC); komponenti përfundimtar updown_counter; komponenti counter_clkDiv është Port (clk: në std_logic; sclk: out std_logic); komponenti përfundimtar counter_clkDiv; komponenti sseg_dec është Port (ALU_VAL: në std_logic_vector (7 në 0); NIGNSHKRIM: në std_logic; E VLEFSHME: në std_logic; CLK: në std_logic; DISP_EN: jashtë std_logic_vector (3 poshtë 0); SEGMENTS: 7; komponenti fundor sseg_dec; komponenti led_clkDiv është Port (gjendja e tanishme: në STD_LOGIC_VECTOR (3 poshtë 0); clk: në STD_LOGIC; led_clk: jashtë STD_LOGIC); komponenti fundor led_clkDiv; sinjali i gjendjes aktuale: STD_LOGIC_VECTOR (3 poshtë 0): = "0000"; sinjal shteti tjetër_: STD_LOGIC_VECTOR (3 poshtë 0): = "0000"; sinjal shteti i mëparshëm: STD_LOGIC_VECTOR (3 poshtë 0): = "0000"; sinjal Alu_Val: STD_LOGIC_VECTOR (7 poshtë 0); sinjal sclk: STD_LOGIC; fillo Alu_Val (7 poshtë 4) <= "0000"; Alu_Val (3 poshtë 0) <= shteti aktual; shteti i ardhshëm (0) <= jo (shteti aktual (0)); shteti i ardhshëm (1) <= shteti_paraqitës (0) xor shteti aktual (1); shteti i ardhshëm (2) <= (shteti aktual (0) dhe shteti i pranishëm (1)) ose shteti i pranishëm (2); shteti i ardhshëm (3) <= (shteti_prezent (0) dhe shteti_paraqitës (1) dhe shteti_paraqitës (2)) ose shteti_prezent (3); shteti i mëparshëm (0) <= jo (shteti aktual (0)); shteti i mëparshëm (1) <= shteti aktual (0) xn ose shteti aktual (1); shteti i mëparshëm (2) <= (shteti aktual (0) as shteti aktual (1)) ose shteti i tashëm (2); shteti i mëparshëm (3) sclk, next_state => shteti tjetër, shteti i mëparshëm => shteti i mëparshëm, up_enable => lart_enable, down_enable => poshtë_enable, present_state => shteti aktual); shfaqja: harta e portit sseg_dec (ALU_VAL => Alu_Val, SIGN => '0', VALID => '1', CLK => clk, DISP_EN => DISP_EN, SEGMENTS => SEGMENTS); led_div: led_clkDiv hartë e portit (clk => clk, present_state => shteti aktual, led_clk => led_clk); clk_div: counter_clkHarta e portit të divit (clk => clk, sclk => sclk); fund Sjellja;

Hapi 4: Vendosja e Kufizimeve dhe Asambleja

Kufizimet

Për të konfiguruar dhe programuar siç duhet tabelën Basys 3, së pari duhet të konfigurojmë skedarin tonë të kufizimeve i cili i është bashkangjitur këtij hapi. Cilësimet e mëposhtme janë rregulluar:

Butonat

  • Ndryshuar T18 në "up_enable" (rrit shkëlqimin)
  • U17 u ndryshua në "down_enable" (ul shkëlqimin)

Ekran me 7 segmente

  • W7, W6, U8, V8, U5, V5, U7, V7 përfaqësojnë çdo segment të një ekrani
  • U2, U4, V4, W4 përfaqësojnë secilën anodë të shfaqur (vetëm 2 janë aktive sepse numri ynë më i lartë është 15)

Kryetari PMOD JC

JC7 është vendi ku lidhim njërën prej telave të llambës LED, dhe tela tjetër çon në GROUND

Pasi të keni vendosur gjithçka, gjithçka që duhet të bëni është të krijoni bitstream tuaj (me çfarëdo softueri që përdorni, dmth. Vivado), programoni bordin tuaj dhe lulëzoni! Ju keni marrë një bord pune.

Shënim: Hartëzimi i kunjave mund të gjendet në fletën e të dhënave Basys 3 këtu.

Kuvendi

Hapi 5: Përdorimi i çelësit të zbehësit tuaj

Nëse gjithçka shkon mirë, duhet të keni një sistem dimmer plotësisht funksionues. Për ta përmbledhur, shtypja e butonit të lartë do të rrisë shkëlqimin tuaj (deri në 15), dhe shtypja e butonit poshtë do të zvogëlojë shkëlqimin tuaj (deri në 0). Shpresoj që gjithçka të shkojë mirë për shikimin tuaj tani të relaksuar!

Recommended: