klawiatura i VHDL

May 25, 2004 4 Replies

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.



Użytkownik Marek N. napisał:

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

(ciach)

(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.

Użytkownik Marek N. napisał:

Co to jest ps2_clk_old ?

Adam

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required