Witam serdecznie !
Pisze program który na podstawie sygnałów z enkodera ma wyznaczyć kierunek obrotu , położenie oraz prędkość.
Tak więc kierunek i położenie zrobiłem na podstawie licznika rewersyjnego (i to działa) .
Ale mam problem z pomiarem prędkości.
Układ ma zliczać impulsy z enkodera w czasie zadanym przez generator(gdy G ='1')
napisałem coś takiego:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following lines to use the declarations that are
-- provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;
entity predkosc is
Port ( G : in bit;
E : in bit;
Q : out std_logic_vector(5 downto 0));
end predkosc;
architecture Behavioral of predkosc is
signal zand : std_logic;
signal zlicznik : std_logic_vector (5 downto 0);
begin
if G<='1' and rising_edge(E) then zand <= E ;
else null;
end if;
process (zand)
variable licznik : std_logic_vector (5 downto 0);
begin
if rising_edge(zand) then licznik := licznik+1;
else null;
end if;
if G'event and G = '0' then licznik := "000000" ;
else null;
end if;
zlicznik <= licznik ;
end process;
process (G,zlicznik)
begin
if rising_edge (G) then Q <= zlicznik ; --gdy narastajace to przypisz wart. licznik do Q
else null;
end if;
end process;
end Behavioral;
Po kompilacji wyrzuca to:
Compiling vhdl file C:/Xilinx/bin/tomek/predkosc.vhd in Library work.
ERROR:HDLParsers:164 - C:/Xilinx/bin/tomek/predkosc.vhd Line 23. parse error, unexpected IF
więc próbowałem
:if G<='1' and rising_edge(E) then zand <= E ;
else null;
end if;
zrealizować w procesie ale z mizernym skutkiem
Jeżeli ktoś ma jakiś pomysł to proszę o podpowiedź
Pisze program który na podstawie sygnałów z enkodera ma wyznaczyć kierunek obrotu , położenie oraz prędkość.
Tak więc kierunek i położenie zrobiłem na podstawie licznika rewersyjnego (i to działa) .
Ale mam problem z pomiarem prędkości.
Układ ma zliczać impulsy z enkodera w czasie zadanym przez generator(gdy G ='1')
napisałem coś takiego:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following lines to use the declarations that are
-- provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;
entity predkosc is
Port ( G : in bit;
E : in bit;
Q : out std_logic_vector(5 downto 0));
end predkosc;
architecture Behavioral of predkosc is
signal zand : std_logic;
signal zlicznik : std_logic_vector (5 downto 0);
begin
if G<='1' and rising_edge(E) then zand <= E ;
else null;
end if;
process (zand)
variable licznik : std_logic_vector (5 downto 0);
begin
if rising_edge(zand) then licznik := licznik+1;
else null;
end if;
if G'event and G = '0' then licznik := "000000" ;
else null;
end if;
zlicznik <= licznik ;
end process;
process (G,zlicznik)
begin
if rising_edge (G) then Q <= zlicznik ; --gdy narastajace to przypisz wart. licznik do Q
else null;
end if;
end process;
end Behavioral;
Po kompilacji wyrzuca to:
Compiling vhdl file C:/Xilinx/bin/tomek/predkosc.vhd in Library work.
ERROR:HDLParsers:164 - C:/Xilinx/bin/tomek/predkosc.vhd Line 23. parse error, unexpected IF
więc próbowałem
:if G<='1' and rising_edge(E) then zand <= E ;
else null;
end if;
zrealizować w procesie ale z mizernym skutkiem
Jeżeli ktoś ma jakiś pomysł to proszę o podpowiedź