В этой статье расскажу о попытке сделать собственную отладочную плату, аналог Arduino, используя электронику от оптических приводов, которые уже практически вышли из употребления, но хранятся в кладовках многих радиолюбителей. Т.е. фактически мы получим отладочную плату из мусорки.
Как известно, производители оптических приводов используют самые разные контроллеры. И не для всех можно найти документацию в широком доступе. В данном случае мне повезло и в завалах попалась плата с более менее распространенным контроллером М5705. На ней также имеется микросхема внешней флеш памяти и еще несколько компонентов, которые нам, скорее всего не понадобятся.
Поиск в документации в Google не занял много времени. Даташит нашелся за несколько секунд. Информация из него внушает оптимизм, поскольку система команд данного микроконтроллера аналогична системе команд микропроцессора Intel 8032. Наличие внешней памяти в данном случае также является большим плюсом. Ниже станет понятно почему.
После долгих поисков в интернете, нашлась схема некого устройства на данном контроллере. Благодаря этому у меня появился полный pinout микроконтроллера. Хотя другие подробности остаются неизвестными.
Теперь попробуем сделать из этой платы привода некое подобие Arduino. Для питания устройства достаточно 5 вольт. 12 вольтовый канал питания не нужен. Полезно будет для начала выпаять все лишние элементы.
Руководствуясь схемой ищем выводы. К сожалению у данного МК всего один порт. То есть 8 выводов вход-выход. В документации указано, что имеется возможность загрузки пользовательских программ через АТА, но не сказано как. Поэтому выпаиваем микросхему флеш памяти и ставим на ее место панельку. Содержимое памяти на всякий случай можно считать программатором и сохранить. Хотя там нет ничего интересного.
Для начала, конечно, помигаем светодиодом, подключенным к выводу xmp1_1 (вывод 47) через резистор 220 ом. Чтобы облегчить жизнь экспериментаторам, я приготовил несколько готовых скетчей, которые доступны по ссылкам ниже. Берем файл из папки Blink. В качестве среды программирования используем бесплатную версию ARM KEIL v.5. В настройках следует установить Create HEX file. Компилируем. И загружаем полученный файл через программатор в микросхему памяти. Переносим ее на плату привода. Включаем питание. И светодиод мигает!
Можно двигаться дальше. Следующий шаг - передача данных по последовательному порту. Как было сказано выше, у М5705 малое количество портов. Можно использовать специализированные расширители, а можно пойти еще более простым путем - использовать сдвиговый регистр 74HC164.
Будем подавать на его вход последовательные данные и управлять ими через пин CLK. Таким образом можно подключить дисплей 1602, использующий контроллер HD44780 и известный каждому ардуинщику. Для него написана масса библиотек, поэтому задача сильно облегчается.
Для управления дисплеем понадобится 6 пинов в минимальной конфигурации или 10 в максимальной. У сдвигового регистра все равно всего 8 выходов, их напрямую подключаем к шине данных дисплея.
Как это работает? Посылаем данные на пин DATA, который соединен с пином RS дисплея. После отправки данных с нужной командой, посылаем сигнал ENABLE на соответствующий пин дисплея. И он примет полученные с регистра данные.
В первую очередь нужно выполнить инициализацию дисплея. Подробный алгоритм инициализации описан в документации и разжеван во многих роликах. Далее посылаем необходимые данные и все. Глаза вас не обманули - дисплей работает от платы управления оптическим приводом. Все очень просто. Соответствующий файл в папке (LCDtest).
Таким же способом можно выполнить управление 7-сегментным индикатором. Для этого подключаем его сегменты к соответствующим выводам сдвигового регистра, а общие катоды к свободным пинам микроконтроллера через транзисторные ключи, чтобы обеспечить динамическую индикацию двух знаков. В прикрепленных ниже файлах можно найти пример секундомера с обратным отсчетом (папка Minutnik).
Разумеется, практическое применение таких плат под большим сомнением, да и он не могут конкурировать с возможностями настоящих Arduino, но, во-первых, они бесплатны, а во-вторых позволяют изучить как аппаратную, так и программную составляющие подобных проектов.
Я не программист, поэтому код написал знакомый из Польши, автор YT-канала ELEKTRON. ПО публикуется с его разрешения, при условии упоминания названия канала.
https://drive.google.com/drive/folders/13Ww5yQH0lYkhRreK29rR2Nvnd3aAMBT3
Kill_Voice
В этой статье вы на ступили на грабли заблуждения. Arduino это прежде всего не плата, (она кстати и не обязательно должна быть Arduino) а фреймворк и основная его ценность именно в программной части, которая позволяет условно в одну строку кода поморгать светодиодами или решить более сложные задачи без особых навыков программирования
ValentinSats
Когда-то, в конце 90-х или в начале 2000-х (еще до ардуинок) видел проекты на клонах 8051 с встроенными в ПЗУ интерпретаторами. Помню бэйсик и форт. Программки загружались через UART в текстовом виде прямо в ОЗУ из любой консоли. Понятно, что производительность была на порядок меньше, да и объем ОЗУ - в стандартной 8051 - 256 байт, во всяких атмелах или филипсах (на тот момент) - единицы килобайт. И при выключении питания - все терялось. Но светиком поморгать ресурсов уж точно хватило бы. Как и большинству современных задач: часики, термометры, простейшая автоматика и т.д.
Поэтому автор не так уж и далеко ушел. Чутка не хватило :)))
Atakum Автор
Да, но сейчас есть флеш память. поэтому данные не теряются.
Kill_Voice
В начале 2000-х застал такой в университете, даже кажется был промышленный экземпляр. На плате распаяны цифровой дисплей и цифровая клавиатура, можно было набить программу на ассемблере прямо не отходя от платы)
Javian
https://habr.com/ru/companies/ruvds/articles/598697/
"Волшебный чемодан"
Kill_Voice
Да-да именно он
AVKinc
Единственная ценность Ардуино как платформы это быстрый вход. И в это ее же и главный недостаток. Поморгать светодиодом в одну строку можно практически где угодно. Моргание светодиодом совершенно бессмысленное занятие.
Kill_Voice
Для большинства MCU вам кроме девборда, будет нужен деббагер превышающий стоимость самой платы, неудобная IDE на базе Eclipse, и еще более неудобное SDK в котором чтобы «поморгать» придется подключить ворох импортов и написать с десяток строк. Да и делать Франкенштейна из dvd привода тоже не сказать, что полное смысла занятие)
Nick0las
Фирменные девборды и дебаггеры это зачастую просто выжимание денег из клиентов. Впрочем, в большинстве случаев у них есть недорогие заменители. А вот странные IDE, кодогенераторы и программаторы преследуют многие платформы. Но зачастую можно использовать GNU тулчейн и OpenOCD.
Larymar
При всем уважении, гну тулчейн это не то, что я хочу видеть пытаясь сделать простейшие игрушки для домашнего пользования
0x1A4
Ценность платформы Ардуино в том, что можно в одной среде писать под кучу разных контроллеров, не заморачиваясь с настройкой окружения под каждый. У меня есть проект, в котором 2 контроллера в связке 8 битный и 32 битный и весь код для них написан в Arduino IDE. Поддерживать такое одно удовольствие, так как не нужно вспоминать как там все настраивал несколько лет назад на другом компе.
randomsimplenumber
Все задачи в конце концов сводятся к морганию светодиодом ;) Конечно же на ассемблере можно мигать значительно быстрее. Но если быстродействия хватает, и в память оно помещается - в чем проблема? Зачем выпиливать ещё одну реализацию Serial.print, если можно взять готовую?
Astroscope
Я, конечно, люблю побурчать, что "в наше время" и "ассемблер", но если совсем уж начистоту, то владение ассемблером становится все более нишевым, потому что все менее востребованным - вычислительные мощности растут как у контроллеров, что позволяет справляться с не всегда оптимальным кодом, так и компиляторы пусть не всегда идеально, но худо-бедно стараются оптимизировать выходной машинный код, поэтому скорость разработки и портируемость на часто сильно разные платформы нередко оказывается важнее гипотетической - необязательно реализуемой на практике, возможности вручную вылизать ассемблерный код до лучше, чем абсолютного совершенства. Поэтому, неожиданно для себя, заступлюсь за Ардуино.
Если вы программист, то вы, с немалой вероятностью, недооцениваете важность и значимость быстрого входа, ведь вы давно перешагнули все мыслимые пороги входа и просто пишете код как основное или даже единственное занятие в жизни. Естественно, для вас очевидны и нежелательны ограничения платформы. А вот у начинающих до этих ограничений дело может вообще никогда не дойти - они просто относительно просто решат свою задачу, хоббийную или даже коммерческую. Крупный бизнес, понятно, умеет и будет считать деньги, поэтому контроллер будет выбираться минимально достаточный - даже несколько центов на сотнях тысяч и миллионах изделий это ощутимые деньги, а мелкосерийные изделия на основе Ардуино - что в этом плохого, кроме, возможно, неоптимальной себестоимости?
Конечно. Под разные задачи лучше подходят разные инструменты, хотя зачастую они - и задачи, и инструменты, пересекаются. То есть наверняка найдется очень много реальных случаев разработки реального продукта, в которых можно использовать Ардуино. А что выбирают другие решения, так это не потому, что платформа Ардуино плоха сама по себе, но потому, что для каждого частного случая целесообразнее свое конкретное решение, и это уже совсем необязательно будет именно Ардуино.
Конечно. Как базовая проверка работоспособности - вполне приемлемое решение. Что код в одну строку в принципе скомпилировался и прошился, что в ответ на прошивку контроллер в принципе подает какие-то признаки жизни, причем ожидаемым от него способом.
Не согласен. Если сильно упрощенно, то контроллер делает две вещи - что-то считает и взаимодействует с периферией. В реальных устройствах не бывает такого, чтобы только что-то считать - всегда нужно дергать какие-то ноги по каким-то внутренним событиям и реагировать на дерготню ног извне. Мигание светодиодом - это вот как раз чистое, рафинированное дерганье ног по каким-то внутренним событиям, самая что ни на есть типичная задача любого контроллера в реальном изделии или его прототипе.
shiru8bit
Ценность платформы Ардуино - быстрое прототипирование. Есть библиотеки для всех мыслимых железок и стандартных задач. И к тому же поддерживается куча разных контроллеров.