В этой статье расскажу о попытке сделать собственную отладочную плату, аналог Arduino, используя электронику от оптических приводов, которые уже практически вышли из употребления, но хранятся в кладовках многих радиолюбителей. Т.е. фактически мы получим отладочную плату из мусорки.
![Плата DVD-привода с МК Ali M5705 Плата DVD-привода с МК Ali M5705](https://habrastorage.org/getpro/habr/upload_files/f61/05a/291/f6105a29161adcc3bae6f9963ac21c01.jpg)
Как известно, производители оптических приводов используют самые разные контроллеры. И не для всех можно найти документацию в широком доступе. В данном случае мне повезло и в завалах попалась плата с более менее распространенным контроллером M5705. На ней также имеется микросхема внешней флеш памяти и еще несколько компонентов, которые нам, скорее всего не понадобятся.
![Фрагмент даташита Ali M5705 Фрагмент даташита Ali M5705](https://habrastorage.org/getpro/habr/upload_files/5ee/3ec/ef3/5ee3ecef358e3352ecc8b02517cd7a97.jpg)
Поиск в документации в Google не занял много времени. Даташит нашелся за несколько секунд. Информация из него внушает оптимизм, поскольку система команд данного микроконтроллера аналогична системе команд микропроцессора Intel 8032. Наличие внешней памяти в данном случае также является большим плюсом. Ниже станет понятно почему.
После долгих поисков в интернете, нашлась схема некого устройства на данном контроллере. Благодаря этому у меня появился полный pinout микроконтроллера. Хотя другие подробности остаются неизвестными.
![Выводы Ali M5705 Выводы Ali M5705](https://habrastorage.org/getpro/habr/upload_files/378/41d/509/37841d50936461410745935229d5f2e2.jpg)
Теперь попробуем сделать из этой платы привода некое подобие 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](https://habrastorage.org/getpro/habr/upload_files/1d7/ab9/c06/1d7ab9c06e6b0ce8ce006b164f4eab21.png)
Для управления дисплеем понадобится 6 пинов в минимальной конфигурации или 10 в максимальной. У сдвигового регистра все равно всего 8 выходов, их напрямую подключаем к шине данных дисплея.
Как это работает? Посылаем данные на пин DATA, который соединен с пином RS дисплея. После отправки данных с нужной командой, посылаем сигнал ENABLE на соответствующий пин дисплея. И он примет полученные с регистра данные.
В первую очередь нужно выполнить инициализацию дисплея. Подробный алгоритм инициализации описан в документации и разжеван во многих роликах. Далее посылаем необходимые данные и все. Глаза вас не обманули - дисплей работает от платы управления оптическим приводом. Все очень просто. Соответствующий файл в папке (LCDtest).
![Схема подключения 7-сегментного идикатора к M5705 Схема подключения 7-сегментного идикатора к M5705](https://habrastorage.org/getpro/habr/upload_files/674/edc/a18/674edca189d39a1a078a1c36a6e6deaa.png)
Таким же способом можно выполнить управление 7-сегментным индикатором. Для этого подключаем его сегменты к соответствующим выводам сдвигового регистра, а общие катоды к свободным пинам микроконтроллера через транзисторные ключи, чтобы обеспечить динамическую индикацию двух знаков. В прикрепленных ниже файлах можно найти пример секундомера с обратным отсчетом (папка Minutnik).
Разумеется, практическое применение таких плат под большим сомнением, да и он не могут конкурировать с возможностями настоящих Arduino, но, во-первых, они бесплатны, а во-вторых позволяют изучить как аппаратную, так и программную составляющие подобных проектов.
Я не программист, поэтому код написал знакомый из Польши, автор YT-канала ELEKTRON. ПО публикуется с его разрешения, при условии упоминания названия канала.
https://drive.google.com/drive/folders/13Ww5yQH0lYkhRreK29rR2Nvnd3aAMBT3