клавиатурата сканиране

M

MRFGUY

Guest
Току-що се опита да напише програма, която открива 3x4 клавиатурата и декодиране.Опитвам се да научите xilinx прилагането xapp512__verilog.zip, но аз все още се обърка как да напиша тази програма.Моля, покажете ми линкове или примери (но моля, не ме посъветва да използват Google за търсене).

Благодарности.

 
Можеш ли да публикувате тук, какво сте опитвали?
Аз ще се опита да коригира я!

 
Току-що научи, че имам нужда да се използва издърпайте нагоре резистори.Така че смятам да се използват по време на ред и колона присвоите като продукция.Но все още се чудех как да сканирате ключовите преса.

Цитат:

Модулът keypadscan (нулиране, clk, ред, колона, вън);

/ / Програма за 4x3 клавиатурата

вход за нулиране, clk;

вход [3:0] ред;

изход [2:0] колона;

изход [3:0] изложени; / / декодиране изходрег. [3:0] изложени;Винаги @ (ред или колона)случай ((ред, колона))

7'b0001_001: изложени = 4'b0001;

7'b0001_010: изложени = 4'b0010;

7'b0001_100: изложени = 4'b0011;7'b0010_001: изложени = 4'b0100;

7'b0010_010: изложени = 4'b0101;

7'b0010_100: изложени = 4'b0110;7'b0100_001: изложени = 4'b0111;

7'b0100_010: изложени = 4'b1000;

7'b0100_100: изложени = 4'b1001;7'b1000_001: изложени = 4'b1110; / / декодиране, както E

7'b1000_010: изложени = 4'b0000;

7'b1000_100: изложени = 4'b1111; / / декодиране като FПо подразбиране: изложени = 4'b0000;endcase/ / сканиране клавиатуратаВинаги @ (posedge clk или posedge нулиране)ако (нулиране) извън <= 0;останало / / тази част не мога да мисляendmodule

 
Тук е коригиран код!
Вие трябва да добавите още едно O / P ПИН да кажа е натиснат клавиша за този
Вие можете да вземат scan_en.

Код:

Модулът keypadscan (нулиране,

clk,

ред,

колона,

изход);

/ / Програма за 4x3 клавиатурата

вход за нулиране, clk;

изход [3:0] ред;

вход [2:0] колона; / / pullup да vcc

изход [3:0] изложени; / / декодиране изходрег. [3:0] ред;

рег. [3:0] изложени;телени scan_en = &column;/ / сканиране клавиатурата

Винаги @ (posedge clk или posedge нулиране)

ако (нулиране)

ред <= 4'b1110;

иначе ако (scan_en)

ред <= (ред [2:0], ред [3]);Винаги @ (ред или колона) започва

посочени = 4'b0000;

случай ((ред, колона))

7'b1110_110: изложени = 4'b0001;

7'b1110_101: изложени = 4'b0010;

7'b1110_011: изложени = 4'b0011;7'b1101_110: изложени = 4'b0100;

7'b1101_101: изложени = 4'b0101;

7'b1101_011: изложени = 4'b0110;7'b1011_110: изложени = 4'b0111;

7'b1011_101: изложени = 4'b1000;

7'b1011_011: изложени = 4'b1001;7'b0111_110: изложени = 4'b1110; / / декодиране, както E

7'b0111_101: изложени = 4'b0000;

7'b0111_011: изложени = 4'b1111; / / декодиране като F

endcase / / случай ((ред, колона))

край / / винаги @ (ред или колона)

endmodule / / keypadscan
 
Мога ли да се свърже директно от клавиатурата за закрепване към cpld.

Когато се свърже като този на 7-seg показват само 0 цялото време.

Благодарности

 
Отиди thro "на xapp512__verilog.zip база данни ще намерите в тази UCF файл ще видите
следните редове ...
NET "колона <0>" PULLUP;
NET "колона <1>" PULLUP;
NET "колона <2>" PULLUP;
NET "колона <3>" PULLUP;
NET "колона <4>" PULLUP;
NET "колона <5>" PULLUP;
NET "колона <6>" PULLUP;
NET "колона <7>" PULLUP;

Трябва да се включат подобни линии в Ур ucf файл, след което можете да се свържете Ур
клавиатурата директно CPLD.Опитайте с това и споделите с нас!

 
Ми ucf файл не е в издърпайте нагоре.Тя съдържа само:Цитат:# ПАСЕ: Старт на Ограниченията, генерирани от ПАСЕ# ПАСЕ: Старт на ПАСЕ I / O Пин задачи

NET "clk" Loc = "P5";

NET "колона <0>" Loc = "P1";

NET "колона <1>" Loc = "P2";

NET "колона <2>" Loc = "P3";

NET "Out <0>" Loc = "P18";

NET "Out <1>" Loc = "P19";

NET "Out <2>" Loc = "P20";

NET "Out <3>" Loc = "P22";

NET "Reset" Loc = "P39";

NET "ред <0>" Loc = "P4";

NET "ред <1>" Loc = "P44";

NET "ред <2>" Loc = "P8";

NET "ред <3>" Loc = "P9";# ПАСЕ: Старт на ПАСЕ Площ Ограничения# ПАСЕ: Старт на ПАСЕ Забрана Ограничения# ПАСЕ: Краят на Ограниченията, генерирани от ПАСЕ

 
Да можете да добавите следните редове да Ур ucf файл ръчно ...
Код:

NET "колона <0>" PULLUP;

NET "колона <1>" PULLUP;

NET "колона <2>" PULLUP;
 
След keying в, аз изправени някои предупреждения по време на "генериране на програмния файл".

Цитат:

ПРЕДУПРЕЖДЕНИЕ: Cpld: 1258 - Невалидна принуда "PULLUP" намери в netlist.
В

ПРЕДУПРЕЖДЕНИЕ: Cpld: 1258 - Невалидна принуда "PULLUP" намери в netlist.
В

ПРЕДУПРЕЖДЕНИЕ: Cpld: 1258 - Невалидна принуда "PULLUP" намери в netlist.
В
 
След това в този случай трябва да добавите външен pullup резистори!

 
Мога ли да използвам 1K между O / P пристанището и VCC като външен pullup.

 
Вие трябва да добавите pullup резистори.опитайте 4k7

 
Ами ред (всъщност това са изходни портове).Когато се опитате да се свържете директно към клавиатурата редове (тя е ОК), но тя работи само един път (тя може да сканира всички ключови еднократно), а по-късно тази пристанища приличат високо през цялото време (може да бъде demage,
имам да тестват отново, като изтегляне на друга програма)

 
Опитвам се да се промени с новите cpld (xc9572) с една и съща програма и всички редове се свърже директно с клавиатурата.Използвайте 4,7 л за pullup.Тя изглежда добре за известно време.Когато натиснете около 10 пъти по-късно всички изходни отида до 0.

Ако го изключите захранването и на siwtch работи отново като 10 пъти, без грешка.След това всички изходни отида до 0 отново.

Така че трябва да власт и изключване по време на тестването на клавиатурата.Какво би могло да е тази грешка.

Аз използва кодиране, публикувани от nand_gates.

 
Това е много странно!Ние трябва да трасирате това ..
Направете едно нещо изход статус на ред и колона от LED за този
Вие трябва да промените кода.Направете това и нека знае какво на
статут на светодиод
на клавиатурата, когато стане ключалка!

 
Това звучи странно поведение като плаващи артикули.
Сигурен ли си, че сте добавили вашето pullup резистори до входа пина, а не на изхода пина?

В XC9500 семейство за съжаление не предвижда конфигурируеми pullups или pulldowns.

 
Уважаеми nand_gates:

Всъщност аз просто още една променлива име shiftreg като ап.Забележка xapp512 във вашия код.Тя изглежда подобно на мен и това е просто още една променлива.Но аз се сблъскват някои проблеми.

Когато се вземе този код от моята програма се работи правилно.Моят ключ тампон никога Дръж.

Ми екстра код:
рег. [3:0] shiftreg = 4'b1110;

и в винаги блок

Цитат:

Винаги @ (posedge clk)започвам

ако (нулиране)

shiftreg <= 4'b0000;иначе ако (scan_en)

shiftreg <= (shiftreg [2:0], shiftreg [3]);

приключвамприсвоите ред = shiftreg;
 
Бил ли си за прилагане на нулиране на пулса на nand_gates например?Необходимо е едно.Пазете се, че
е трудно да се приложи асинхронно нулиране ако часовник работи при висока честота.

Можете избягва нулирането изискване от Инициализиране shiftreg.Това
е добро.Въпреки това, сега ясно shiftreg на нула, когато се върнете пулс.Това
е лошо.Колко бързо ти е часовника?Може да имате неприятности сканиране клавиатура на jillion megahertz поради capacitive прикачното crosstalk.

 
Уважаеми nand_gates и echo47,

Току-що се опита да ми тест съединение според както на вашите съвети.Открих, че моята схема се работи правилно с печеля верига (с свалям програмата кодекс).Все още не знам каква е причината за това.I just found that my programs are working olny at very low frequency (only around at 100 Hz).

Ако увеличението на честотата (дори KHz диапазон) е за заключване на клавиатурата, след 3-4 пъти натиснете и 4 бита продукция са нулеви (за двете издърпайте нагоре и печеля програмата)

 

Welcome to EDABoard.com

Sponsor

Back
Top