Фанатам ассемблера посвящается. Всем привет! Решил подключить матрицу светодиодов 8х8 и вывести на неё решение задачи о 8 ферзях.  В качестве процессора я выбрал компактный и шустрый процессор attiny85. Программа будет написана на ассемблере. С небольшими настройками программа должна работать на любом другом процессоре AVR: attiny и atmega. В качестве дисплея используем матрицу светодиодов, которая состоит из 8 вертикальных рядов и 8 горизонтальных строк со светодиодами. У меня матрица с общим катодом, это значит, чтобы задействовать выбранный ряд, на него нужно подать Ноль, а на строки Единицы. Тогда в местах пересечения ряда и строк мы получим включённые светодиоды. У матрицы 16 выводов и все нужно задействовать, чтобы управлять 64 светодиодами. У нашего процессора всего 6 выводов, из них доступны только 5, поэтому придётся увеличить число выводов данных. Проще всего это сделать с помощью сдвиговых регистров. Регистр работает по протоколу SPI: принимает на вход последовательный сигнал: Биты данных и Сигнал тактирования и на их основании формирует 8 параллельных битов данных. Для нашей схемы, чтобы получить 16 выводов, потребуется 2 таких регистра.  Существуют матрицы светодиодов со встроенными регистрами сдвига, напр.: с микросхемой MAX7219 на борту, но у меня под рукой такой модели не оказалось, поэтому решил немного заморочиться, протянув от сдвиговых регистров к матрице большую связку проводов :). Однако такой подход позволяет быстрее разобраться в устройстве управления матрицей :). В каждый момент времени матрица может отображать только один ряд данных. Поэтому, чтобы сформировалось изображение, приятное глазу, нужно вывести первый ряд с включенным светодиодом, выдержать короткую паузу, перейти к следующему ряду, отключив предыдущий. И так доходим до последнего 8-го ряда. Переключение светодиодов происходит почти мгновенно, поэтому глаз не успеет разглядеть включённые светодиоды. Поэтому давайте повторим обновление матрицы 50 раз, и всё будет хорошо :). Такой подход к выводу изображения называется динамическим выводом. Для написания программы на ассемблере я использую Notepad++. Здесь же выполняю компиляцию, контроль ошибок, загрузку машинных кодов в процессор attiny85 и здесь же начинал писать эту статью. :) Для настройки возможности компиляции и загрузки в процессор задействую стандартный плагин NppExec, который позволяет по кнопке F6 выбрать команду, которую нужно выполнить. На видео показаны последовательно два процесса: компиляции и загрузки в процессор. Исходный текст программы на ассемблере разбит на несколько файлов. Так делать всегда не обязательно и небольшую программу можно целиком написать одним файлом. В головном файле ferz_direct.asm описана инициализация процессора для работы со стеком, настройка выводов процессора на выход, запуск перебора вариантов и их динамическое отображение на матрице светодиодов. Имя включаемого файла Назначение attiny85.inc Перечислены имена и номера регистров и имена и номера битов: DDRB, PORTB и др. pausa.inc Пауза: цикл в цикле в цикле. Вполне подходит для нашей программы, т. к. мы не особо заботимся об энергоэффективности процессора. commands.inc Содержит макрос, упрощающий запись в регистр ввода-вывода. SPI_master.inc Тактирует вывод данных, управляет состоянием защёлки обоих сдвиговых регистров. next_variant.inc Поиск решений расстановки ферзей: алгоритм был взят из ретро-книги по программированию на Фортране. :) А сейчас переходим к компиляции программы в двоичные коды. Я использовал компилятор avra.exe. Исходники можно скомпилировать с помощью GCC и получить исполняемый exe-файл. Я так и поступил. Компилятор avra.exe находится во вложении. Программа на ассемблере для процессоров AVR компилируется в файл hex, который с помощью загрузчика можно перенести в наш процессор. Процесс компиляции показан на видео выше. Полученный hex-файл с помощью программы avrdude.exe сначала выгружается в программатор, в его роли выступает Arduino Uno. Затем Arduino транслирует hex-файл в электрические сигналы, необходимые для загрузки файла в процессор attiny85. Процесс компиляции с помощью avrdude.exe показан на видео выше. Имена меток и прочие имена приходится писать на латинском языке, насколько вам это удобно? Никто ведь не запрещает использовать кириллические имена, напр.: Метка1 вместо LabelNumber1 или Цикл_по_строкам вместо cycle_by_strings. Достаточно сделать небольшую доработку, и тогда ваша программа станет более удобочитаемой. В итоге мы получили работающую программу. Уважаемые, хакеры, чтобы разобраться во всех тонкостях работы процессора, ассемблера и схемы подключения, нужно аккуратно вникнуть во всем эти тонкости. Это требует определённого времени и усилий с вашей стороны. В этой статье я показал демонстрацию работоспособность программы на ассемблере по поиску положения ферзей на шахматной доске и вывода результат на дисплей. Изучать работу процессора на низком уровне весело, полезно и интересно. Это помогает лучше разобраться в железе и программировании. А вы обратили внимание на размер получившейся программы? Кстати, размер можно уменьшить, было бы только желание! :) Напишите, пожалуйста, что бы хотели узнать о работе схемы про 8 ферзей, и я отвечу в следующей статье. Возможно, вас заинтересует программа на ассемблере, а может и нет. Я ещё не успел рассказать, откуда взялся файл avrdude.exe и как подключить arduino к компьютеру и нашему миниатюрному процессору. Жду ваши комментарии и вопросы. Я пишу то, что вам интересно!Благодарю за внимание! Скачать исходники можно здесь