Обсуждаем контроллеры компании Atmel.
Ответить

Re: Тетрис для АВР+светоматрица. На Ассемблере!

Вс авг 27, 2017 11:13:28

Купите у меня 200 платок со светодиодами. )))) Пожалуйста!
Ну потратил я на них в районе 8000 рублей. За сколько их продать - не знаю. И кому тоже. Так бы может и взял бы эти ВС, только по одному светодиоду мало. Надо несколько тоже брать на одну клетку.

Re: Тетрис для АВР+светоматрица. На Ассемблере!

Вс авг 27, 2017 17:45:04

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

Я так понял, что у Вас на каждую строку своя плата управления. И что-то у Вас не получилось с цветами. Т.е. Вы наверное просили совета. Несомненно в этой теме уже были схемы. Не могли бы ли Вы повторить схему, наверное лучше структурную. Замутим алгоритм какой-нибудь.

Re: Тетрис для АВР+светоматрица. На Ассемблере!

Вс авг 27, 2017 18:01:51

Вот неужели Вам нечем больше заняться? :roll: :)

Просто я спаял два лопуха регистров и ключей всего. Надо же их спаять аж 20 штук. Поняли все правильно, что на каждую строку своя плата. Все эти платы соединить последовательно и получится общая суть всего табло.

Схемы этих плат у меня никогда не было. Были только приблизительные ранее в теме, где и рекомендовали поставить кучу регистров и гнать данные не динамикой по строкам или столбцам, а все сразу. Т.е. заливать полный массив и выводить все сразу на экран. От чего я теперь немного переживаю, потянет ли это все мой блок питания. :dont_know: :)))

По схеме же одной платы, там все просто. Используются регистры 74НС595. На микроконтроллер выведены все необходимые выводы регистра. Такие как: MR - сброс всего регистра, DS - данные, SH_CP - синхроимпульсы, ST_CP - защелка.
На плате собрано последовательно 5 регистров, а все выводы управления ими соединены параллельно. (Ну как и вроде должно было быть).
Никаких шинных формирователей я еще не использовал. Да и не на платах этих они не нужны.

Чтобы было проще развести плату и делать меньше перемычек (а эти регистры не очень удобны в разводке), решил не использовать некоторые их выводы, как и выводы ULN2003. Микросхем этих и тех у меня в избытке.
Получилось, что первый вывод каждого регистра не используется. Поэтому первый передаваемый бит на эту плату игнорируется, т.к. вывод ни к чему не подключен. Затем три вывода идут по-порядку. После чего опять вывод не используется и три по порядку.
Из 8 выводов регистра выкинуты получаются каждый 1ый и каждый 5ый.

Вот, нарисовал примерную схему, надеюсь понятная (по сути, там ничего сложного и нету) (не указаны ULN2003, стабилизатор AMS1117):
Изображение

Один регистр в итоге управляет двумя платами со светодиодами. Т.к. платы с РГБ светодиодами, то эти оставшиеся три бита задают цвет.
Вот и все.

Я написал на демо-платке тестовую программку для вывода произвольного цвета на эти платы. Создал массив, который заполнил байтами (10 штук). И тупым ногодрыгом впихивал их в эти регистры по 4 бита, где каждый первый бит был любым не из этого массива. Все вроде не сложное, но почему-то где-то натупил и цвета горят лишь на 80% те, которые в массиве. При этом в непонятной последовательности. Подозревал, что это по регистрам они гонятся без очистки. Но я же дергал MR (сброс), как в описании. Он должен был их чистить. Потом написал тупую подпрограммку для очистки, которая забивала регистры нулями. Все равно что-то не то.

Теперь думаю, что это какие-то недочеты по железу. :facepalm: :dont_know:

З.Ы. Простите за много слов. И благодарю за проявленный интерес к моим глупостям. :beer:

Re: Тетрис для АВР+светоматрица. На Ассемблере!

Вс авг 27, 2017 18:40:30

СКАЗОЧНИК писал(а):Вот неужели Вам нечем больше заняться?
У меня есть замечательный самодельный спирт, так что есть чем ;).

СКАЗОЧНИК писал(а):Схемы этих плат у меня никогда не было.
Лично мне без схем трудно обходиться, видимо не хватает воображения. Начертите длинный прямоугльник-строку. От него по три вывода на каждую ячейку (я же правильно понимаю что у Вас три цвета на ячейку?) Каждый вывод пронумеруйте от 0 до 39 (не использвуемые вывода на схеме тоже пускай будут). Я считаю, что это важно.

У Вас 2^3 цветов. Для начала позажигайте только одну ячейку всеми восемью комбинациями. Для каждого цвета запишите получившийся цвет. У Вас будет 0 - черный, 1 -синий, 2 -зеленый, 3- какой-то смешанный ... 7 - белый или как-то подобно.

И так, у Вас один нибл на ячейку или один байт на две ячейки или 5 байт на строку (один бит в резерве остается) Пишите функцию, процедуру или подпрограмму (как угодно) которая зажигает строку из ОЗУ по адресу. Выделяете 5*20=100 байт ОЗУ под стакан.

Пишите подпрограмму, которая вызывает эту функцию 20 раз передавая ей новый адрес.
После этого даете защелку. И вот у Вас готовый видеопроцесор. Тут просится SPI.

