Контроллер кнопок для игры Brain Ring v2.0

Это не первая моя статья про контроллер кнопок для игры Brain Ring (менее известное название «Свояк», но правила там немного отличаются — в Brain Ring можно уходить в «минуса» за неправильный ответ). В предыдущем варианте контроллер кнопок был выполнен на платформе Arduino, этот же вариант использует в качестве главного элемента схемы микроконтроллер компании Microchip — PIC12F683. Данный выбор обусловлен не лишь стоимостью ATmega8 (о стоимости всей платы Arduino я молчу), но и размерами корпусов этих МК. У меня в распоряжении на момент разработки уст-ва был корпус типа «Малышка». Из-за его небольших размеров пришлось вынести преобразователь USB-UART за пределы корпуса. Вот что в итоге вышло:

Итак, начнем по порядку.

1. Предназначение

Это устройство (как я уже писал выше) предназначено для проведения командных игр «Brain Ring». Но с его помощью можно так же проводить и «Свояк». Различия в правилах игр незначительные — в «Brain Ring» за неправильный ответ игрок получает «-«, а в «Свояке» не получает ничего. Так как устройство работает в паре с ПК, то в программе для последнего я реализовал поддержку обоих систем.

2. Принципиальная схема и печатная плата

Принципиальная (электрическая) схема устройства достаточно проста. Так как микроконтроллер работает от  встроенного генератора, то кварцевый резонатор и обвязка для него не потребовались, что позволило упростить и схему и плату. Всего в схеме используется 13 деталей (без учета деталей преобразователя USB-UART, потому что вместо него можно взять обычный телефонный шнурок на CP2303). Ниже представлена принципиальная схема устройства:

*Элемент P1 использовался мной для отладки схемы в Proteus, и в реальной схеме его нет. Но в реальной схеме на его месте стоит преобразователь USB-UART.

Печатная плата для сего девайса получалась так же достаточно простенькой:

3. О работе схемы

Как вы видите схема питается от USB. Это одна из причин,по которым я не захотел использовать преобразователь TTL-RS232. Ведь в таком случае пришлось бы использовать внешнее питание. Ну вторая причина общеизвестна — в современной компьютерной технике COM порт очень нечастый гость, тем более на ноутбуках. 

Для подключения кнопок я использовал пины микроконтроллера GPIO0-GPIO2. Решив, что отслеживать нажатия по высокому уровню на входах будет удобнее (наверное последствия работы с советской логикой :)), подтянул эти выводы к земле, через резисторы порядка 1кОм. 

Для связи с ПК, как уже упоминалось, используется UART. Но потому что в данном микроконтроллере «железно» реализованного интерфейса нет, то пришлось использовать программный.  Функциональность у программного UART значительно ниже, но для поставленных задач он вполне годится. Вход «reset» микроконтроллера я отключать не стал (я чаще работаю с микроконтроллерами фирмы Atmel , а там это табу!), хотя в данном случае от него толку «0»

4. Прошивка МК

Прошивка для МК была написана в среде mikroPascal.

Как уже упоминалось, МК тактируется от внутреннего генератора на 4МГц, а для связи используется программный UART.

Теперь собственно о прошивке. Вот ее исходный код:

program BreinRing;

label a,b,c;

begin
CMCON0:=0x7;
ANSEL:=0x0;
GPIO:=0x0;
Soft_UART_Init(GPIO,4,5,2400,0);
While true do begin
if (Button(GPIO,0,100,1)) then begin
soft_uart_write(1);
a:
if (Button(GPIO,0,0,1)) then goto a;
end else
if (Button(GPIO,1,100,1)) then begin
soft_uart_write(2);
b:
if (Button(GPIO,1,0,1)) then goto b;
end else
if (Button(GPIO,2,100,1)) then begin
soft_uart_write(3);
c:
if (Button(GPIO,2,0,1)) then goto c;
end;
end;
end.

Первым делом в программе отключаем компаратор и АЦП, далее записываем в регистр GPIO «0» и инициализируем софтверный UART. После этих действий запускаем бесконечный цикл.

Собственно в этом цикле и происходит постоянный опрос кнопок.

К примеру, нажата кнопка 1. На входе GPIO0 устанавливается высокий уровень, и программа определив это переходит к выполнению заданных действий : отсылает по UART номер нажатой кнопки (в данном случае «1»), и проверяет, нажата ли ещё эта кнопка, если да — возвращается на метку «a» и далее по кругу. Как лишь кнопку отпускают, программа снова начинает проверку состояния остальных кнопок.

Задержки при опросе кнопок я использовал для «отсеивания» дребезга контактов.

Вот так нужно выставить конфигурационные биты (WinPic800)

5. Программа для ПК

Эту программу я писал в среде Embarcadero Delphi XE3.

Главное (и единственное) окно программы:

Настройки, счет команд и остальное реализованы выезжающих панелях. Ну, например панель настроек:

Как видно на рисунке выше, в настройках можно выбрать тип игры, порт, установить время на обдумывание вопроса и обнулить счет команд.

7. Замена деталей

На схеме деталей очень мало, но кое-что можно заменить. Так, микроконтроллер можно заменить на PIC12F609, но нужно будет убрать строчку отключения АЦП, потому что его в нем нет. Без изменения кода, можно взять МК PIC12F510 (никогда его не видел).

Резисторы выступают в роли подтяжке к «земле», по этому можно взять от 1 кОм до 10 кОм.

Конденсатор можно не ставить, он стоит «на всякий пожарный». Но как показывает практика схема неплохо работает и без него.

8. USB-UART

В своей схеме я использовал преобразователь USB-UART на FT232RL. Сразу скажу — те, кто не уверен, что сможете запаять эту микросхему, не беритесь. При всей своей функциональности она очень не любит перегрев, и даже просто перепутав выводы UART можно вывести ее из строя (именно таким способом я и отправил уже 2 микросхемы на свалку:( ).

Преобразователь я собирал с этой печаткой:

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

Вот что вышло:

Но, как уже упоминал, если у вас есть старый шнурок от NOKIA или что-то похожее, с преобразователем USB-UART внутри (обычно ставят PL2303), можно попытаться использовать его. Но, у меня такое китайское творение нашлось, и я попытался через него подключиться к пк…… Эксперимент не удался. Пакеты если и приходили, то не считывались в терминале, пришлось ваять вышеуказанный преобразователь.

Детали для преобразователя я не включил в список элементов, потому что это общеизвестная схема включения из даташита. По той же причине не стал рассматривать схему преобразователя.

И в заключение, фото устройства:

За качество видео не бейте, я вообще удивлен что китайская вебка может что-то записать…. Если что, видео с экрана писал AVS Video Editor, а с камеры — VirtualDub.


Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

U1
МК PIC 8-битPIC12F6831
DIP8C1
Конденсатор100нФ 50В1
R1-R3
Резистор1 кОм3

Кнопка3
Любые, подходящиеДобавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

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

Ваш адрес email не будет опубликован.