Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 30.06.2013, 22:48  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
Вопрос 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. Причина: Программа
JerryI вне форума  
Непрочитано 30.06.2013, 22:58  
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,982
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)

JerryI,
а если запустить atхmega на 3.3V @ 32MHz?
jump вне форума  
Непрочитано 30.06.2013, 22:59  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)

Не мучайтесь, поставьте кварц по-шустрее. 10% оверклокинга не смертельно. Но по-уму сделайте простейший видеоконтроллер на жесткой логике/CPLD иначе кроме видеовывода ничего сделать не успеете.
__________________
misterdi<@>i.ua
MisterDi вне форума  
Непрочитано 30.06.2013, 23:07  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
По умолчанию Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)

Сообщение от jump Посмотреть сообщение
JerryI,
а если запустить atхmega на 3.3V @ 32MHz?
...У меня нет Xmega, если вы об этом.
Сообщение от MisterDi Посмотреть сообщение
Не мучайтесь, поставьте кварц по-шустрее. 10% оверклокинга не смертельно. Но по-уму сделайте простейший видеоконтроллер на жесткой логике/CPLD иначе кроме видеовывода ничего сделать не успеете.
Кварц нашел и поставил на 26.6MHz, но на 3.3v ни одна из atmega не запустилась . Хотя на 5v все стабильно работает.
На жесткой логике - было бы неплохо. Но у меня ее нет, к сожалению. (зато навалом к155ла3 и прочих). В принципе, у этого контроллера задача - простая: вывести изображение. Он будет наподобие видео-адаптера, остальные вычисления будет проводить другой контроллер и отправлять данные в видео-память.
JerryI вне форума  
Непрочитано 30.06.2013, 23:33  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию 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 вне форума  
Сказали "Спасибо" MisterDi
JerryI (01.07.2013)
Непрочитано 01.07.2013, 00:58  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)

Сообщение от MisterDi Посмотреть сообщение
За основу возьмите схему видеоконтроллера от того-же "Орион-128".
Ну да, от любого спектрума, только не родного - там всё в ULA запрятано. Причём там ЦП работал с частотой менее 500кГц (3.5MHz/8-9)во время обратного хода луча (на прямом всё блокировалось и работал вывод на экран) и ничего - успевало...
Причём на SRAM всё ещё проще - не нужно цикл обновления городить.

Последний раз редактировалось omercury; 01.07.2013 в 01:01.
omercury вне форума  
Непрочитано 01.07.2013, 08:38  
AndruXXXaUA
Частый гость
 
Регистрация: 25.11.2007
Сообщений: 33
Сказал спасибо: 12
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
AndruXXXaUA на пути к лучшему
По умолчанию Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)

+1 за жесткую логику для этих целей, а для заполнения памяти я бы рекомендовал вместо обычной применить Dual-Port SRAMs. Один порт на контроллер на жесткой логике/выход, второй для обновления/записи данных в память.
http://www.cypress.com/?id=82&source=header.
AndruXXXaUA вне форума  
Непрочитано 01.07.2013, 09:08  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
По умолчанию 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.
JerryI вне форума  
Непрочитано 01.07.2013, 09:30  
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,982
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)

JerryI,
не знаю, что вы там придумываете, но обратите тогда внимание на eZ80 ф.Zilog - совместимость с Z80 на 50МГц + периферия + масса ПО, а на ПЛИС сваяете контроллер дисплея.
jump вне форума  
Непрочитано 01.07.2013, 09:49  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
По умолчанию Re: VGA, AVR, SRAM... (вывод видеопамяти на экран)

Сообщение от jump Посмотреть сообщение
JerryI,
не знаю, что вы там придумываете, но обратите тогда внимание на eZ80 ф.Zilog - совместимость с Z80 на 50МГц + периферия + масса ПО, а на ПЛИС сваяете контроллер дисплея.
Да. У него мощь, конечно... На нем хоть компьютер строй.
Если уж на то пошло, можно задействовать Yamaha V9938. Однокристальный видео-контроллер.
PS: Пока с логикой буду разбираться.
JerryI вне форума  
 

Закладки

Метки
avr, sram, trouble, vga
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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, время: 19:56.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot