Например TDA7294

Форум РадиоКот • Просмотр темы - 8 ферзей на AVR-ассемблере
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс дек 14, 2025 01:00:45

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: 8 ферзей на AVR-ассемблере
СообщениеДобавлено: Вт ноя 16, 2021 12:30:17 
Родился

Зарегистрирован: Вт ноя 16, 2021 12:20:59
Сообщений: 1
Рейтинг сообщения: 0
Фанатам ассемблера посвящается.

Всем привет! Решил подключить матрицу светодиодов 8х8 и вывести на неё решение задачи о 8 ферзях.
[Условия задачи: https://ru.wikipedia.org/wiki/%D0%97%D0 ... 1%8F%D1%85]

Процессор

В качестве процессора выбрал компактный и шустрый AVR attiny85. Программа будет написана на ассемблере. С небольшими настройками программа должна работать на любом другом процессоре AVR: attiny и atmega.

Дисплей

В качестве дисплея используем матрицу светодиодов, которая состоит из 8 вертикальных рядов и 8 горизонтальных строк со светодиодами.

Изображение
Матрица светодиодов 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 (https://github.com/Ro5bert/avra). Исходники можно скомпилировать с помощью GCC и получить исполняемый exe-файл. Я так и поступил. Компилятор avra.exe находится во вложении.

Программа на ассемблере для процессоров AVR компилируется в файл hex (https://ru.wikipedia.org/wiki/Intel_HEX), который с помощью загрузчика можно перенести в наш процессор.

Процесс компиляции показан на видео выше.

Запись программы в процессор

Полученный hex-файл с помощью программы avrdude.exe сначала выгружается в программатор, в его роли выступает Arduino Uno. Затем Arduino транслирует hex-файл в электрические сигналы, необходимые для загрузки файла в процессор attiny85.

Процесс загрузки с помощью avrdude.exe показан на видео выше.

А вы заметили?

Имена меток и прочие имена приходится писать на латинском языке, насколько вам это удобно? Никто ведь не запрещает использовать кириллические имена, напр.: Метка1 вместо LabelNumber1 или Цикл_по_строкам вместо cycle_by_strings. Достаточно сделать небольшую доработку, и тогда ваша программа станет более удобочитаемой.

Результат

В итоге мы получили работающую программу.



Чего хотят хакеры?

Уважаемые, хакеры, чтобы разобраться во всех тонкостях работы процессора, ассемблера и схемы подключения, нужно аккуратно вникнуть во всем эти тонкости. Это требует определённого времени и усилий с вашей стороны.

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

Изучать работу процессора на низком уровне весело, полезно и интересно. Это помогает лучше разобраться в железе и программировании. А вы обратили внимание на размер получившейся программы? Кстати, размер можно уменьшить, было бы только желание! :)

Напишите, пожалуйста, что бы хотели узнать о работе схемы про 8 ферзей, и я отвечу в следующей статье. Возможно, вас заинтересует программа на ассемблере, а может и нет. Я ещё не успел рассказать, откуда взялся файл avrdude.exe и как подключить Arduino к компьютеру и нашему миниатюрному процессору. Жду ваши комментарии и вопросы.

Исходники программы, файл hex и компилятор avra.
(https://disk.yandex.ru/d/spChXXjVoR6_rA)

Я пишу то, что вам интересно!
Благодарю за внимание!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8 ферзей на AVR-ассемблере
СообщениеДобавлено: Вт ноя 16, 2021 15:18:08 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 11
Зарегистрирован: Вт фев 21, 2012 20:42:26
Сообщений: 135
Откуда: Санкт-Петербург, Россия, Земля
Рейтинг сообщения: 0
Интересно, но алгоритм решения вы так и не раскрыли.

Ну и ворчание по пустякам:
1. Архив можно было в сообщении вложить, еще лучше - на гитхаб выложить.
2. Лицензия не указана.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8 ферзей на AVR-ассемблере
СообщениеДобавлено: Вт ноя 16, 2021 17:23:08 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15286
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Если выложен весь исходник - прочесть алгоритм не представляет особого труда.
Касательно многофайловых проектов под ассемблером - вполне себе выполнимо и в стандартных IDE (студио4.19 или микрочип студио - заменила АВР студио7).
Зачем еще чего-то выискивать? Разве чтоб "достать хакера" - но при открытом исходнике это бессмысленно.
Запись программы вполне выполнима стандартными радиолюбительскими устройствами - тут у кого чего под лапой имеется, был бы скомпилированный файл формата INTEL hex8. Какой смысл привязывать программатор к ардуино IDE?
Разве что использование ардуино-нано в качестве одноразовой прошивайки (к примеру как тут
https://radiokot.ru/forum/viewtopic.php?f=66&t=176847 но с другим аппаратным алгоритмом под АВР микроконтроллер)...
Так это уже при наличии типовых решений некоторый изврать однако...
:beer:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y