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

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


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

Фрагмент даташита 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. Компилируем. И загружаем полученный файл через программатор в микросхему памяти. Переносим ее на плату привода. Включаем питание. И светодиод мигает!

Можно двигаться дальше. Следующий шаг - передача данных по последовательному порту. Как было сказано выше, у М5705 малое количество портов. Можно использовать специализированные расширители, а можно пойти еще более простым путем - использовать сдвиговый регистр 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

Комментарии (47)


  1. Kill_Voice
    03.05.2024 06:19
    +29

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


    1. ValentinSats
      03.05.2024 06:19
      +4

      Когда-то, в конце 90-х или в начале 2000-х (еще до ардуинок) видел проекты на клонах 8051 с встроенными в ПЗУ интерпретаторами. Помню бэйсик и форт. Программки загружались через UART в текстовом виде прямо в ОЗУ из любой консоли. Понятно, что производительность была на порядок меньше, да и объем ОЗУ - в стандартной 8051 - 256 байт, во всяких атмелах или филипсах (на тот момент) - единицы килобайт. И при выключении питания - все терялось. Но светиком поморгать ресурсов уж точно хватило бы. Как и большинству современных задач: часики, термометры, простейшая автоматика и т.д.

      Поэтому автор не так уж и далеко ушел. Чутка не хватило :)))


      1. Atakum Автор
        03.05.2024 06:19
        +3

        Да, но сейчас есть флеш память. поэтому данные не теряются.


      1. Kill_Voice
        03.05.2024 06:19
        +1

        В начале 2000-х застал такой в университете, даже кажется был промышленный экземпляр. На плате распаяны цифровой дисплей и цифровая клавиатура, можно было набить программу на ассемблере прямо не отходя от платы)


        1. Javian
          03.05.2024 06:19
          +3

          https://habr.com/ru/companies/ruvds/articles/598697/

          "Волшебный чемодан"


          1. Kill_Voice
            03.05.2024 06:19

            Да-да именно он


    1. AVKinc
      03.05.2024 06:19

      Единственная ценность Ардуино как платформы это быстрый вход. И в это ее же и главный недостаток. Поморгать светодиодом в одну строку можно практически где угодно. Моргание светодиодом совершенно бессмысленное занятие.


      1. Kill_Voice
        03.05.2024 06:19
        +2

        Для большинства MCU вам кроме девборда, будет нужен деббагер превышающий стоимость самой платы, неудобная IDE на базе Eclipse, и еще более неудобное SDK в котором чтобы «поморгать» придется подключить ворох импортов и написать с десяток строк. Да и делать Франкенштейна из dvd привода тоже не сказать, что полное смысла занятие)


        1. Nick0las
          03.05.2024 06:19
          +2

          Фирменные девборды и дебаггеры это зачастую просто выжимание денег из клиентов. Впрочем, в большинстве случаев у них есть недорогие заменители. А вот странные IDE, кодогенераторы и программаторы преследуют многие платформы. Но зачастую можно использовать GNU тулчейн и OpenOCD.


          1. Larymar
            03.05.2024 06:19
            +2

            При всем уважении, гну тулчейн это не то, что я хочу видеть пытаясь сделать простейшие игрушки для домашнего пользования


      1. 0x1A4
        03.05.2024 06:19
        +1

        Ценность платформы Ардуино в том, что можно в одной среде писать под кучу разных контроллеров, не заморачиваясь с настройкой окружения под каждый. У меня есть проект, в котором 2 контроллера в связке 8 битный и 32 битный и весь код для них написан в Arduino IDE. Поддерживать такое одно удовольствие, так как не нужно вспоминать как там все настраивал несколько лет назад на другом компе.


      1. randomsimplenumber
        03.05.2024 06:19
        +1

        Все задачи в конце концов сводятся к морганию светодиодом ;) Конечно же на ассемблере можно мигать значительно быстрее. Но если быстродействия хватает, и в память оно помещается - в чем проблема? Зачем выпиливать ещё одну реализацию Serial.print, если можно взять готовую?


      1. Astroscope
        03.05.2024 06:19
        +2

        Я, конечно, люблю побурчать, что "в наше время" и "ассемблер", но если совсем уж начистоту, то владение ассемблером становится все более нишевым, потому что все менее востребованным - вычислительные мощности растут как у контроллеров, что позволяет справляться с не всегда оптимальным кодом, так и компиляторы пусть не всегда идеально, но худо-бедно стараются оптимизировать выходной машинный код, поэтому скорость разработки и портируемость на часто сильно разные платформы нередко оказывается важнее гипотетической - необязательно реализуемой на практике, возможности вручную вылизать ассемблерный код до лучше, чем абсолютного совершенства. Поэтому, неожиданно для себя, заступлюсь за Ардуино.

        Единственная ценность Ардуино как платформы это быстрый вход.

        Если вы программист, то вы, с немалой вероятностью, недооцениваете важность и значимость быстрого входа, ведь вы давно перешагнули все мыслимые пороги входа и просто пишете код как основное или даже единственное занятие в жизни. Естественно, для вас очевидны и нежелательны ограничения платформы. А вот у начинающих до этих ограничений дело может вообще никогда не дойти - они просто относительно просто решат свою задачу, хоббийную или даже коммерческую. Крупный бизнес, понятно, умеет и будет считать деньги, поэтому контроллер будет выбираться минимально достаточный - даже несколько центов на сотнях тысяч и миллионах изделий это ощутимые деньги, а мелкосерийные изделия на основе Ардуино - что в этом плохого, кроме, возможно, неоптимальной себестоимости?

        И в это ее же и главный недостаток.

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

        Поморгать светодиодом в одну строку можно практически где угодно.

        Конечно. Как базовая проверка работоспособности - вполне приемлемое решение. Что код в одну строку в принципе скомпилировался и прошился, что в ответ на прошивку контроллер в принципе подает какие-то признаки жизни, причем ожидаемым от него способом.

        Моргание светодиодом совершенно бессмысленное занятие.

        Не согласен. Если сильно упрощенно, то контроллер делает две вещи - что-то считает и взаимодействует с периферией. В реальных устройствах не бывает такого, чтобы только что-то считать - всегда нужно дергать какие-то ноги по каким-то внутренним событиям и реагировать на дерготню ног извне. Мигание светодиодом - это вот как раз чистое, рафинированное дерганье ног по каким-то внутренним событиям, самая что ни на есть типичная задача любого контроллера в реальном изделии или его прототипе.


      1. shiru8bit
        03.05.2024 06:19
        +1

        Ценность платформы Ардуино - быстрое прототипирование. Есть библиотеки для всех мыслимых железок и стандартных задач. И к тому же поддерживается куча разных контроллеров.