Бесплатный аналог Arduino из мусорки
В этой статье расскажу о попытке сделать собственную отладочную плату, аналог Arduino, используя электронику от оптических приводов, которые уже практически вышли из употребления, но хранятся в кладовках многих радиолюбителей. Т.е. фактически мы получим отладочную плату из мусорки.
Плата DVD-привода с МК Ali M5705
Как известно, производители оптических приводов используют самые разные контроллеры. И не для всех можно найти документацию в широком доступе. В данном случае мне повезло и в завалах попалась плата с более менее распространенным контроллером М5705. На ней также имеется микросхема внешней флеш памяти и еще несколько компонентов, которые нам, скорее всего не понадобятся.
Фрагмент даташита Ali M5705
Поиск в документации в Google не занял много времени. Даташит нашелся за несколько секунд. Информация из него внушает оптимизм, поскольку система команд данного микроконтроллера аналогична системе команд микропроцессора Intel 8032. Наличие внешней памяти в данном случае также является большим плюсом. Ниже станет понятно почему.
После долгих поисков в интернете, нашлась схема некого устройства на данном контроллере. Благодаря этому у меня появился полный pinout микроконтроллера. Хотя другие подробности остаются неизвестными.
Выводы Ali M5705
Теперь попробуем сделать из этой платы привода некое подобие Arduino. Для питания устройства достаточно 5 вольт. 12 вольтовый канал питания не нужен. Полезно будет для начала выпаять все лишние элементы.
Руководствуясь схемой ищем выводы. К сожалению у данного МК всего один порт. То есть 8 выводов вход-выход. В документации указано, что имеется возможность загрузки пользовательских программ через АТА, но не сказано как. Поэтому выпаиваем микросхему флеш памяти и ставим на ее место панельку. Содержимое памяти на всякий случай можно считать программатором и сохранить. Хотя там нет ничего интересного.
Для начала, конечно, помигаем светодиодом, подключенным к выводу xmp1_1 (вывод 47) через резистор 220 ом. Чтобы облегчить жизнь экспериментаторам, я приготовил несколько готовых скетчей, которые доступны по ссылкам ниже. Берем файл из папки Blink. В качестве среды программирования используем бесплатную версию ARM KEIL v. 5. В настройках следует установить Create HEX file. Компилируем. И загружаем полученный файл через программатор в микросхему памяти. Переносим ее на плату привода. Включаем питание. И светодиод мигает!
Можно двигаться дальше. Следующий шаг — передача данных по последовательному порту. Как было сказано выше, у М5705 малое количество портов. Можно использовать специализированные расширители, а можно пойти еще более простым путем — использовать сдвиговый регистр 74HC164.
Будем подавать на его вход последовательные данные и управлять ими через пин CLK. Таким образом можно подключить дисплей 1602, использующий контроллер HD44780 и известный каждому ардуинщику. Для него написана масса библиотек, поэтому задача сильно облегчается.
Схема подключения дисплея 1602 к M5705
Для управления дисплеем понадобится 6 пинов в минимальной конфигурации или 10 в максимальной. У сдвигового регистра все равно всего 8 выходов, их напрямую подключаем к шине данных дисплея.
Как это работает? Посылаем данные на пин DATA, который соединен с пином RS дисплея. После отправки данных с нужной командой, посылаем сигнал ENABLE на соответствующий пин дисплея. И он примет полученные с регистра данные.
В первую очередь нужно выполнить инициализацию дисплея. Подробный алгоритм инициализации описан в документации и разжеван во многих роликах. Далее посылаем необходимые данные и все. Глаза вас не обманули — дисплей работает от платы управления оптическим приводом. Все очень просто. Соответствующий файл в папке (LCDtest).
Схема подключения 7-сегментного идикатора к M5705
Таким же способом можно выполнить управление 7-сегментным индикатором. Для этого подключаем его сегменты к соответствующим выводам сдвигового регистра, а общие катоды к свободным пинам микроконтроллера через транзисторные ключи, чтобы обеспечить динамическую индикацию двух знаков. В прикрепленных ниже файлах можно найти пример секундомера с обратным отсчетом (папка Minutnik).
Разумеется, практическое применение таких плат под большим сомнением, да и он не могут конкурировать с возможностями настоящих Arduino, но, во-первых, они бесплатны, а во-вторых позволяют изучить как аппаратную, так и программную составляющие подобных проектов.
Я не программист, поэтому код написал знакомый из Польши, автор YT-канала ELEKTRON. ПО публикуется с его разрешения, при условии упоминания названия канала.
https://drive.google.com/drive/folders/13Ww5yQH0lYkhRreK29rR2Nvnd3aAMBT3