|
Помогите с алгоритмом для attiny, вывод символов на экран |
|
|
|
Feb 4 2008, 13:14
|
Частый гость
 
Группа: Новичок
Сообщений: 90
Регистрация: 19-12-07
Пользователь №: 33 459

|
Необходимо сделать устройство на МК tiny2313, которое будет накладывать данные (цифры и простую графику), получаемые из другого более мощного МК, на композитный видео-сигнал. Начало реализации я себе представляю - LM1881 ловит строчные и кадровые импульсы, а attiny в нужный момент выдает логическую единичку в видео-линию. Связать tiny с другим МК с целью приема данных по USART тоже не проблема. А вот как реализовать программную часть на Си так, чтобы все было быстро и компактно - не представляю, туго у меня пока с программированием Если сначала описать все возможные символы двухмерными битовыми массивами, а потом в нужные моменты выбирать нужный слой нужного символа (так я делал в другом проекте на atmega16) - выбор из массива занимает много процессорного времени, да и такой массив (даже на 20 символов) на attiny не влезает Может быть можно как-то принимать от другого МК уже готовые битовые "маски" символов, но тогда как их хранить до момента вывода, ведь памяти на attiny для этого тоже не хватит. Передавать по USART прямо к моменту вывода на экран невозможно - скорости не те. Подскажите решение для моего случая, пожалуйста. Если это вообще возможно на tiny2313... P.S. Нужно накладывать на изображение символы размером 6х8 пикселов в количестве около 20 штук и простую графику размером 30х30 пикселов
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 26)
|
Feb 4 2008, 14:48
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(idono @ Feb 4 2008, 13:14)  Если сначала описать все возможные символы двухмерными битовыми массивами, а потом в нужные моменты выбирать нужный слой нужного символа (так я делал в другом проекте на atmega16) - выбор из массива занимает много процессорного времени, да и такой массив (даже на 20 символов) на attiny не влезает  Нужно накладывать на изображение символы размером 6х8 пикселов в количестве около 20 штук и простую графику размером 30х30 пикселов 1) Прежде всего надо прикинуть, какая нужна скорость выдачи пикселей. Прямой ход строки порядка 64 мкс, пусть на строку укладывается 640 пикселей, значит, на один пиксель приходится 0.1 мкс или 2 машцикла. 2) Теперь надо решить вопрос о программной или аппаратной реализации. Программно можно выдать один пиксель за два такта (с разрывом в один такт между символами текста), графику без разрыва - сомнительно. 3) Остаётся делать аппаратно, используя USI с максимальной скоростью Fck/2, что как раз соответствует вашей скорости 10Мпиксель/с. Написать программу на си, даже для аппаратного интерфейса, будет проблематично. 4) Для хранения пикселей одной тв-строки вам надо 20 байт. Для 8 тв-строк вам понадобится 160 байт, в тайни их всего 128. Для решения проблемы можно использовать 120 байт озу для 6 тв-строк, остальные 40 байт подкачивать из главного МК по мере освобождения озу. 5) Никаких двумерных массивов, всё должно быть строго линейно.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Guest_=VRA=_*
|
Feb 4 2008, 15:41
|
Guests

|
|
|
|
|
Guest_=VRA=_*
|
Feb 4 2008, 16:07
|
Guests

|
А можно узнать - ЧТО именно не по теме? У меня две аналогичные разработки (одна - с LM1881, другая без) отлично работают в десятках изделий по всему миру - так ЧТО не так-то?
|
|
|
|
|
Feb 4 2008, 16:09
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(idono @ Feb 4 2008, 15:32)  Спасибо =GM= Прикинул, что действительно для полноценной реализации устройства понадобится более сильный МК. Буду закупать мегу164 Ну, дам вам ещё один совет, подумайте. Можно поставить две тайни, которые работают параллельно-последовательно на один провод. Сначала одна тайни выдает пиксель, потом вторая. Памяти обоих хватит за глаза. Немного непривычно писать параллельную задачу, но проблем никаких не вижу, поскольку задача достаточно простая. Ну или так, одна тайни выдаёт 4 тв-строки и засыпает, потом вторая выдаёт 4 тв-строки и засыпает. Преимущество тут - программа практически будет одна и та же для обоих тайни. Вообще-то, можно было бы и на одной тайни написать, но надо сильно извиваться. Этим стоит заниматься, если только хочется ощутить свои собственные возможности в программировании, ну или если идёт большая серия, тогда может и стоит.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Feb 4 2008, 21:44
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(=GM= @ Feb 4 2008, 21:59)  Подумал немного, на тайни можно и графику 30х30 выдавать программно без разрывов. Наверное можно, Господа разработчики, а не порешать ли нам эту задачку совместно ? Сразу скажу что у меня такая задачка не стоит и мой интерес чисто абстрактный... Предлагаю открыть такой проект по выводу(подмешиванию) картинки на телик. Только он должен быть полностью открытым.... Те высказывания в стиле "а я могу круче..." без демонстрации кода просто удаляются. Готов в этом поучаствовать насколька хватит знаниев
|
|
|
|
|
Feb 4 2008, 22:32
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(singlskv @ Feb 4 2008, 21:44)  Господа разработчики, а не порешать ли нам эту задачку совместно? Сразу скажу что у меня такая задачка не стоит и мой интерес чисто абстрактный...Предлагаю открыть такой проект по выводу(подмешиванию) картинки на телик. Только он должен быть полностью открытым....Те высказывания в стиле "а я могу круче..." без демонстрации кода просто удаляются. Готов в этом поучаствовать насколька хватит знаниев  Фрагмент выдачи 20 символов в тв-строку через пин pd0. Как я и говорил, будет зазор в один такт между символами Код ld r16,z+ out portd,r16 ror r16 out portd,r16 ror r16 out portd,r16 ror r16 out portd,r16 ror r16 out portd,r16 ror r16 out portd,r16 Повторить фрагмент ещё 19 раз Скорость выдачи 10Мбит/с
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Feb 4 2008, 23:33
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(=GM= @ Feb 5 2008, 01:32)  Фрагмент выдачи 20 символов в тв-строку через пин pd0. Как я и говорил, будет зазор в один такт между символами Код ld r16,z+ out portd,r16 ror r16 out portd,r16 ror r16 out portd,r16 ror r16 out portd,r16 ror r16 out portd,r16 ror r16 out portd,r16 Повторить фрагмент ещё 19 раз Скорость выдачи 10Мбит/с Все конечно хорошо, но в общем очевидно... Зачем выводить со скорость 10мбит/сек если нужно раз в пять медленнее на 20 символов ? Вопрос в том как грамотно организовать получение/вывод данных для того что бы и картинка была красивой и данные можно было обновлять быстро.
|
|
|
|
|
Feb 5 2008, 11:12
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата через CPLD. Не спортивно  . Если бы там, ну скажем, один логический элемент снаружи, тогда еще ничего. Програмно и я могу. Там говорилось про 30*30 графику? Так что без проблем положил 30 регистров и 30 раз out сделал - получил 20МБит. Аппаратно могу предложить так - берем через SPI выводим все четные биты, другим способом - все нечетные. Снаружи - делаем xor между ними (хотите - одним логическим элементом, хотите - на двух транзисторах, хотите коммутатор ставьте, на входА подаем обе битовые последовательности, на управление - CLK от SPI). Конечно, данные надо подготовить заранее, и хитро. Цитата(idono @ Feb 4 2008, 15:14)  Необходимо сделать устройство на МК tiny2313, которое будет накладывать данные (цифры и простую графику), получаемые из другого более мощного МК, на композитный видео-сигнал. Зря Вы, кстати, проигнорировали мое предложениеИли Вас что-то пугает в такой реализации?
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 5 2008, 11:18
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Rst7 @ Feb 5 2008, 10:54)  Програмно и я могу. Там говорилось про 30*30 графику? Так что без проблем положил 30 регистров и 30 раз out сделал - получил 20МБит/с Наш человек, не то что некоторые тиоретеги, не побоюсь этого слова, которым всё очевидно(:-). Теперь сделайте текст без разрывов на 10 Мбит/с. Цитата(Rst7 @ Feb 5 2008, 10:54)  Аппаратно могу предложить так - берем через SPI выводим все четные биты, другим способом - все нечетные. Снаружи - делаем xor между ними (хотите - одним логическим элементом, хотите - на двух транзисторах, хотите коммутатор ставьте, на входА подаем обе битовые последовательности, на управление - CLK от SPI). Конечно, данные надо подготовить заранее, и хитро Не получится, по-моему. Первый байт через SPI вы выведете, затем надо перегружать регистр, а времени на перегрузку - нет.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Feb 5 2008, 12:36
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Не получится, по-моему. Первый байт через SPI вы выведете, затем надо перегружать регистр, а времени на перегрузку - нет. Ну смотрите, если брать Mega48/88/168, то у нас есть USART, который мы переключаем в режим SPI и обычный SPI, у которого правда есть вопрос в пропуске одного такта. Давайте посмотрим, есть ли способ быстро шевельнуть лапкой MOSI обычного SPI, в паузе между передачами байт. Если есть - то все пучком. Правда, это получится один поток по 8 бит, другой по 9, ну если уж совсем прижмет, то так можно извращаться  В Tiny2313 видимо вывод таким способом никак не получится, нет подходящей периферии. Правда, есть еще таймеры, которые могут шевельнуть ножкой в нужный момент. Так что если будем продолжать писькомеряться, то можно и продолжить исследования. Но я предлагаю померяться в другом. Не в выводе, а в самом быстродействующем вводе последовательных данных, эту тему еще не копали
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 5 2008, 13:10
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Rst7 @ Feb 5 2008, 12:36)  В Tiny2313 видимо вывод таким способом никак не получится, нет подходящей периферии. Правда, есть еще таймеры, которые могут шевельнуть ножкой в нужный момент Ну тему вроде замутили для тайни...А так можно взять атмеловский МК с тактовой 48 МГц и с криком ура...назад(:-) Цитата(Rst7 @ Feb 5 2008, 12:36)  Но я предлагаю померяться в другом. Не в выводе, а в самом быстродействующем вводе последовательных данных, эту тему еще не копали SPI-слейв работает на максимум Fclk/4=5МГц, т.е. четыре МЦ на бит, или 32 МЦ на байт, вполне можно принять и разместить, скажем, в кольцевом буфере. Следующая скорость - Fclk/2=10МГц, два МЦ на бит. Если оба МК работают от одного и того же тактового генератора, то думаю, принять можно, хотя сам не пробовал. Если они работают от разных генераторов/кварцев, то имею тень сомнения. Вся проблема состоит в пресловутых пин-синхронизаторах. Последняя скорость - Fclk=20МГц, один МЦ на бит. Можно принять два байта, да и то надо сильно думать, как засинхронизировать начало передачи. Можно принять 4 байта на 40 МГц, но это extraordinary.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Feb 5 2008, 14:22
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Rst7 @ Feb 5 2008, 13:42)  Для затравки предлагаю принять пакет с эзернета 10Мбит. Правда совсем без аппаратной части не получится, но так, чтобы в $1.2 вложиться - легко Какой длины пакет, какая структура, сколько данных? Там манчестер вроде рулит? Я тут пока ни уха, ни рыла(:-). Что я обдумываю неспешно - приём с юэсби на 12 МГц, всё вроде ничего, но всю голову сломал, как засинхронизироваться с началом пакета.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Feb 5 2008, 20:05
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Какой длины пакет, какая структура, сколько данных? Ну давайте ограничимся длинной 256 байт, структура - стандартная, классический эзернет, преамбула, старт, сами данные, crc. Просто 2 буфера по 256 байт - уже половина озу меги88/168, а надо еще и TCP/IP стек там держать... И это, если будем меряться, давайте тему организуем отдельную, пока нас за злостный оффтопик не постреляли модераторы
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 11 2008, 11:23
|
Частый гость
 
Группа: Новичок
Сообщений: 90
Регистрация: 19-12-07
Пользователь №: 33 459

|
Цитата(singlskv @ Feb 5 2008, 00:44)  Наверное можно, Господа разработчики, а не порешать ли нам эту задачку совместно ? Сразу скажу что у меня такая задачка не стоит и мой интерес чисто абстрактный... Предлагаю открыть такой проект по выводу(подмешиванию) картинки на телик. Только он должен быть полностью открытым.... Те высказывания в стиле "а я могу круче..." без демонстрации кода просто удаляются. Готов в этом поучаствовать насколька хватит знаниев  Согласен. Я в этом разделе уже три темы про это открывал и то все до конца не понял  Цитата Зря Вы, кстати, проигнорировали мое предложение Или Вас что-то пугает в такой реализации? Я с удовольствием бы реализовал обработку данных уже на земле (тем более что с помехами на борт. аппаратуру так и не разобрался), но не представляю как это сделать программно (на Си)  У меня еще свободный аудио-канал есть в AV-передатчике, но с реализацией передачи по нему тоже пока туго
Сообщение отредактировал idono - Feb 11 2008, 11:28
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|