Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Контроллер кнопок для игры 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-бит
PIC12F683
1 DIP8Поиск в магазине ОтронВ блокнот
C1 Конденсатор100нФ 50В1 Поиск в магазине ОтронВ блокнот
R1-R3 Резистор
1 кОм
3 Поиск в магазине ОтронВ блокнот
Кнопка3 Любые, подходящиеПоиск в магазине ОтронВ блокнот
Добавить все

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

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

Теги:

Опубликована: 0 0
Я собрал 0 2
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 2 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Arduino UNO Радиореле 220В
вверх