Вопрос программистам

Флейм в чистом виде - все что угодно...
Но - в рамках закона :)
Adrift
Вымогатель припоя
Сообщения: 551
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Вопрос программистам

Сообщение Adrift »

[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640871#p4640871"]уже отправлял фото. Конечно, это готовая библиотека, но она основана на этих прерываниях, никаких искажений.[/uquote]
Если речь про VGAX, то я же писал, что там есть специальный фикс где при помощи еще одного таймера работающего на частоте CPU компенсируют джиттер. Это не означает, что его нет!
Реклама
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

тактовую инструкцию... cpu... про это тоже написано в даташите.
Screenshot_1.jpg
(61.87 КБ) 43 скачивания
Screenshot_2.jpg
(61.17 КБ) 38 скачиваний
но до этого ещё не дошли... у нас ещё развертка не готова...
Реклама
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

сильный джиттер может возникать из-за отклонения на пару тактов. Чтоб его минимизировать, достаточно добавить ещё один таймер, также, как это сделано в VGAX. Конечно, я не говорю, что его там нет, однако, из-за таймера, который делает задержку для сигнала, эффект от джиттера минимален, можно им пренебречь.
"Умный может зарабатывать триста рублей, а проживать три тысячи"
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

кадровая развертка...
для кадровой развертки нужен отдельный пин... например возьмём соседний PB0...
кадровая развертка.jpg
(24.59 КБ) 48 скачиваний
в одном кадре у нас 480 строк (0...179)
значит через каджые 480 строк мы должны подавать импульс на вывод PB0...
как это лучше сделать ?
вариантов миллион))
если бы это был простой сигнал от старого телика... идущий по одному проводу...
TV сигнал.jpg
(69.54 КБ) 46 скачиваний
то там всё просто))
например можно тупо в прерываниях нашего таймера через каждые 480 строк менять режим работы самого таймера... и получим кадровые импульсы...
а столько у нас кадровые импульсы ?
кадры.jpg
(49.4 КБ) 50 скачиваний
1,534 мс / 62,5нс = 24544 тактов
вышли за верхний предел счета 508 тактов))
но наш счётчик 16 битный... он считает до 65536 тактов))
поэтому после каждых 480 строк тупо меняем режим работы нашего счетчика... а потом обратно))
ну или другим удобным способом))
а можно сделать на отдельном таймере /счётчике...
короче...вариантов как обычно... миллион))
:tea:
но у нас VGA... а не старый телик... нужен отдельный пин... или мультиплексор...
короче вариантов миллион))
Реклама
Эиком - электронные компоненты и радиодетали
Adrift
Вымогатель припоя
Сообщения: 551
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Вопрос программистам

Сообщение Adrift »

[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640884#p4640884"]Конечно, я не говорю, что его там нет, однако, из-за таймера, который делает задержку для сигнала, эффект от джиттера минимален, можно им пренебречь.[/uquote]
Джиттер компенсируется полностью. Суть в том, что таймеры на AVR не вызывают прерывания в точно заданные промежутки времени, как вы с Романом утверждали ранее.

ps. Попробовал получить джиттер на STM32H5. Читаю в прерывании таймера CNT несколько раз в сек и сразу вывожу, джиттер есть только если код выполняется из флеша с включенным кешем. Без кеша или при выполнении кода из RAM читаются одинаковые значения, хотя я отключил разбиение инструкций при прерываниях, правда хотя такой бит в документации от ST и описан, вообще-то он зависит от реализации. Зато когда вставил в цикл ожидания атомарное чтение по невыровненному адресу, то периодически стало читаться значение на 2 больше.
Реклама
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

[uquote="roman.com",url="/forum/viewtopic.php?p=4639810#p4639810"]а почему на таймере ?
а потому что таймер тактируется напрямую от кварцевого генератора...
поэтому у нас такие ровные и чёткие импульсы... с кварцевой точностью))
и ничего не дрожит))
импульсы не зависят ни от температуры... ни от напряжения питания... ни от работы остальной программы...
и NOP нам не нужен))[/uquote]
дрожит... не дрожит)) мы этого не видим))
:shock:
прерывания...
сколько тактов тратит процессор на выход в обработчик прерывания... и обратно... это мы пока подробно не разбирали))
об этом тоже есть в даташите... там не всё так просто...
:tea:
пока у нас только постоянная частота сигнала...
-есть частота сигнала
-есть фаза сигнала
это разные вещи))
:tea:

Добавлено after 36 minutes 47 seconds:
для начала хотя бы вывести простенькую картинку...
[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640842#p4640842"]А как своё разрешение рассчитать? Как понимаю, нужно начинать с частоты, а дальше..[/uquote]
а дальше...
-есть ардуина
-есть монитор с VGA
экран.jpg
(24.39 КБ) 49 скачиваний
у VGA есть "рабочее поле" туда пишем свои пиксели...
VGA_0.jpg
(23.09 КБ) 45 скачиваний
всё что попадает в рабочее опле мы видим на экране))

а дальше...
какое максимально у нас разрешение ?
1/16МГц = 62,5нс один такт ардуины.
соответственно один пиксель тоже 62,5нс
экран_0.jpg
(28.71 КБ) 42 скачивания
сколько можно запихнуть пикселей в одну строку ?
25,17 мкс / 62,5 нс = максимум 402 пикселя...
а сколько строк в кадре ? 480
значит разрешение нашего экрана составляет 402 x 480 пикселя
экран_1.jpg
(26.67 КБ) 42 скачивания
:tea:
чтобы изменить разрешение экрана... надо менять кварц...
:roll:

Добавлено after 8 minutes 55 seconds:
можем не менять кварц...
а тупо выводить картинки на пол экрана ))
записываем в рабочее поле пиксели только на половину строки...
пиксели на пол экрана.jpg
(20.22 КБ) 47 скачиваний
видим на пол экрана...)) получили картинку 200 x 480 пикселя
экран_3.jpg
(38.57 КБ) 44 скачивания
записываем в рабочее поле пиксели в центре строки...
пиксели по центру.jpg
(18.96 КБ) 50 скачиваний
видим в центре экрана...)) получили картинку 200 x 480 пикселя
экран_4.jpg
(38.27 КБ) 48 скачиваний
:))
и т.д.

при этом разрешение экрана не изменилось... 402 x 480 пикселя
мы просто играемся с размером картинки...
402 x 480 - картинка на весь экран...
200 x 480 - картинка на пол экрана...
и т.д.
:tea:
[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640332#p4640332"]Выводить буду картинки 256x192пкс.[/uquote]
значит у тебя будет картинка на пол экрана.
:tea:
Реклама
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

Начинаю понимать, спустя неделю, лол. :?
Если разрешение будет небольшое, ну скажем - 250 на 150, а размер картинки увеличить на весь экран, то микроконтроллер ровно также будет напрягаться?
"Умный может зарабатывать триста рублей, а проживать три тысячи"
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640544#p4640544"]Вот то что картинка на пол экрана как раз мне и не нравится. Какое-то решение должно быть, хотя бы расстянуть картинку, пусть она и не ровной будет.[/uquote]
значит записывай в рабочее поле пиксели на всю строку... 402 пикселя
[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640544#p4640544"]пример из библиотеки VGAX. Разрешение 120 на 60, а растянуто на весь экран..[/uquote]
менять разрешение экрана мы не можем... 402 x 480 пикселя
надо менять кварц...

менять частоту развертки мы не можем... монитору будет плохо)))

остаётся только обработка картинки программным путём...

именно так и работаю видюхи в компе - меняют количество пикселей в картинке программным путём...
получим фотошоп))
:))
именно так мы делали на экране телефона - меняли количество пикселей в картинке программным путём...
:tea:
и т.д. и .т.п.

Добавлено after 30 minutes 42 seconds:
[uquote="TovarishAleksey",url="/forum/viewtopic.php?p=4640924#p4640924"]размер картинки увеличить на весь экран, то микроконтроллер ровно также будет напрягаться?[/uquote]
ну подумай))
сейчас у тебя микроконтроллер просто выводит картинку на экран без обработки... и то напрягается))
а с предварительной обработкой картинок будет ещё больше напрягаться))
:))
в компе этим занимаются видюхи...
это такие большие устройства... со своим процом... и кучей всего))
)).jpg
(52.73 КБ) 38 скачиваний
с трассировкой лучей...
))).jpg
(37.25 КБ) 43 скачивания
и кучей всего...
).jpg
(38.86 КБ) 42 скачивания
зачастую видюхи даже греются больше чем центральный процессор... ))
:o
вот и думай))
:tea:

Добавлено after 2 minutes 9 seconds:
вывод:
надо переходить на ассемблер))
:)))
SfS
Друг Кота
Сообщения: 19416
Зарегистрирован: Пт янв 12, 2007 11:21:39
Откуда: Томск

Re: Вопрос программистам

Сообщение SfS »

[uquote="roman.com",url="/forum/viewtopic.php?p=4640552#p4640552"]А за один такт получится только вывести... статичную картинку... например чёрный квадрат малевича))
)).jpg
:)))[/uquote]

Все так. Но у нас есть строчные и кадровые синхроимпулсы, во время которых мы можем менять буфер)
Ведь эти импульсы длинные. Процессор во время них свободен.
Adrift
Вымогатель припоя
Сообщения: 551
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Вопрос программистам

Сообщение Adrift »

[uquote="SfS",url="/forum/viewtopic.php?p=4640946#p4640946"]Все так. Но у нас есть строчные и кадровые синхроимпулсы, во время которых мы можем менять буфер)[/uquote]
Сначала нужно иметь буфер достаточно размера, а в AVR максимум может быть 1/3 от требуемых 49KB.
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

есть строчные и кадровые синхроимпулсы, во время которых мы можем менять буфер...
сколько длительность строчного импульса ?
3,77мкс
а сколько строк в кадре ? 480
3,77мкс х 480 = 0,0018096 c

а столько у нас кадровый импульс ? 1,534 мс

а столько у нас всего свободного времени ?
0,0018096 + 0,001534 = 0,0033436 c

да у нас вагон времени ! ))
:)))

Добавлено after 15 minutes 21 second:
ну если трассировкой лучей делать не будем... то задача сильно упрощается ! ))
:)))
а дальше...
если хотим получить картинку на весь экран... то надо писать в строку все 402 пикселя...
записали пиксели.jpg
(20.7 КБ) 47 скачиваний
получили картинку на весь экран...
экран_2.jpg
(41.67 КБ) 44 скачивания
но у нас картина в вда раза меньше... значит надо как-то растянуть картинку...
:tea:

Добавлено after 26 minutes 5 seconds:
сначала делаем буфер для нашей видюхи)) RGB ... это три байта))

записываем в буфер данные... (вручную... по сети... или ещё как)

Код: Выделить всё

LDI R21, 0b00000100   
LDI R22, 0b00000010   
LDI R23, 0b00000001


записываем в строку...

Код: Выделить всё

_1:
//красный
OUT PORTD, R21  // -1 такт
...
//зелёный
OUT PORTD, R22  // -1 такт
...
//синий
OUT PORTD, R23  // -1 такт
...
RJMP _1
строка.jpg
(16.8 КБ) 38 скачиваний
смотрим на экран...
экран_строка.jpg
(26.71 КБ) 40 скачиваний
получилось 201 х 480 пикселя
:roll:
а нам надо чтоб картинка была 402 x 480 пикселя
:?

тогда делаем программную обработку картинки... ! )) делаем повторы пикселей...

записываем в строку...

Код: Выделить всё

_1:
//красный
OUT PORTD, R21  // -1 такт
OUT PORTD, R21  // -1 такт // повтор
...
//зелёный
OUT PORTD, R22  // -1 такт
OUT PORTD, R22  // -1 такт // повтор
...
//синий
OUT PORTD, R23  // -1 такт
OUT PORTD, R23  // -1 такт // повтор
...
RJMP _1
строка_после обработки.jpg
(16.79 КБ) 40 скачиваний
смотрим на экран...
экран_после обработки.jpg
(23.98 КБ) 44 скачивания
получилось 402 x 480 пикселя
:))
наша сетевуха научилась обрабатывать картинки ! )) причём делает это она сама... на лету ! ))
:)))

обратите внимание... картинка растянулась в два раза... а размер буфера не изменился. ))
О ! Уже прогресс ! ))
так скоро и до трассировки лучей дойдём))
:)))
Аватара пользователя
TovarishAleksey
Потрогал лапой паяльник
Сообщения: 313
Зарегистрирован: Вс сен 22, 2024 12:16:47
Откуда: Село Лютенька

Re: Вопрос программистам

Сообщение TovarishAleksey »

Роман, теперь понял принцип. Уже заканчиваю с таймерами, оказалось всё проще простого! :chmoked:
"Умный может зарабатывать триста рублей, а проживать три тысячи"
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

да, с таймерами, оказалось всё проще простого...
сигнал VGA.jpg
(83.26 КБ) 45 скачиваний
сложности будут потом))
:tea:
SfS
Друг Кота
Сообщения: 19416
Зарегистрирован: Пт янв 12, 2007 11:21:39
Откуда: Томск

Re: Вопрос программистам

Сообщение SfS »

[uquote="Adrift",url="/forum/viewtopic.php?p=4640970#p4640970"][uquote="SfS",url="/forum/viewtopic.php?p=4640946#p4640946"]Все так. Но у нас есть строчные и кадровые синхроимпулсы, во время которых мы можем менять буфер)[/uquote]
Сначала нужно иметь буфер достаточно размера, а в AVR максимум может быть 1/3 от требуемых 49KB.[/uquote]

Если 320x200, то есть 64000 пикселей, то для монохромного изображения надо 8к. Если не каждый пиксель отдельной командой вывести
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

на картинке ошибочка)) сигнал должен быть с инверсией... иначе ничего работать не будет))
сигнал VGA.jpg
(94.56 КБ) 38 скачиваний
но вы уже и сами догадались))
Аватара пользователя
Transformer-V
Друг Кота
Сообщения: 4249
Зарегистрирован: Пн окт 03, 2016 22:50:22
Контактная информация:

Re: Вопрос программистам

Сообщение Transformer-V »

[uquote="roman.com",url="/forum/viewtopic.php?p=4640926#p4640926"]именно так и работаю видюхи в компе - меняют количество пикселей в картинке программным путём...
получим фотошоп))
:))
именно так мы делали на экране телефона - меняли количество пикселей в картинке программным путём...
:tea:

сейчас у тебя микроконтроллер просто выводит картинку на экран без обработки... и то напрягается))
а с предварительной обработкой картинок будет ещё больше напрягаться))
:))
в компе этим занимаются видюхи...
это такие большие устройства... со своим процом... и кучей всего))[/uquote]

То что вы описали это масштабирование, этим занимаются "видюхи" с портами LVDS или MIPI шиной для подключения("напрямую" к GPU) LCD матриц, где в роли скалера выступает сама видюха. В самих же мониторах масштабированием занят скалер, причем минимальное разрешение которое способен обработать скалер указано в мануале на монитор, как правило для VGA оно 640x480 пикселей, все что ниже просто не будет корректно работать или "отброситься" самим MCU монитора с сообщением - "Out of range"

И вообще VGA это прошлый век, костыль и для LCD зло. Юзая LCD мониторы лучше задействовать TMDS (DVI-D, HDMI)

В данном случае, изысканно будет заюзать ПЛИС с DRAM на борту и подключиться к TMDS (DVI-D, HDMI) совершенно любого современного моника/телика, а к плис можно будет подключить хоть "ардуино", хоть древний Z80
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

[uquote="Transformer-V",url="/forum/viewtopic.php?p=4641279#p4641279"]В самих же мониторах масштабированием занят скалер, причем минимальное разрешение которое способен обработать скалер указано в мануале на монитор, как правило для VGA оно 640x480 пикселей, все что ниже просто не будет корректно работать или "отброситься" самим MCU монитора с сообщением - "Out of range"[/uquote]
для начала мы хотим сделать разрешение 3х1 и вывести 3 пикселя на экран.
три пикселя.jpg
(23.98 КБ) 37 скачиваний
вы хотите сказать что у нас ничего не получится ?
:roll:
и что значит "не будет корректно работать" ?
расшифруйте пожалуйста...
:)
Adrift
Вымогатель припоя
Сообщения: 551
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Вопрос программистам

Сообщение Adrift »

[uquote="roman.com",url="/forum/viewtopic.php?p=4641440#p4641440"]вы хотите сказать что у нас ничего не получится ?[/uquote]
Почему не получится... Через 42 года после появления спектрума у вас может получиться видеокарта с разрешением 256x192 и двумя цветами )
roman.com
Друг Кота
Сообщения: 9157
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Вопрос программистам

Сообщение roman.com »

одни говорят не получится...
другие говорят всё получится ! ))
:roll:
второй ответ мне нравится больше))
:))

Добавлено after 29 minutes 33 seconds:
а дальше...
TCCR1A = (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11);//вывод PB1//режим WGM11=1, WGM10=0
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10);//режим WGM13=1, WGM12=1 //16.000.000 Hz/1 = 16.000.000 Hz
TCNT1H=0x00; //сброс начальное значение таймера
TCNT1L=0x00; //сброс начальное значение таймера
ICR1H=0x01; //регистр захвата - верхний предел счета 508 тактов //длительность строки VGA
ICR1L=0xFC; //регистр захвата - верхний предел счета 508 тактов //длительность строки VGA
OCR1AH=0x00; //вывод PB1//регистр ШИМ 60 тактов//длительность строчного импульса VGA
OCR1AL=0x3C; //вывод PB1//регистр ШИМ 60 тактов//длительность строчного импульса VGA
OCR1BH=0x00;//вывод PB2//не используем. он нам нужен для SPI
OCR1BL=0x00;//вывод PB1//не используем. он нам нужен для SPI
:tea:
Adrift
Вымогатель припоя
Сообщения: 551
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Вопрос программистам

Сообщение Adrift »

[uquote="roman.com",url="/forum/viewtopic.php?p=4641466#p4641466"]второй ответ мне нравится больше))[/uquote]
Ну да, фантазеров тут много ) Уже ведь все посчитали, нужно отправить 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 для таких задач не предназначен )
Ответить

Вернуться в «МЯЯЯУ!»