AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
30.06.2013, 22:48
|
|
Временная регистрация
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
VGA, AVR, SRAM... (вывод видеопамяти на экран)
Доброго времени суток.
Хочу обратиться за помощью к вам по вопросу генерации VGA сигнала. У меня есть Atmega2560/168, SRAM CY7C1019DV33(128kx8bit 3.3v). Мне необходимо сделать вывод содержимого SRAM на VGA в формате 256x208x8bb. Это получается как бы "отображалка видеопамяти", пока она должна отображать только "мусор" видеопамяти. Я знаю, что 256x208 - это не стандарт, поэтому сигналы синхронизаций использую 640x480@60Hz.
SRAM подключил напрямую к atmega (16пинов адреса, 2 управляющих), а выводы данных подключил уже к ЦАП, который уже подсоединен к vga разъему. Саму atmega запустил на 3.3V @ 16MHz.
--
Собственно, проблема. У меня есть программа, которая просто генерирует цветные полосы. Я ее модифицировал, под SRAM. Теперь, чтобы переключить горизонтальный пиксель нужно инкрементировать один порт, для переключения строки - второй порт.(тк. у SRAM 16пинов адреса).
Код:
|
#define NOP asm("nop")
#define MSNOP {NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP;}
unsigned int linecount = 1;
void setup() //Выполняется 1 раз.(начало)
{
DDRF = B11111111; //Строки (адрес)
DDRK = B11111111; //Пиксели (адрес)
pinMode(6, OUTPUT); //SYNC (не обращайте внимания)
pinMode(7, OUTPUT); //SYNC (не обращайте внимания)
PORTK = 0; PORTF = 0;
//set timer
TCCR2A = 0x02; // WGM22=0 + WGM21=1 + WGM20=0 = Mode2 (CTC)
TCCR2B |= (1 ‹‹ CS20); //
TCCR2B |= (1 ‹‹ CS21); // Set prescaler
TCCR2B &= ~(1 ‹‹ CS22); //
TCNT2 = 0; // clean counter
TIMSK2 &= ~(1‹‹OCIE2A); // set comparison interrupt
TIMSK2 |= (1‹‹TOIE2); // set overflow interrupt
}
void loop() //Бесконечный цикл
{
noInterrupts();
do{
if (TCNT2 › 0x0f){
MSNOP;
NOP; NOP; NOP; NOP;
TCNT2 = 0x00;
// #### HSYNC ###
PORTH &= ~(1 ‹‹ 4);
if (++linecount ›= 525){ //525 lines
linecount = 1;
}
PORTH |= (1 ‹‹ 4);
// ### VSYNC ###
if ((linecount == 1)||(linecount == 2)){
PORTH &= ~(1 ‹‹ 3);
} else {
PORTH |= (1 ‹‹ 3);
NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP;
NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP;
NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP;
NOP; NOP; NOP; NOP; NOP;
if ((linecount ›= 145) && (linecount ‹= 353)){ //Сами видео-данные
PORTK = 1 ;
PORTK = 2 ;
PORTK = 3 ;
PORTK = 4 ;
PORTK = 5 ;
PORTK = 6 ;
PORTK = 7 ;
PORTK = 8 ;
PORTK = 9 ;
PORTK = 10 ;
PORTK = 11 ;
PORTK = 12 ;
PORTK = 13 ;
PORTK = 14 ;
PORTK = 15 ;
PORTK = 16 ;
PORTK = 17 ;
PORTK = 18 ;
PORTK = 19 ;
PORTK = 20 ;
PORTK = 21 ;
PORTK = 22 ;
PORTK = 23 ;
PORTK = 24 ;
PORTK = 25 ;
PORTK = 26 ;
PORTK = 27 ;
PORTK = 28 ;
PORTK = 29 ;
PORTK = 30 ;
PORTK = 31 ;
PORTK = 32 ;
PORTK = 33 ;
PORTK = 34 ;
PORTK = 35 ;
PORTK = 36 ;
PORTK = 37 ;
PORTK = 38 ;
PORTK = 39 ;
PORTK = 40 ;
PORTK = 41 ;
PORTK = 42 ;
PORTK = 43 ;
PORTK = 44 ;
PORTK = 45 ;
PORTK = 46 ;
PORTK = 47 ;
PORTK = 48 ;
PORTK = 49 ;
PORTK = 50 ;
PORTK = 51 ;
PORTK = 52 ;
PORTK = 53 ;
PORTK = 54 ;
PORTK = 55 ;
PORTK = 56 ;
PORTK = 57 ;
PORTK = 58 ;
PORTK = 59 ;
PORTK = 60 ;
PORTK = 61 ;
PORTK = 62 ;
PORTK = 63 ;
PORTK = 64 ;
PORTK = 65 ;
PORTK = 66 ;
PORTK = 67 ;
PORTK = 68 ;
PORTK = 69 ;
PORTK = 70 ;
PORTK = 71 ;
PORTK = 72 ;
PORTK = 73 ;
PORTK = 74 ;
PORTK = 75 ;
PORTK = 76 ;
PORTK = 77 ;
PORTK = 78 ;
PORTK = 79 ;
PORTK = 80 ;
PORTK = 81 ;
PORTK = 82 ;
PORTK = 83 ;
PORTK = 84 ;
PORTK = 85 ;
PORTK = 86 ;
PORTK = 87 ;
PORTK = 88 ;
PORTK = 89 ;
PORTK = 90 ;
PORTK = 91 ;
PORTK = 92 ;
PORTK = 93 ;
PORTK = 94 ;
PORTK = 95 ;
PORTK = 96 ;
PORTK = 97 ;
PORTK = 98 ;
PORTK = 99 ;
PORTK = 100;
PORTK = 101;
PORTK = 102;
PORTK = 103;
PORTK = 104;
PORTK = 105;
PORTK = 106;
PORTK = 107;
PORTK = 108;
PORTK = 109;
PORTK = 110;
PORTK = 111;
PORTK = 112;
PORTK = 113;
PORTK = 114;
PORTK = 115;
PORTK = 116;
PORTK = 117;
PORTK = 118;
PORTK = 119;
PORTK = 120;
PORTK = 121;
PORTK = 122;
PORTK = 123;
PORTK = 124;
PORTK = 125;
PORTK = 126;
PORTK = 127;
PORTK = 128;
PORTK = 129;
PORTK = 130;
PORTK = 131;
PORTK = 132;
PORTK = 133;
PORTK = 134;
PORTK = 135;
PORTK = 136;
PORTK = 137;
PORTK = 138;
PORTK = 139;
PORTK = 140;
PORTK = 141;
PORTK = 142;
PORTK = 143;
PORTK = 144;
PORTK = 145;
PORTK = 146;
PORTK = 147;
PORTK = 148;
PORTK = 149;
PORTK = 150;
PORTK = 151;
PORTK = 152;
PORTK = 153;
PORTK = 154;
PORTK = 155;
PORTK = 156;
PORTK = 157;
PORTK = 158;
PORTK = 159;
PORTK = 160;
PORTK = 161;
PORTK = 162;
PORTK = 163;
PORTK = 164;
PORTK = 165;
PORTK = 166;
PORTK = 167;
PORTK = 168;
PORTK = 169;
PORTK = 170;
PORTK = 171;
PORTK = 172;
PORTK = 173;
PORTK = 174;
PORTK = 175;
PORTK = 176;
PORTK = 177;
PORTK = 178;
PORTK = 179;
PORTK = 180;
PORTK = 181;
PORTK = 182;
PORTK = 183;
PORTK = 184;
PORTK = 185;
PORTK = 186;
PORTK = 187;
PORTK = 188;
PORTK = 189;
PORTK = 190;
PORTK = 191;
PORTK = 192;
PORTK = 193;
PORTK = 194;
PORTK = 195;
PORTK = 196;
PORTK = 197;
PORTK = 198;
PORTK = 199;
PORTK = 200;
PORTK = 201;
PORTK = 202;
PORTK = 203;
PORTK = 204;
PORTK = 205;
PORTK = 206;
PORTK = 207;
PORTK = 208;
PORTK = 209;
PORTK = 210;
PORTK = 211;
PORTK = 212;
PORTK = 213;
PORTK = 214;
PORTK = 215;
PORTK = 216;
PORTK = 217;
PORTK = 218;
PORTK = 219;
PORTK = 220;
PORTK = 221;
PORTK = 222;
PORTK = 223;
PORTK = 224;
PORTK = 225;
PORTK = 226;
PORTK = 227;
PORTK = 228;
PORTK = 229;
PORTK = 230;
PORTK = 231;
PORTK = 232;
PORTK = 233;
PORTK = 234;
PORTK = 235;
PORTK = 236;
PORTK = 237;
PORTK = 238;
PORTK = 239;
PORTK = 240;
PORTK = 241;
PORTK = 242;
PORTK = 243;
PORTK = 244;
PORTK = 245;
PORTK = 246;
PORTK = 247;
PORTK = 248;
PORTK = 249;
PORTK = 250;
PORTK = 251;
PORTK = 252;
PORTK = 253;
PORTK = 254;
PORTK = 255;
PORTK = 0;
PORTF = (PORTF›208)? PORTF+1 : 0; //Переходим на другую строку
}
}
}
}while(1);
}
//Адаптация к C++
int main(void) {
setup();
while(1) {
loop();
}
} |
У меня у таймингов VGA имеется лимит на горизонтальную развертку: ~29.75us. А по моим подсчетам, 256пикселей = 256раз out port = 32us. Что немного не вписывается в лимит. Монитор отвергает такой сигнал.
Что делать в таком случае?
Может кто-то делал подобное?
Вот уже месяц мучаюсь с этой проблемой.
PS: Надеюсь все изложил.
PSPS: Извините, что так много текста.
Последний раз редактировалось JerryI; 30.06.2013 в 22:51.
Причина: Программа
|
|
|
|
30.06.2013, 22:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,985
Сказал спасибо: 0
Сказали Спасибо 4,943 раз(а) в 2,371 сообщении(ях)
|
Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)
JerryI,
а если запустить atхmega на 3.3V @ 32MHz?
|
|
|
|
30.06.2013, 22:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)
Не мучайтесь, поставьте кварц по-шустрее. 10% оверклокинга не смертельно. Но по-уму сделайте простейший видеоконтроллер на жесткой логике/CPLD иначе кроме видеовывода ничего сделать не успеете.
__________________
misterdi<@>i.ua
|
|
|
|
30.06.2013, 23:07
|
|
Временная регистрация
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)
Сообщение от jump
|
JerryI,
а если запустить atхmega на 3.3V @ 32MHz?
|
...У меня нет Xmega, если вы об этом.
Сообщение от MisterDi
|
Не мучайтесь, поставьте кварц по-шустрее. 10% оверклокинга не смертельно. Но по-уму сделайте простейший видеоконтроллер на жесткой логике/CPLD иначе кроме видеовывода ничего сделать не успеете.
|
Кварц нашел и поставил на 26.6MHz, но на 3.3v ни одна из atmega не запустилась . Хотя на 5v все стабильно работает.
На жесткой логике - было бы неплохо. Но у меня ее нет, к сожалению. (зато навалом к155ла3 и прочих). В принципе, у этого контроллера задача - простая: вывести изображение. Он будет наподобие видео-адаптера, остальные вычисления будет проводить другой контроллер и отправлять данные в видео-память.
|
|
|
|
30.06.2013, 23:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)
Цитата:
|
Он будет наподобие видео-адаптера, остальные вычисления будет проводить другой контроллер и отправлять данные в видео-память.
|
Как раз в качестве видеоадаптера использование крайне не эффективно. 90% времени будет занимать пересылка данных из памяти в порт. Реально что-то можно будет делать только во время обратного хода луча.
Цитата:
|
На жесткой логике - было бы неплохо. Но у меня ее нет, к сожалению. (зато навалом к155ла3 и прочих)
|
Жесткая логика это и есть Ваши К155.. Для простейшего видеоконтроллера нужны 4-5 шт 555ИЕ7, 3шт 555КП11 2-3шт 555ИР22/ИР23 плюс 3-4 корпуса простой логики. За основу возьмите схему видеоконтроллера от того-же "Орион-128".
В идеале эта задача как раз для ЕРМ240
__________________
misterdi<@>i.ua
Последний раз редактировалось MisterDi; 30.06.2013 в 23:39.
|
|
|
Сказали "Спасибо" MisterDi
|
|
|
01.07.2013, 00:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)
Сообщение от MisterDi
|
За основу возьмите схему видеоконтроллера от того-же "Орион-128".
|
Ну да, от любого спектрума, только не родного - там всё в ULA запрятано. Причём там ЦП работал с частотой менее 500кГц (3.5MHz/8-9)во время обратного хода луча (на прямом всё блокировалось и работал вывод на экран) и ничего - успевало...
Причём на SRAM всё ещё проще - не нужно цикл обновления городить.
Последний раз редактировалось omercury; 01.07.2013 в 01:01.
|
|
|
|
01.07.2013, 08:38
|
|
Частый гость
Регистрация: 25.11.2007
Сообщений: 33
Сказал спасибо: 12
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)
+1 за жесткую логику для этих целей, а для заполнения памяти я бы рекомендовал вместо обычной применить Dual-Port SRAMs. Один порт на контроллер на жесткой логике/выход, второй для обновления/записи данных в память.
http://www.cypress.com/?id=82&source=header.
|
|
|
|
01.07.2013, 09:08
|
|
Временная регистрация
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)
Сообщение от MisterDi
|
Для простейшего видеоконтроллера нужны 4-5 шт 555ИЕ7, 3шт 555КП11 2-3шт 555ИР22/ИР23 плюс 3-4 корпуса простой логики. За основу возьмите схему видеоконтроллера от того-же "Орион-128".
В идеале эта задача как раз для ЕРМ240
|
А какой видео-сигнал формировать проще? У Ориона - SCART, по моему. Мне в принципе без разницы какой формировать, главное, чтобы разрешение было не ниже 256x208, ну и 256цветов...
Сообщение от AndruXXXaUA
|
+1 за жесткую логику для этих целей, а для заполнения памяти я бы рекомендовал вместо обычной применить Dual-Port SRAMs. Один порт на контроллер на жесткой логике/выход, второй для обновления/записи данных в память.
|
Я пока на обычной Single-Port сделаю. Если все получится, то куплю dual-port. Радует, что у Cypress есть асинхронные sram.
Последний раз редактировалось JerryI; 01.07.2013 в 09:10.
|
|
|
|
01.07.2013, 09:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,985
Сказал спасибо: 0
Сказали Спасибо 4,943 раз(а) в 2,371 сообщении(ях)
|
Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)
JerryI,
не знаю, что вы там придумываете, но обратите тогда внимание на eZ80 ф.Zilog - совместимость с Z80 на 50МГц + периферия + масса ПО, а на ПЛИС сваяете контроллер дисплея.
|
|
|
|
01.07.2013, 09:49
|
|
Временная регистрация
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)
Сообщение от jump
|
JerryI,
не знаю, что вы там придумываете, но обратите тогда внимание на eZ80 ф.Zilog - совместимость с Z80 на 50МГц + периферия + масса ПО, а на ПЛИС сваяете контроллер дисплея.
|
Да. У него мощь, конечно... На нем хоть компьютер строй.
Если уж на то пошло, можно задействовать Yamaha V9938. Однокристальный видео-контроллер.
PS: Пока с логикой буду разбираться.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Вывод информации на VGA
|
nml |
Микроконтроллеры, АЦП, память и т.д |
13 |
09.03.2013 00:35 |
avr вывод звука
|
whoim |
AVR |
5 |
04.02.2013 16:59 |
Вывод текста на экран жк
|
Uragan90 |
Микроконтроллеры, АЦП, память и т.д |
52 |
21.03.2012 04:29 |
Литература по микроконтроллерам (AVR, PIC, ПЛИС и т.д.). Сборка книг - (256 книг+ 27 CD c примерами из книг) [обновление 2011, PDF, DJVU]
|
yurinform |
Микроконтроллеры, АЦП, память и т.д |
5 |
05.07.2011 19:00 |
AVR,PIC вывод на VGA , TV,LCD
|
zloy2005 |
Микроконтроллеры, АЦП, память и т.д |
83 |
07.01.2010 19:36 |
Часовой пояс GMT +4, время: 02:57.
|
|