eddy_em: (Default)
[personal profile] eddy_em
Итак, вчера я намудрил с порядком заполнения буферов для DMA, а сегодня этот косяк исправил:


Такой приличный шрифт я стащил отсюда. Сверху и снизу зачем-то оставлено по 2 пикселя пустого пространства. Для цифр я попробовал модифицировать этот шрифт. Но дизайнер из меня откровенно паршивый:

Как обычно, код лежит на гитхабе.
Провозился достаточно долго еще и из-за кривого SPI у STM32F103: ну кто бы мог додуматься, что даже в режиме Tx-only мастера необходимо указывать, что нога SS (которой нет) управляется софтово! Хорошо, на "казусе" народ помог. Правда, насколько я понял, они тоже вообще не в состоянии объяснить, на кой черт так сделано и просто методом тыка нашли решение.
Почему-то пауза в 10мс, которую я установил перед обновлением очередной четверти экрана, оказалась очень маленькой (хотя по моим рассчетам на полный цикл уходило бы порядка 40-45мс, т.е. получаться должно было бы 25Гц, но мерцало так, как будто бы герц 5..10). Снизил паузу до 3мс - полет нормальный.
С другой стороны, можно вообще непрерывно передавать данные: ведь передача ведется по сути аппаратно: при помощи DMA. Частоту SPI установил как clk/16 (т.е. 4.5МГц). Фронты на осциллограмме были жутчайшие, но работает-таки! Выше поднимать частоту на работающем экране не пробовал. Без него, пока эмулировал без нагрузки, начал с clk/4 — осциллограммы были настолько страшными, что явно бы оно работать не стало!
Хочется уже для дома осциллограф купить, да жаба жмет. Взял с жены обещание, что если будет шабашка на полмиллиона и больше, то обязательно хороший осциллограф тысяч за 100 себе прикуплю! Этот дешевенький с работы хорош лишь большим экраном, но глюков у него... Я измучился, пока нормально настроил синхронизацию. Да и входное сопротивление и емкость высоковаты (или щупы - дерьмо), возможно, у меня такие кривые осциллограммы и были лишь по вине осциллографа (хотя, китайцы - те еще рукожопы, может и "синяя таблетка" вносит-таки свое).
Экран в полностью включенном состоянии (несмотря на ШИМ 1/4) потребляет очень прилично. Восстановленный компьютерный БП (на китайские 250Вт) без вентилятора (т.к. обычно я его от силы на 20-30Вт нагружаю) решил, что для него эти ~5А — слишком много! И буквально через 10..15 секунд после попыток зажечь весь экран напруга на выходе БП падает до 2..2.5В, а на выходе 12В вообще нуль появляется! Возможно, конечно, просто БП уже полумертвый.

Да, после всех игр с экраном мне стало интересно: а насколько часто я могу его содержимое обновлять, чтобы на видео не было "размазни"?
Сделал дополнительный режим - отсчет долей секунд. С миллисекундами сразу стало понятно, что последние 2 цифры - какая-то мешанина. ОК, пробуем сотые доли секунды. Если нажимать периодически паузу, видно, что кривовато оно отображается. В принципе, это и логично: на 25..30Гц, что обеспечивает "видеокамера" лопаты, сотые очень тяжко зафиксировать... Ну, зато на десятых все ОК.

Бегущие строки не реализовывал: в данной шабашке это не нужно. Но в принципе, ничего там сложного нет: просто добавляем еще один КА, который каждые N миллисекунд будет заново перерисовывать сохраненный буфер с текстом в новую позицию: --X,Y. Паузу в конце можно реализовать достаточно просто: всего-то добавить к полной ширине строки десяток-другой пикселей, чтобы строчка после полного вывода еще немножко смещалась. На многих светодиодных панелях я видел именно такую реализацию. Ну либо в конечный автомат добавить еще одно состояние...

Автоматное программирование — это супер! Если вдруг возникнет момент, когда мне вообще будет нечего делать, можно попробовать для бесполезной 1-wire сделать полный цикл работы на чистом КА (понятно, что протокол - на DMA с таймером или UART'ом).

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 05:02 pm
Powered by Dreamwidth Studios