как сделать точные задержки на ардуино си++, потому что много всякой дряни добавляется, и появляются неточности.
В ардуине всякие millis() юзают прерывания, т.е. можно настроить таймер по которому начинается отрисовка каждой строки, но нужно быть уверенным, что в этот момент не будут вызываться левые обработчики. И даже без них в зависимости от выполняемой инструкции в обработчик можно попасть с задержкой в несколько тактов, а 2 такта - это уже сдвиг на целый пиксель.
зачем стандартному режиму VGA 525 строк, если используются только 480?
уже подсказали))
TovarishAleksey писал(а):
Что значит передний, задний фронты синхронизации?
тут надо разобрать подробнее...
TovarishAleksey писал(а):
Роман, сети не будет!).
будет!)
TovarishAleksey писал(а):
Всё как в древности.
именно так мы и делаем... потом поймёшь))
TovarishAleksey писал(а):
Адрифт, так у меня и происходит, скорее всего, потому-что разрешение и частота получаются несколько больше от стандарта.
никто не знает что у тебя получается... по твоей картинки ничего не ясно)) настройка теликов и мониторов делается последовательно... строго по инструкции... и тогда никаких вопрос не возникает)) но ты не действуешь по инструкциям...))
как сделать точные задержки на ардуино си++, потому что много всякой дряни добавляется, и появляются неточности.
В ардуине всякие millis() юзают прерывания, т.е. можно настроить таймер по которому начинается отрисовка каждой строки, но нужно быть уверенным, что в этот момент не будут вызываться левые обработчики. И даже без них в зависимости от выполняемой инструкции в обработчик можно попасть с задержкой в несколько тактов, а 2 такта - это уже сдвиг на целый пиксель.
уже бы давно все на таймерах сделали... вы запаритесь высчитывать машинные такты... с NOP))
Технические характеристики: Разрешение экрана: 256 х 192 точки; Матрица знакомест экрана: 32 х 24; Количество цветов на знакоместо: 2; Число цветов экранной области: 8; Число цветов бордюра: 8; Число градаций яркости для каждого цвета: 2; Эквивалентная частота ЦП: 2,333 МГц; Порты ввода/вывода: 0xFE, 0x7FFD, 0xFFFD, 0xBFFD; Клавиатурный интерфейс: PS/2; Число задействованных клавиш: 82; Число каналов звукового сопровождения: 4; Перечень каналов звукового сопровождения: левый AY8910, правый AY8910, средний AY8910, бипер; Видеовыходы: ЧБ выход, RGB выход, отдельный выход синхронизации; Поддержка загрузки/выгрузки «на ленту»: имеется; Дополнительные устройства ввода/вывода: micro-SD карта; Поддерживаемые модели ZXSpectrum: Pentagon 128 K, ZXSpectrum 128 K, ZXSpectrum48 K, ZXSpectrum+2, ZXSpectrum+3, ZXSpectrum48 K` 2006; OPEN SE BASIC 128 K, OPENSEBASIC 48 K; Дополнительная операционная система: SDDOS; Файловая система: FAT32; Поддержка TR-DOS; модуль Turbo-Sound с интерфейсом Kempston-джойстика; Разъём шины ввода/вывода: имеется; Конструкция: двухсторонняя печатная плата 140 х 22 мм, установка внутри клавиатуры или в отдельный корпус; Питание устройства: соединитель mini-USB«F», напряжение +5 В.
Тю ! )) -Интернета нет... )) -Клавиатурный интерфейс: PS/2... А мы хотим USB !!! )) ... -Файловая система: FAT32... А мы хотим NTFS !!! )) ... -Дополнительные устройства ввода/вывода: micro-SD карта... был бы Интернет.. не нужны никакие SD... )) ... -Питание устройства: соединитель mini-USB«F», напряжение +5 В... А мы хотим PoE !!! )) ...
Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Вс сен 22, 2024 12:16:47 Сообщений: 313 Откуда: Село Лютенька
Рейтинг сообщения:0
Букав много, так как непонимания много. А по какой инструкции мне действовать, если я ещё с этими таймерами не разобрался? Нопы нужны, так как и делаются один раз за 1/16МГц = 62,5нс. С готовыми таймерами хрен это посчитаешь всё, там ещё всякие штуки добавляются, в итоге точность где-то 4мс.
Цитата:
тут надо разобрать подробнее...
Как я понял: передний фронт - сигнал, что перед синхроимпульсом, задний - сигнал, что после этого же синхроимпульса. Картинка вообще значения не имеет. Когда к монитору подключается сигнал, видны характеристики этого сигнала, там я всю информацию и черпаю. Да, хочу сделать пару USB портов: один на клаву, другой на всякие устройства, типа джойстики. В качестве файловой системы, FAT предпочтительней, с NTFS я уже наигрался в винде.. Был бы интернет, всё равно SD-карта понадобилась бы, куда софт складывать?)0)
_________________ "Умный может зарабатывать триста рублей, а проживать три тысячи"
оно и понятно... так оба они АНАЛОГОВЫЕ )) поэтому... кто собирал/ремонтировал телики... тот без труда поймет что там нарисовано и зачем)) подробнее...
TovarishAleksey писал(а):
Что значит передний, задний фронты синхронизации? Что за импульс гашения, бордюр??
"... в старо-древние времена... когда мониторы были большие... использовали аналоговый видео сигнал..." )) в этих старых мониторах картинку рисовал электронный луч...
а чтобы картинка не "убегала"... использовали синхронизацию... кадровую и строчную... -есть кадровые импульсы синхронизации... -есть строчные импульсы синхронизации...
без синхронизации картинка будет дрожать... и убегать...))
в кадровых и строчных импульсах есть передний, задний фронты... и импульсы гашения... )) все эти импульсы можно посмотреть на экране... старого монитора или телика... если предварительно отключить синхронизацию в блоке синхронизации старого монитора или телика...
хотя... они видны и просто при слабом сигнале... вот кадровые импульсы... бегут сверхву вниз (или снизу вверх) по экрану...
Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Вс сен 22, 2024 12:16:47 Сообщений: 313 Откуда: Село Лютенька
Рейтинг сообщения:0
Ну это понятно. Я зимой разобрал телевизор, так там кинескоп, нет, даже кинескопище! Выкинул его на свалку, а платы и сейчас использую. Куча добра: и выпрямители, и диоды, и стабилитроны, и транзисторы, и резисторы, и конденсаторы. В общем, целый склад.
_________________ "Умный может зарабатывать триста рублей, а проживать три тысячи"
-первая радуина отвечает за синхронизацию HSYNC. -вторая ардуина отвечает за вывод данных в порт для каждой строки через одинаковые промежутки после HSYNC.
вывод в пот Ethernet ничем не отличается от вывода в порт VGA. -и там и там есть буфер -и там и там есть синхронизация и т.д.
для кого я это всё пишу тут... соображалка тут ни у кого не работает))
хочу сделать пару USB портов: один на клаву, другой на всякие устройства, типа джойстики. В качестве файловой системы, FAT предпочтительней, с NTFS я уже наигрался в винде.. Был бы интернет, всё равно SD-карта понадобилась бы, куда софт складывать?)0)
USB... придётся повозится... там сигнал сложнее... чем в интернете ))
потом надоело... и забросили)) потом взяли и подключили флешку напрямую прямо к ардуине ! и как начали писать на флешку... по секторам... по 512 байт... без всяких файловых систем)) и всё у нас прекрасно работало... и без ваших систем))
Добавлено after 24 minutes 20 seconds: далее... берём наш самодельный "компутер" и подключаем к заводскому компу... с помощью нашей самодельной сетевой карты)) -при включении питания наш самодельный "компутер" отправляет запрос к заводскому компу... -на заводском компе запущено серверное приложение Java... которое читает с жёсткого диска ОС от отправляет обратно нашему самодельному "компу" )) -так осуществляется загрузка нашей ОС... с BIOS... со всеми пользовательскими настройками... и т.д.
не... без сети никак низя)) без сети это уже будет не "компутер"... а фигня какая-то ))
Добавлено after 1 hour 20 minutes 39 seconds: далее... видео карта... прикинем как сделать на таймере... берём ардуину... какая у тебя там... не знаю)) поэтому берём популярную мега328... будем делать на таймере_1... поэтому выбираем свободный вывод например PB1...
Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Вс сен 22, 2024 12:16:47 Сообщений: 313 Откуда: Село Лютенька
Рейтинг сообщения:0
Роман, спасибо вам за объяснение! С таймерами как раз разобрался, понял что и как работает, понял что ошибался на счёт ардуины. Осталось только научиться с ними работать в самой IDE, научиться их программировать правильно. На счёт фронтов: если бы они были только во старых древних телевизорах, мне не пришлось бы несколько дней сидеть и думать, так что давайте не будем разделять на старое и новое, интерфейс то всё тот же.. Мой бюджет - три картошки и свекла, на сервер денег нет, посему, будем использовать карточку, без всяких там паутин!
Цитата:
без сети это уже будет не "компутер"... а фигня какая-то ))
Нуу, моя цель это как раз такая простая фигня, в которой всё надо писать самому, и никаких тыгынетов.. Уже 13 страница букав, а результата всё нет и нет, надо исправлять!
_________________ "Умный может зарабатывать триста рублей, а проживать три тысячи"
Уже 13 страница букав, а результата всё нет и нет, надо исправлять!
Это не важно)) главное что каждая буковка несёт полезную информацию... а не просто пустой звук))
TovarishAleksey писал(а):
Мой бюджет - три картошки и свекла, на сервер денег нет, посему, будем использовать карточку, без всяких там паутин!
сервер... это любое устройство в доме на котором запущена программа "сервер". к качестве устройства для сервера может быть что угодно)) -компутер -телефон -планшет -ноутбук -и даже просто картонная коробка ! в корой спрятана ардуина... это тоже сервер ! ))
Осталось только научиться с ними работать в самой IDE, научиться их программировать правильно.
работать в самой IDE с разными блоками ардуины... не сложно)) в самой IDE можно просто писать регистры из даташита нужного блока... мы много раз так делали... только есть одна проблема... в самой IDE блоки МК уже могут быть задействованы... тут печалька))
а сам код настройки таймера это 10 строк... которые копируются прямо в саму IDE...
осталось только записать значения в регистры... согласно таймингам...
ну хорошо... сделаем мы синхронизацию... а дальше что ?
-выводить можно в прерывании таймера. рекомендуется если писать на всяких си и с++ т.е. там где трудно контролировать тайминги. частота прерываний тоже стабильна... зависит от частоты кварца и больше ни от чего)) если нет других прерываний...
-выводить можно в основной программе после опроса флага таймера таймера. не рекомендуется если писать на всяких си и с++
и самое главное... а нафига нам вообще таймер ? а не лучше ли сразу писать на ассемблере... в ассемблере все тайминги легко контролировать... время выполнения всех инструкций в ассемблере так же зависят только от частоты кварца и больше ни от чего)) поэтому в ассемблере ничего не дрожит))
а что мы вообще выводить будем ? )) и зачем нам вообще видюха ?
не... ну что должна делать сетевуха... я представляю четко.. поэтому сел и сразу написал код)) а вот что должна делать видюха... я представляю смутно)) и как можно писать код не зная для чего ? ))
Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Вс сен 22, 2024 12:16:47 Сообщений: 313 Откуда: Село Лютенька
Рейтинг сообщения:0
Ассемблер вполне можно, только разве для этого не требуется програматор? Пробовал атмел студио, ну нифига не понятно, куча кнопочек.. Можно и в си++ писать, типа вот так: asm(nop). Выводить буду картинки 256x192пкс, которые будет рисовать мой "программируемый компьютер". То есть сейчас я изобретаю видеокарту.. Цель: что-то вроде ZX-Spectrum, и в игры поиграть, и датчики использовать. Игры, конечно же, буду писать я, именно для этого я его и делаю. После того, как закончу "видеокарту", продолжу писать свой ЯП, только уже для этого компьютера.
Добавлено after 2 minutes 19 seconds: Ну, видеокарта же рисует, вот. Не понимаю, что не понятно..
_________________ "Умный может зарабатывать триста рублей, а проживать три тысячи"
не понятно потому что нет общей схемы... что куда и зачем)) в заводском компе есть... -или процессор со встроенной графикой -или отдельная видюха
отдельная видюха это отдельный комп)) со своим процом... памятью.. вводом...выводом... и т.д. а собственно зачем она там ? если подумать... ))
значит и в ардуине должен быть кроме синхронизации... ещё как минимум ввод... вывод... она же должна куда то подключаться... по шине PCI или как... )) схемы нет...
Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Вс сен 22, 2024 12:16:47 Сообщений: 313 Откуда: Село Лютенька
Рейтинг сообщения:0
Роман, похоже у меня не та версия программы, а какая у вас? Ой ой, PCI я делать точно не буду. "Видеокарту" буду подключать к такой же ардуине, которая будет отвечать за логику, посему можно их подключить по UART, можно по I2C.
Добавлено after 25 minutes 1 second: обнаружил, что нет моей atmega328P, значит не судьба.. Придётся использовать Arduino IDE.
_________________ "Умный может зарабатывать триста рублей, а проживать три тысячи"
Выводить буду картинки 256x192пкс, которые будет рисовать мой "программируемый компьютер". То есть сейчас я изобретаю видеокарту.. Цель: что-то вроде ZX-Spectrum, и в игры поиграть, и датчики использовать. Игры, конечно же, буду писать я, именно для этого я его и делаю. После того, как закончу "видеокарту", продолжу писать свой ЯП, только уже для этого компьютера.
Какой самый быстрый способ вывести строку в порт из RAM? Дублировать пару инструкций 256 раз:
Код:
LD R16,X+ OUT PORTA,R16 LD R16,X+ OUT PORTA,R16
Пара выполняется за 3 такта но, как я говорил, для AVR разогнанного до 25 MHz нужно делать это за 2 такта. Причем ради скорости мы просто байт берем, без дополнительных преобразований, потому нужно 256*192 = 49152 байта только для видеопамяти. И пока идет отрисовка строки нельзя ничего делать, иначе будет дырка в середине экрана. В общем делать подобную видеокарту на AVR изначально бесперспективно, лучше сразу на ARM ориентироваться, там все будет в одном корпусе, включая пару USB.
-выводить можно в прерывании таймера. рекомендуется если писать на всяких си и с++ т.е. там где трудно контролировать тайминги. частота прерываний тоже стабильна... зависит от частоты кварца и больше ни от чего)) если нет других прерываний...
-выводить можно в основной программе после опроса флага таймера таймера. не рекомендуется если писать на всяких си и с++
и самое главное... а нафига нам вообще таймер ? а не лучше ли сразу писать на ассемблере... в ассемблере все тайминги легко контролировать... время выполнения всех инструкций в ассемблере так же зависят только от частоты кварца и больше ни от чего)) поэтому в ассемблере ничего не дрожит))
Еще как дрожит, хотя есть способ как это побороть. Допустим написали мы на ассме цикл ожидания флага таймера из двух инструкций выполняемых за 3 такта, в результате выйдем из него с возможным опозданием на 1-2 такта и картинка на экране уедет на пиксель. То же с прерываниями, если в момент его вызова выполнялась 2-х и более тактовая инструкция, то в прерывание попадем с опозданием в 1-3 такта. Похоже вы опытный товарищ, подскажите ТС что в таком случае ему нужно делать? )
Если ESP, то надо сразу ESP32S3 брать, там аппаратно все поддерживается. Лично я не фанат ESP, особенно которые на Xtensa, но если сравнивать готовые платки, то будет дешевле, чем STM32H7.
Сейчас этот форум просматривают: АлександрЛ и гости: 153
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения