Это не первая моя статья про контроллер кнопок для игры 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-бит | PIC12F683 | 1 | DIP8 | Поиск в магазине Отрон | |
C1 | Конденсатор | 100нФ 50В | 1 | Поиск в магазине Отрон | ||
R1-R3 | Резистор | 1 кОм | 3 | Поиск в магазине Отрон | ||
Кнопка | 3 | Любые, подходящие | Поиск в магазине Отрон | |||
Скачать список элементов (PDF)
Прикрепленные файлы:
- SGBreinRing.rar (3620 Кб)
Комментарии (0) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация