Победа над Тетрисом
В попытках получить нормальное изображение разобрал макетку и собрал минимальный тест на весу: четыре резистора и разъём. Изменений никаких.
На ЭЛТ телевизоре я увидел, что синхронизация постоянно уплывает. В какой-то момент можно увидеть плавающий прямоугольный растр, в одну долю секунды он даже оказывается на своём месте, потом начинает уплывать быстрее и быстрее. Потом можно видеть его диагональную версию. Определённо что-то не то с синхронизацией. Но что? Причины может быть две: тайминги и уровни сигналов.
Я было подумал, что моя Ардуина не имеет нормальной стабилизации тактовой частоты, у неё керамический резонатор вместо кварца. Но на фото автора проекта видна точно такая же.
Тогда я было подумал, может быть не те резисторы — в схеме для генерации уровней видеосигнала указаны номиналы нестандартного ряда: 380, 780 и 580 Ом. Я поставил ближайшие стандартные 390, 760 и 560 ом. Из-за разброса номиналов они фактически 388, 769, 566 — это очень близко к требуемым.
У автора на фото его собственной конструкции стоит вообще неизвестно что, но скорее всего цепочки по два резистора последовательно. Первые номиналы видны: 680 (вместо 580), 470 (вместо 780), 47 Ом, а остальные перекрывает провод. Вероятно он точно подобрал номиналы таким образом. Но не совсем, потому что из 680 последовательным включением 580 не сделать. Совершенно непонятная история.
Тогда я полез в код, посмотреть, что и как там устроено. И увидел подозрительное: DDRD устанавливается в %10101000, то есть выходные пины для видео PD7, PD5, PD3. А на схеме вместо PD5 указано PD6. Ну и разумеется, дело было в этом. Перепаял резистор на другой пин, и получил чёткую стабильную картинку на более капризном TFT-телевизоре.
Что дальше. Этот проект лишь показывает, что 4 градации серого в принципе возможны на Arduino. Но сам код в этом проекте заточен на тайловую графику, а мне нужна растровая графика. Также здесь код видео сильно связан с четырёхканальным программным генератором звука, который мне не нужен. Поэтому нужно или серьёзно переделывать этот код, или писать свой с нуля. К тому же есть вопрос расхода памяти, а у Arduino её всего 2048 байт. Пока буду думать.
рабочее
разное
arduino
proj_vsp80