RTV forum PL | NewsGroups PL

Doświadczenia z interfejsem klawiatury PS/2 w VHDL na układzie Spartan2E

klawiatura i VHDL

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Doświadczenia z interfejsem klawiatury PS/2 w VHDL na układzie Spartan2E

Marek N.
Guest

Tue May 25, 2004 8:49 pm   



Witam wszystkich!
Pracuję obecnie nad pewnym projektem w VHDLu.
Wszystko już w nim działa jak należy oprócz interfejsu klawiatury.
Odpowiedni układ ma za zadanie obserwować stan lini zegara i
danych klawiatury, i przy każdym opadającym zboczu zegara zapisywać
do rejestru przesuwnego kolejne bity z lini danych. Po naliczeniu 11
zboczy odebrany bajt ma zostać wystawiony równolegle (taki rejestr SIPO)
i dodatkowo strobowany. Tak to sobie wymyśliłem, tak też zrobiłem i nic.
Okzuje się, że problem leży w wykrywaniu opadających zboczy na lini zegara
klawiatury.
Testowy kod:
(...)
if ps2_clk'event and ps2_clk = '0' then
Dioda_LED <= '1'
end if;
(...)
nie powoduje zaświecenia diody. W wersji "synchronicznej" też nie działa:
(...)
if system_clk'event and system'clk = '0' then
ps2_clk_sample <= ps2_clk;
if (ps2_clk_sample and (not ps2_clk)) = '1' then
LED <= '1';
(...)

Wszystkie symulacje dają doskonałe rezultaty, jednak po implementacji i
zaprogramowaniu układu (Spartan2E 200 Xilinxa) nic z tego nie działa.
Przeszukałem google, na pamięć znam już zasady transmisji itp. wszystko jest
zgodnie
z opisami. Dlatego mam pytanie, czy ktoś nie robił jakiegos projektu z
obsługą
klawiatur i czy nie mógł by się podzielić ze mną swoimi doświadczeniami? Nie
chcę
kopiować czyjegoś projektu, jedynie proszę o wskazówki!
Pozdrawiam,
Marek N.

Górski Adam
Guest

Wed May 26, 2004 4:44 pm   



Użytkownik Marek N. napisał:
Quote:
Witam wszystkich!
Pracuję obecnie nad pewnym projektem w VHDLu.
Wszystko już w nim działa jak należy oprócz interfejsu klawiatury.
Odpowiedni układ ma za zadanie obserwować stan lini zegara i
danych klawiatury, i przy każdym opadającym zboczu zegara zapisywać
do rejestru przesuwnego kolejne bity z lini danych. Po naliczeniu 11
zboczy odebrany bajt ma zostać wystawiony równolegle (taki rejestr SIPO)
i dodatkowo strobowany. Tak to sobie wymyśliłem, tak też zrobiłem i nic.
Okzuje się, że problem leży w wykrywaniu opadających zboczy na lini zegara
klawiatury.
Testowy kod:
(...)
if ps2_clk'event and ps2_clk = '0' then
Dioda_LED <= '1'
end if;
(...)
nie powoduje zaświecenia diody. W wersji "synchronicznej" też nie działa:
(...)
if system_clk'event and system'clk = '0' then
ps2_clk_sample <= ps2_clk;
if (ps2_clk_sample and (not ps2_clk)) = '1' then
LED <= '1';
(...)

Wszystkie symulacje dają doskonałe rezultaty, jednak po implementacji i
zaprogramowaniu układu (Spartan2E 200 Xilinxa) nic z tego nie działa.
Przeszukałem google, na pamięć znam już zasady transmisji itp. wszystko jest
zgodnie
z opisami. Dlatego mam pytanie, czy ktoś nie robił jakiegos projektu z
obsługą
klawiatur i czy nie mógł by się podzielić ze mną swoimi doświadczeniami? Nie
chcę
kopiować czyjegoś projektu, jedynie proszę o wskazówki!
Pozdrawiam,
Marek N.



Za mały fragment kodu żeby cokolwiek stwierdzić.
To co przedstawiłeś może działać ,ale wcale nie musi w rzeczywistości.

Adam Górski

Marek N.
Guest

Wed May 26, 2004 5:33 pm   



(ciach)
Quote:
Za mały fragment kodu żeby cokolwiek stwierdzić.
(ciach)


Ok:

entity ps2_reader is
port (
-- wejścia bezpośrednio połączone z klaw.
ps2_clk, ps2_data: in STD_LOGIC;
--zegar 50MHz, reset
clk, reset: in STD_LOGIC;
-- wyjscie sterujace diodą
led: out STD_LOGIC
)
end entity ps2_reader;

architecture beh of ps2_reader is
signal ps2_clk_sample: STD_LOGIC;
begin
process (clk, reset)
begin

if reset = '1' then
led <= '0';

elsif clk'event and clk = '1' then
ps2_clk_sample <= ps2_clk;

if ((not ps2_clk) and ps2_clk_old) = '1' then
led <= 1;
else
-- tu nie ma nic, led syntezowany jako zatrzask.
end if;
end if;
end process detect_edge;
end architecture beh;

Po zaprogramowaniu układu dioda zapala się dopiero po
wyciągnięciu wtyczki od klawiatury, kiedy to faktycznie
linia ps2_clk zmnienia stan z '1' na '0', bo to klawiatura
podciąga tą linie do '1'. Na klawisze dioda nie reaguje:(

Pozdrawiam,
Marek N.

Górski Adam
Guest

Wed May 26, 2004 5:38 pm   



Użytkownik Marek N. napisał:

Quote:
(ciach)

Za mały fragment kodu żeby cokolwiek stwierdzić.

(ciach)

Ok:

entity ps2_reader is
port (
-- wejścia bezpośrednio połączone z klaw.
ps2_clk, ps2_data: in STD_LOGIC;
--zegar 50MHz, reset
clk, reset: in STD_LOGIC;
-- wyjscie sterujace diodą
led: out STD_LOGIC
)
end entity ps2_reader;

architecture beh of ps2_reader is
signal ps2_clk_sample: STD_LOGIC;
begin
process (clk, reset)
begin

if reset = '1' then
led <= '0';

elsif clk'event and clk = '1' then
ps2_clk_sample <= ps2_clk;

if ((not ps2_clk) and ps2_clk_old) = '1' then
led <= 1;
else
-- tu nie ma nic, led syntezowany jako zatrzask.
end if;
end if;
end process detect_edge;
end architecture beh;

Po zaprogramowaniu układu dioda zapala się dopiero po
wyciągnięciu wtyczki od klawiatury, kiedy to faktycznie
linia ps2_clk zmnienia stan z '1' na '0', bo to klawiatura
podciąga tą linie do '1'. Na klawisze dioda nie reaguje:(

Pozdrawiam,
Marek N.


Co to jest ps2_clk_old ?


Adam

Marek N.
Guest

Wed May 26, 2004 6:08 pm   



moj błąd, w tamtej lini ma oczywiście
pojawić się sygnał ps2_clk_sample.

(...)
if ((not ps2_clk) and ps2_clk_sample) = '1' then
(...)

Marek

elektroda NewsGroups Forum Index - Elektronika Polska - Doświadczenia z interfejsem klawiatury PS/2 w VHDL na układzie Spartan2E

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map