уже отправлял фото. Конечно, это готовая библиотека, но она основана на этих прерываниях, никаких искажений.
Если речь про VGAX, то я же писал, что там есть специальный фикс где при помощи еще одного таймера работающего на частоте CPU компенсируют джиттер. Это не означает, что его нет!
Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Вс сен 22, 2024 12:16:47 Сообщений: 313 Откуда: Село Лютенька
Рейтинг сообщения:0
сильный джиттер может возникать из-за отклонения на пару тактов. Чтоб его минимизировать, достаточно добавить ещё один таймер, также, как это сделано в VGAX. Конечно, я не говорю, что его там нет, однако, из-за таймера, который делает задержку для сигнала, эффект от джиттера минимален, можно им пренебречь.
_________________ "Умный может зарабатывать триста рублей, а проживать три тысячи"
в одном кадре у нас 480 строк (0...179) значит через каджые 480 строк мы должны подавать импульс на вывод PB0... как это лучше сделать ? вариантов миллион)) если бы это был простой сигнал от старого телика... идущий по одному проводу...
то там всё просто)) например можно тупо в прерываниях нашего таймера через каждые 480 строк менять режим работы самого таймера... и получим кадровые импульсы... а столько у нас кадровые импульсы ?
1,534 мс / 62,5нс = 24544 тактов вышли за верхний предел счета 508 тактов)) но наш счётчик 16 битный... он считает до 65536 тактов)) поэтому после каждых 480 строк тупо меняем режим работы нашего счетчика... а потом обратно)) ну или другим удобным способом)) а можно сделать на отдельном таймере /счётчике... короче...вариантов как обычно... миллион)) но у нас VGA... а не старый телик... нужен отдельный пин... или мультиплексор... короче вариантов миллион))
Конечно, я не говорю, что его там нет, однако, из-за таймера, который делает задержку для сигнала, эффект от джиттера минимален, можно им пренебречь.
Джиттер компенсируется полностью. Суть в том, что таймеры на AVR не вызывают прерывания в точно заданные промежутки времени, как вы с Романом утверждали ранее.
ps. Попробовал получить джиттер на STM32H5. Читаю в прерывании таймера CNT несколько раз в сек и сразу вывожу, джиттер есть только если код выполняется из флеша с включенным кешем. Без кеша или при выполнении кода из RAM читаются одинаковые значения, хотя я отключил разбиение инструкций при прерываниях, правда хотя такой бит в документации от ST и описан, вообще-то он зависит от реализации. Зато когда вставил в цикл ожидания атомарное чтение по невыровненному адресу, то периодически стало читаться значение на 2 больше.
а почему на таймере ? а потому что таймер тактируется напрямую от кварцевого генератора... поэтому у нас такие ровные и чёткие импульсы... с кварцевой точностью)) и ничего не дрожит)) импульсы не зависят ни от температуры... ни от напряжения питания... ни от работы остальной программы... и NOP нам не нужен))
дрожит... не дрожит)) мы этого не видим)) прерывания... сколько тактов тратит процессор на выход в обработчик прерывания... и обратно... это мы пока подробно не разбирали)) об этом тоже есть в даташите... там не всё так просто... пока у нас только постоянная частота сигнала... -есть частота сигнала -есть фаза сигнала это разные вещи))
Добавлено after 36 minutes 47 seconds: для начала хотя бы вывести простенькую картинку...
сколько можно запихнуть пикселей в одну строку ? 25,17 мкс / 62,5 нс = максимум 402 пикселя... а сколько строк в кадре ? 480 значит разрешение нашего экрана составляет 402 x 480 пикселя
чтобы изменить разрешение экрана... надо менять кварц...
Добавлено after 8 minutes 55 seconds: можем не менять кварц... а тупо выводить картинки на пол экрана )) записываем в рабочее поле пиксели только на половину строки...
при этом разрешение экрана не изменилось... 402 x 480 пикселя мы просто играемся с размером картинки... 402 x 480 - картинка на весь экран... 200 x 480 - картинка на пол экрана... и т.д.
Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Вс сен 22, 2024 12:16:47 Сообщений: 313 Откуда: Село Лютенька
Рейтинг сообщения:0
Начинаю понимать, спустя неделю, лол. Если разрешение будет небольшое, ну скажем - 250 на 150, а размер картинки увеличить на весь экран, то микроконтроллер ровно также будет напрягаться?
_________________ "Умный может зарабатывать триста рублей, а проживать три тысячи"
пример из библиотеки VGAX. Разрешение 120 на 60, а растянуто на весь экран..
менять разрешение экрана мы не можем... 402 x 480 пикселя надо менять кварц...
менять частоту развертки мы не можем... монитору будет плохо)))
остаётся только обработка картинки программным путём...
именно так и работаю видюхи в компе - меняют количество пикселей в картинке программным путём... получим фотошоп)) именно так мы делали на экране телефона - меняли количество пикселей в картинке программным путём... и т.д. и .т.п.
размер картинки увеличить на весь экран, то микроконтроллер ровно также будет напрягаться?
ну подумай)) сейчас у тебя микроконтроллер просто выводит картинку на экран без обработки... и то напрягается)) а с предварительной обработкой картинок будет ещё больше напрягаться)) в компе этим занимаются видюхи... это такие большие устройства... со своим процом... и кучей всего))
А за один такт получится только вывести... статичную картинку... например чёрный квадрат малевича))
Вложение:
)).jpg
Все так. Но у нас есть строчные и кадровые синхроимпулсы, во время которых мы можем менять буфер) Ведь эти импульсы длинные. Процессор во время них свободен.
есть строчные и кадровые синхроимпулсы, во время которых мы можем менять буфер... сколько длительность строчного импульса ? 3,77мкс а сколько строк в кадре ? 480 3,77мкс х 480 = 0,0018096 c
а столько у нас кадровый импульс ? 1,534 мс
а столько у нас всего свободного времени ? 0,0018096 + 0,001534 = 0,0033436 c
да у нас вагон времени ! ))
Добавлено after 15 minutes 21 second: ну если трассировкой лучей делать не будем... то задача сильно упрощается ! )) а дальше... если хотим получить картинку на весь экран... то надо писать в строку все 402 пикселя...
получилось 402 x 480 пикселя наша сетевуха научилась обрабатывать картинки ! )) причём делает это она сама... на лету ! ))
обратите внимание... картинка растянулась в два раза... а размер буфера не изменился. )) О ! Уже прогресс ! )) так скоро и до трассировки лучей дойдём))
именно так и работаю видюхи в компе - меняют количество пикселей в картинке программным путём... получим фотошоп)) именно так мы делали на экране телефона - меняли количество пикселей в картинке программным путём...
сейчас у тебя микроконтроллер просто выводит картинку на экран без обработки... и то напрягается)) а с предварительной обработкой картинок будет ещё больше напрягаться)) в компе этим занимаются видюхи... это такие большие устройства... со своим процом... и кучей всего))
То что вы описали это масштабирование, этим занимаются "видюхи" с портами LVDS или MIPI шиной для подключения("напрямую" к GPU) LCD матриц, где в роли скалера выступает сама видюха. В самих же мониторах масштабированием занят скалер, причем минимальное разрешение которое способен обработать скалер указано в мануале на монитор, как правило для VGA оно 640x480 пикселей, все что ниже просто не будет корректно работать или "отброситься" самим MCU монитора с сообщением - "Out of range"
И вообще VGA это прошлый век, костыль и для LCD зло. Юзая LCD мониторы лучше задействовать TMDS (DVI-D, HDMI)
В данном случае, изысканно будет заюзать ПЛИС с DRAM на борту и подключиться к TMDS (DVI-D, HDMI) совершенно любого современного моника/телика, а к плис можно будет подключить хоть "ардуино", хоть древний Z80
В самих же мониторах масштабированием занят скалер, причем минимальное разрешение которое способен обработать скалер указано в мануале на монитор, как правило для VGA оно 640x480 пикселей, все что ниже просто не будет корректно работать или "отброситься" самим MCU монитора с сообщением - "Out of range"
для начала мы хотим сделать разрешение 3х1 и вывести 3 пикселя на экран.
Ну да, фантазеров тут много ) Уже ведь все посчитали, нужно отправить 256 пикселей за 25.6 us, при 3 тактах на пиксель получаем AVR работающий на частоте 30MHz, если, конечно, хочется больше двух цветов. Иначе можно воспользоваться SPI(точнее USART в режиме SPI), но все равно ардуина должна тактироваться от 20MHz, а не 16-ти. И даже для ЧБ варианта лучше mega328 заменить на что-то с RAM 8KB, чтобы каждый кадр не пересылать с другого AVR весь фреймбуфер. Для цветного режима нужно 49KB RAM и таких AVR в природе не существует, а пересылать 256*192*60 = ~3MB/s один AVR другому не сможет тоже. Остается или ЧБ, или цветной режим с огромными пикселями, или болезненное осознание того, что AVR для таких задач не предназначен )
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения