Как стать автором
Обновить

Бесплатный аналог Arduino из мусорки

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров28K

В этой статье расскажу о попытке сделать собственную отладочную плату, аналог Arduino, используя электронику от оптических приводов, которые уже практически вышли из употребления, но хранятся в кладовках многих радиолюбителей. Т.е. фактически мы получим отладочную плату из мусорки.

Плата DVD-привода с МК Ali M5705
Плата DVD-привода с МК Ali M5705


Как известно, производители оптических приводов используют самые разные контроллеры. И не для всех можно найти документацию в широком доступе. В данном случае мне повезло и в завалах попалась плата с более менее распространенным контроллером M5705. На ней также имеется микросхема внешней флеш памяти и еще несколько компонентов, которые нам, скорее всего не понадобятся.

Фрагмент даташита Ali M5705
Фрагмент даташита Ali M5705


Поиск в документации в Google не занял много времени. Даташит нашелся за несколько секунд. Информация из него внушает оптимизм, поскольку система команд данного микроконтроллера аналогична системе команд микропроцессора Intel 8032. Наличие внешней памяти в данном случае также является большим плюсом. Ниже станет понятно почему.

После долгих поисков в интернете, нашлась схема некого устройства на данном контроллере. Благодаря этому у меня появился полный pinout микроконтроллера. Хотя другие подробности остаются неизвестными.

Выводы Ali M5705
Выводы Ali M5705


Теперь попробуем сделать из этой платы привода некое подобие Arduino. Для питания устройства достаточно 5 вольт. 12 вольтовый канал питания не нужен. Полезно будет для начала выпаять все лишние элементы.

Руководствуясь схемой ищем выводы. К сожалению у данного МК всего один порт. То есть 8 выводов вход-выход. В документации указано, что имеется возможность загрузки пользовательских программ через АТА, но не сказано как. Поэтому выпаиваем микросхему флеш памяти и ставим на ее место панельку. Содержимое памяти на всякий случай можно считать программатором и сохранить. Хотя там нет ничего интересного.

Для начала, конечно, помигаем светодиодом, подключенным к выводу xmp1_1 (вывод 47) через резистор 220 ом. Чтобы облегчить жизнь экспериментаторам, я приготовил несколько готовых скетчей, которые доступны по ссылкам ниже. Берем файл из папки Blink. В качестве среды программирования используем бесплатную версию ARM KEIL v.5. В настройках следует установить Create HEX file. Компилируем. И загружаем полученный файл через программатор в микросхему памяти. Переносим ее на плату привода. Включаем питание. И светодиод мигает!

Можно двигаться дальше. Следующий шаг - передача данных по последовательному порту. Как было сказано выше, у M5705 малое количество портов. Можно использовать специализированные расширители, а можно пойти еще более простым путем - использовать сдвиговый регистр 74HC164.

Будем подавать на его вход последовательные данные и управлять ими через пин CLK. Таким образом можно подключить дисплей 1602, использующий контроллер HD44780 и известный каждому ардуинщику. Для него написана масса библиотек, поэтому задача сильно облегчается.

Схема подключения дисплея 1602 к M5705
Схема подключения дисплея 1602 к M5705

Для управления дисплеем понадобится 6 пинов в минимальной конфигурации или 10 в максимальной. У сдвигового регистра все равно всего 8 выходов, их напрямую подключаем к шине данных дисплея.

Как это работает? Посылаем данные на пин DATA, который соединен с пином RS дисплея. После отправки данных с нужной командой, посылаем сигнал ENABLE на соответствующий пин дисплея. И он примет полученные с регистра данные.

В первую очередь нужно выполнить инициализацию дисплея. Подробный алгоритм инициализации описан в документации и разжеван во многих роликах. Далее посылаем необходимые данные и все. Глаза вас не обманули - дисплей работает от платы управления оптическим приводом. Все очень просто. Соответствующий файл в папке (LCDtest).

Схема подключения 7-сегментного идикатора к M5705
Схема подключения 7-сегментного идикатора к M5705


Таким же способом можно выполнить управление 7-сегментным индикатором. Для этого подключаем его сегменты к соответствующим выводам сдвигового регистра, а общие катоды к свободным пинам микроконтроллера через транзисторные ключи, чтобы обеспечить динамическую индикацию двух знаков. В прикрепленных ниже файлах можно найти пример секундомера с обратным отсчетом (папка Minutnik).

Разумеется, практическое применение таких плат под большим сомнением, да и он не могут конкурировать с возможностями настоящих Arduino, но, во-первых, они бесплатны, а во-вторых позволяют изучить как аппаратную, так и программную составляющие подобных проектов.

Я не программист, поэтому код написал знакомый из Польши, автор YT-канала ELEKTRON. ПО публикуется с его разрешения, при условии упоминания названия канала.

https://drive.google.com/drive/folders/13Ww5yQH0lYkhRreK29rR2Nvnd3aAMBT3

Теги:
Хабы:
+66
Комментарии54

Публикации

Истории

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область