FAQ | Points | Add... | Recent posts | Search | Register | Log in


przeliczanie na drogę ALTERA Cyclone w Quartusie


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Programmable Systems -> przeliczanie na drogę ALTERA Cyclone w Quartusie
Author
Message
baku123
Poziom 3
Poziom 3


Joined: 21 Mar 2007
Posts: 5
Location: Białystok

Post#1 Post from the author of the topic 06 Dec 2011 00:25   

przeliczanie na drogę ALTERA Cyclone w Quartusie


Mam do zrobienia "miernik odległości" a ma to wyglądać tak że włączam jednym przyciskiem stoper tym samym wyłączam go tzn wynik nalicza i zatrzymuje się na wyświetlaczu segmentowym, a drugim przyciskiem reset (TO JUŻ JEST W KODZIE PONIŻEJ). Kolejnym przyciskiem przeliczamy ten czas na drogę mając już przypisaną w kodzie domyślną prędkość światła lub dźwięku i wyświetlenie to na segmentowym. jak narazie zrobiłem coś takiego jak widać poniżej i jestem w kropce. Mam nadzieję że ktoś mi podpowie jak dalszą część dopisać tak jak wytłumaczyłem.

Code:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
 port (  R,P,CLK  : in std_logic; --wejscia reset, przycisk i zegar z plyty
   ps    : buffer std_logic :=('0'); --stan przycisku liczenia
   LED   : out std_logic_vector(7 downto 0); -- stany wyswietlacza
   Y,y1,y2,y3,y4 : buffer std_logic_vector(3 downto 0); --kolejna liczba dziesietna licznika
   C1,C2,C3,C4 : buffer std_logic; --stany do uruchomienia cyfry wyswietlacza
   CL4   : buffer std_logic_vector(1 downto 0); -- wybor cyfry wyswietlacza
   cc,cy   : buffer std_logic_vector(15 downto 0) :=("0000000000000000"); --podzielniki zegarow cm i cLed
   cm,CLed  : buffer std_logic); --zegary
end counter;
architecture czasomierz of counter is
begin

process (CLK) --zegar 1kHz cm
begin
 if rising_edge(CLK) then
  if (cc = "110000110101000") then
   cm <= not cm;
   cc <= "0000000000000000";
  else
   cc <= cc + 1;
  end if;
 end if;
end process;

process (CLK) --zegar 1kHz cLed
begin
 if rising_edge(CLK) then
  if (cy ="110000110101000") then
   CLed <= not CLed;
   cy <= "0000000000000000";
  else
   cy <= cy + 1;
  end if;
 end if;
end process;

process(cm,R,P) --liczenie miedzy nacisnieciami przycisku P
begin
 if (P='0' and P'event)then -- stan przycisku
  ps <= not ps;
 end if;
 if (R='0') then
  y4 <= "0000";
  y3 <= "0000";
  y2 <= "0000";
  y1 <= "0000";
  ps<='0';
 elsif(ps = '1' and rising_edge(cm))then
  y1 <= y1 + 1;
  if(y1 = "1001") then
   y1 <= "0000";
   y2 <= y2 + 1;
   if(y2 ="1001") then
    y2 <= "0000";
    y3 <= y3 + 1;
    if(y3 ="1001") then
     y3 <= "0000";
     y4 <= y4 + 1;
     if(y4 = "1001") then
      y4 <= "0000";
     end if;
    end if;
   end if;
  end if;
 end if;
end process;

process(y1,y2,y3,y4,CLed,CL4) --wyswietlacz
begin
 if rising_edge(CLed) then
  CL4<= CL4+1;
  if (CL4 = "00") then
   C1<='1';
   C2<='1';
   C3<='1';
   C4<='0';
   Y<=y3;
  end if;
  if (CL4 = "01") then
   C1<='1';
   C2<='1';
   C3<='0';
   C4<='1';
   Y<=y2;
  end if;
  if (CL4 = "10") then
   C1<='1';
   C2<='0';
   C3<='1';
   C4<='1';
   Y<=y1;
  end if;
  if (CL4 = "11") then
   C1<='0';
   C2<='1';
   C3<='1';
   C4<='1';
   Y<=y4;
  end if;
  case Y is
   when "0000" => LED <= "10010000"; --0
   when "0001" => LED <= "10011111"; --1
   when "0010" => LED <= "01011000"; --2
   when "0011" => LED <= "00011001"; --3
   when "0100" => LED <= "00010111"; --4
   when "0101" => LED <= "00110001"; --5
   when "0110" => LED <= "00110000"; --6
   when "0111" => LED <= "10011101"; --7
   when "1000" => LED <= "00010000"; --8
   when "1001" => LED <= "00010001"; --9
   when others => LED <= "11101111"; --oth
  end case;
 end if;
end process;
end czasomierz;


Jeżeli ktoś ma lepszy pomysł i prostszy to niech się podzieli rozwiązaniem gdyż ja raczej na tą chwile nic lepszego nie wymyślę
Pozdrawiam.
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 06 Dec 2011 00:25   





Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Programmable Systems -> przeliczanie na drogę ALTERA Cyclone w Quartusie
Page 1 of 1
Similar topics
Altera cyclone EP1C12Q240C8 czy warto /początki (1)
Altera Cyclone VHDL licznik parkingowy (1)
DE2 Cyclone Altera DM9000A (1)
Quartus II a ALTERA CYCLONE IV (2)
[VHDL] Implementacja dużego automatu w Quartusie (15)
Jak obliczyć przebytą drogę na podstawie GPS? (6)

Page generation time: 0.099 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed