Пара идей о клавиатуре

keyboards

Идея 1: Механическая

        На настоящий момент хорошо развита технология изготовления печатных плат. Существует множество сапров в которых вы можете изобразить нужную вам плату. Существует много фирм в которых по вашей документации эту плату могут изготовить. Причем в приемлимые сроки и незадорого. Есть даже технологии изготовления плат в домашних условиях. Раз с платами все так хорошо, возникает идея - нельзя ли использовать плату не только для размещения компонентов и проводников, но и как конструктивный элемент. Для одного нашего проекта (линейная видеокамера FLEXOCAM для контроля качества типографской печати на рулонах) понадобилась 6-ти кнопочная выносная клавиатура и мы решили эту идею попробовать.


Первый прототип мы делали сами, на одностороннем текстолите и с маленькими кнопками. В окончательном варианте кнопки мы решили ставить побольше а платки уже заказывали. С обратной стороны запаянная плата выгдядит так :

key back2

Чтобы все это закрыть сгибаем из тонкой латуни экранчик. 

magnetic

С внутренней стороны экрана на двухстороннем скотче приклеен магнит, чтобы удобнее было крепить клавиатуру на металлическом оборудовании. Ну и припаиваем экранчик к плате:

key back

Результатом мы вполне довольны. Получилось все просто, технологично и недорого.

Нюанс. Платы из стеклотекстолита в некоторой степени прозрачны и немного видны дорожки с обратной стороны. Нас это вполне устраивает, даже добавляет какой-то винтажности. Но, в принципе можно заказывать платки из гетинакса  или покрывать всю лицевую поверхность какой-то непрозрачной маской.

Идея 2: Электрическая

        У всех разработчиков, и у плисоводов и у микроконтроллерщиков нередко возникает задача экономии пинов. Бывает такое, что начинаешь новый проект, подбираешь чип, раскладываешь по IO пинам всю периферию и тут раз(!) - одного пина не хватает. И что делать? Брать чип побольше, а это усложнение и удорожание. И хорошо, если чип "побольше" вообще существует. Поэтому для экономии пинов разработчики используют всякие ухищрения. Рассмотрим, например, такую ситуацию. У вас есть 4 пина и вам нужно подключить к ним кнопки. Первое, что приходит на ум, подтянуть все пины резисторами к питанию, а кнопками замыкать их на землю. Таким способом к 4 пинам можно подключить 4 кнопки. А можно ли больше? А вот можно. Например вот так:

sch

Смысл в том, чтобы перебрать все возможные комбинации замыкания между четырьмя пинами, а таких комбинаций 6. 4 между соседними пинами 1-2, 2-3, 3-4, 4-1, и два диагональных 1-3 и 2-4. Кстати, в случае если бы пинов было 5, комбинаций было бы 10. Ещё одно удобство такого решения - меньше проводов для подключения, не нужна земля. А ещё для 4-х сигналов есть большой выбор как разъемов, так и кабелей которые можно использовать.


Для демонстрации работы клавиатуры мы сделали модуль на верилоге scan_key.v

module scan_key(
	input clk,		// 200 Hz
	output reg[5:0] key,
	inout  [3:0] IO
);

reg [1:0] Q;
always @(posedge clk)
	Q <= Q +1'b1;

reg [3:0] io;
reg skip;
always @(posedge clk)
	case (Q)
		0: begin io <= {2'bz,1'b0,1'bz}; {key[3],key[4],key[0],skip} <= IO[3:0]; end
		1: begin io <= {1'bz,1'b0,2'bz}; {key[5],key[1],skip,key[0]} <= IO[3:0]; end
		2: begin io <= {1'b0,3'bz     }; {key[2],skip,key[1],key[4]} <= IO[3:0]; end
		3: begin io <= {3'bz,1'b0     }; {skip,key[2],key[5],key[3]} <= IO[3:0]; end 
	endcase

assign IO=io;

endmodule


И простенький тестовый проект для платы "Марсоход3bis". Его топ модуль:

top

Взять его можно здесь:



Логика работы такая - на один из пинов выводится "0" а состояние остальных фиксируется. Затем "0" выводится на следующий пин , фиксируется состояние оставшихся и так далее по кругу. Таким образом за 4 клока входной частоты определяется состояние всех 6 кнопок.


Нюанс. Неоднозначно определяется состояние, если нажато больше одной кнопки одновременно.
 

Ну и на последок видео работы:

Добавить комментарий