Добавлено after 4 minutes 35 seconds:
Вроде схемы не было когда писал ответ. Но думаю с прямоугольником- строкой все равно будет понятнее. А эти прямоугольники сложить в стакан затем.

Добавлено after 2 minutes 39 seconds:
По скольку у Вас младшие битов ниблов не используются, то в ОЗУ скорее всего будет удобнее так же и хранить данные.

Добавлено after 2 minutes 36 seconds:
СКАЗОЧНИК писал(а):Потом написал тупую подпрограммку для очистки, которая забивала регистры нулями. Все равно что-то не то.
А на выходах регистров есть эти нули?

Re: Тетрис для АВР+светоматрица. На Ассемблере!

Вс авг 27, 2017 19:26:52

Z_h_e писал(а):У Вас будет 0 - черный, 1 -синий, 2 -зеленый, 3- какой-то смешанный ... 7 - белый или как-то подобно.

именно так и будет. Всего 8 цветов, если считать "черный".

Z_h_e писал(а):зажигает строку из ОЗУ по адресу. Выделяете 5*20=100 байт ОЗУ под стакан.

:oops: К своему стыду, с ОЗУ ни разу на Ассемблере дел не имел. Только с массивом во Флеш.

Z_h_e писал(а):или 5 байт на строку

При этом же, во Флеш я размещаю массив из 10 байт, т.е. одну строку, а не весь стакан. На каждую клетку байт свой. Просто использую из каждого байта всего три первых бита...
1 и 5ый бит, который не используется не храню в массиве, а просто в процедуре его обрабатываю, за ним сразу три значащих бита из массива идут.

Z_h_e писал(а):А на выходах регистров есть эти нули?

Да. При забивании нулями конечно все гасло. И при сбросе тоже все гасло, если MR использовать на регистрах.
У меня просто неправильно как-то читался или обрабатывался сам массив... :roll:

Re: Тетрис для АВР+светоматрица. На Ассемблере!

Вс авг 27, 2017 19:36:57

СКАЗОЧНИК писал(а):с ОЗУ ни разу на Ассемблере дел не имел. Только с массивом во Флеш.
Если говорить про ОЗУ встроенное в МК, то особой разницы то нет. Только что другой командой считываете и чуток быстрее происходит это дело.

СКАЗОЧНИК писал(а):а. При забивании нулями конечно все гасло. И при сбросе тоже все гасло, если MR использовать на регистрах.
У меня просто неправильно как-то читался или обрабатывался сам массив... :roll:
Я имел ввиду, на выходах сдвиговых регистров были те значения, что Вы хотели или нет. А то может те, просто светопередача у диодов не та.

На счет возможного размещения данных стакана в ОЗУ вот вариант. В нем байт на две ячейки.
Изображение

Re: Тетрис для АВР+светоматрица. На Ассемблере!

Пн фев 19, 2018 16:57:59

И это...
Вот если у меня фигура, пусть "Г" летит и я ее сдвигаю влево. Приспичило мне ее повернуть. Так вот, если у меня достаточно есть полей, до левого борта стакана, то поворачиваю без проблем. Если у меня недостаточно места, т.е., например, осталась одна строка до борта, то повернуть ее уже не могу?
Или можно повернуть, но тогда сдвинув фигуру вправо, как будто она оттолкнулась от борта при повороте?
Как правильно то?

1. Как я понимаю, то я нажимаю кнопку на джойстике для поворота.
2. Программа берет очередное значение массива (поворота фигуры), ну или рассчитывает новое положение фигуры,
3. потом берет это новое значение фигуры и проверяет на коллизии, т.е., в данном случае, проверяет на столкновение со стенкой стакана.
4. Если ничего не нарушилось, то рисует эту новую фигуру на экране.
5. Если наложение происходит (нарисовать невозможно), то тупо возвращает фигуру в обратное положение (у себя в памяти)
6. Рисует на экране старую фигуру. (т.е. ничего не меняет)
7. Роняет фигуру на один ряд (при условии, что это возможно).


И это...
Если я вращаю фигуру, то есть у нее изначально основание. Пусть одна сторона, которая сейчас нижняя находится на некой строке. Так вот, если я поверну фигуру, то она встает, пусть, вертикально, тогда относительно ее цента я "пробиваю" основание и фигура получается уже ниже на одну строку. А далее, я ее еще и сдвину на очередной шаг (строку). Как-то не справедливо получается.
По моему надо вращать фигуру так, чтобы она в любом положении не выходила ниже основания. ?! :roll: :?
Последний раз редактировалось СКАЗОЧНИК Пн фев 19, 2018 17:12:57, всего редактировалось 1 раз.

Re: Тетрис для АВР+светоматрица. На Ассемблере!

Пн фев 19, 2018 17:08:30

Я уже точно не помню как делал, но кажется так:
1. Фигура вертится вокруг некого своего центра.
2. Проверяется возможность ее поворота. Конечно не пытаясь ее перерисовать.
3. Если возможно перерисовывается.


Хороший орентир что правильно крутишь, это повернув каждую фигуру на 360, она осталась на том же месте(конечно это надо успеть до момента ее движения вниз)

Re: Тетрис для АВР+светоматрица. На Ассемблере!

Пн фев 19, 2018 20:53:10

вроде как во всех тетрисах при повороте фигура смещается, если места не хватает.

Re: Тетрис для АВР+светоматрица. На Ассемблере!

Пн фев 19, 2018 20:58:38

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