Это не первая моя статья про контроллер кнопок для игры 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)
Прикрепленные файлы:
- SGBreinRing.rar (3620 Кб)