eddy_em: (Default)
[personal profile] eddy_em
Как оказалось, проблема была в используемыми китайцами компонентах: все-таки, чтобы оно заработало правильно, необходимо было входные уровни увеличить до 5В. Исходники на гитхабе.
Начало пайки:


Учитывая предыдущие проблемы с отображением, решил спаять пятивольтовые буферы, благо, элементная база у меня дома вполне-таки позволяет это сделать. Взял два CD4050, но т.к. они шестиканальные, тринадцатый канал реализовал на мосфете (2N7000). Сначала хотел какой-нибудь мелкий SMD'шный запаять, но оказалось, что у всех них слишком паршивые временные характеристики (чем меньше Rdson, тем выше емкость затвора, в итоге получилось, что самый паршивый с энергетической точки зрения полевик обладает наименьшим временем перехода — 10нс). Мосфет запаял на nOE, сделав его таким образом просто OE.
Сделал бы все вечером на работе, но сижу в состоянии непонятного то ли гриппа, то ли простуды. Врач мне рекомендовал на работу еще пару-тройку дней все же не ходить. Так что, вместо изготовления печатной платы, спаял все на макетке (в принципе, по времени вышло, наверное, даже быстрей: на кикад ушло бы минимум часа полтора, да еще часа два-три на изготовление платы и пайку; хотя, конечно, паять на готовую печатную плату приятней, чем проводочки припаивать на макетке). Вот такая штукенция получилась:


Что интересно: опять с первой попытки пайки у меня 2N7000 не заработал! С SMD'шными мосфетами у меня такое было очень редко, чтобы после пайки полевик не работал. С этими же чуть ли не в 50% случаев! Откусил старый, припаял новый — завелось.
Думал было добавить в качестве примера разноцветные летающие пиксели, но как представил объем кода (добавить аппаратный random, учитывать взаимодействие между пикселями и т.д., и т.п.), просто добавил "псевдорадугу".
Цвета у меня формируются в восьмибитном формате RRRGGGBB. Таким образом, чтобы отобразить экран один раз, его надо перерисовать семь раз (с учетом восьмиградационных цветов). Для работы используется таймер TIM3: строб он генерирует в режиме ШИМ с 50% заполнением, а по событию UEV пинает DMA, которое и передает на экран очередные две строки (т.к. формат HUB75 подразумевает одновременный вывод двух строк: одна в верхней половине экрана и одна в нижней). Номер строки, OE и LAT выводятся ногодрыгом в прерывании по окончанию передачи DMA (чтобы дождаться окончания последнего строба пришлось добавить в прерывание while(!(TIM3->SR & TIM_SR_UIF)), а отключение таймера гарантируется TIM3->CR1 |= TIM_CR1_OPM в том же прерывании ранее).
Надо бы когда-нибудь под этот экранчик простые классические игрульки реализовать: тетрис, змейку и т.п.

Видео-демонстрация работы.
UPD: поменял алгоритм отображения. Уж очень экран мерцает, если цвет изображать последовательностью из семи кадров. Сделал построчный "ШИМ": каждая строка отображается 7 раз, а уж пиксели в ней — в зависимости от уровня цвета.

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 06:38 am
Powered by Dreamwidth Studios