Вывод изображения на телевизор в CodeVisionAVR
pupkin Дата: Суббота, 01.12.2012, 19:06 | Сообщение # 61
Сержант
Группа: Проверенные
Сообщений: 36
Статус: Offline
вот такая схема http://vg.ucoz.ru/forum/9-18-1 только вместо PD5 у меня PC1 CodeVision не будет криво библиотеки делать.. задержка по любому есть
ВитГо Дата: Суббота, 01.12.2012, 20:45 | Сообщение # 62
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
лучше в SPI отправляй 0х80 и скажи что телек показывает....
Виталий (аka ВитГо)
pupkin Дата: Понедельник, 03.12.2012, 15:27 | Сообщение # 63
Сержант
Группа: Проверенные
Сообщений: 36
Статус: Offline
он отображает две полоски(будто отражает) они не белые... и с середины начинают рандомно дергаться, как будто ветром дуют..) я хз че за дела..) Вот весь проект в CVAVR http://zalil.ru/upload/34027689
Сообщение отредактировал pupkin - Понедельник, 03.12.2012, 15:27
ВитГо Дата: Понедельник, 03.12.2012, 19:14 | Сообщение # 64
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
попробуй такой код прерывания:
Code
interrupt [TIM1_COMPA] void timer1_compa_isr(void) { switch (kk){ case 3: if(str <= 64){ ZERO; #asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop"); #asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop"); #asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); BLACK; }else if(str > 64 && str <= 224) { ZERO; #asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop"); #asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop"); #asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); BLACK; delay_us(20); spi(0x80); delay_us(5); BLACK; /* WHITE; delay_us(30); BLACK; delay_us(8); */ }else if(str > 224 && str <= 288){ ZERO; #asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop"); #asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop");#asm("nop"); #asm("nop");#asm("nop"); BLACK; }else{ kk = 0; str = 0; } str++; break; case 0: delay_us(32); shortsi(shortsyncB); kk = 1; break; case 1: shortsi(shortsyncB); delay_us(4); shortsi(shortsyncB); kk = 2; break; case 2: shortsi(shortsyncB); delay_us(4); shortsi(shortsyncB); kk = 4; break; case 4: longsi(); delay_us(4); longsi(); kk = 5; break; case 5: longsi(); delay_us(4); longsi(); kk = 6; break; case 6: longsi(); delay_us(4); shortsi(shortsyncB); kk = 7; break; case 7: shortsi(shortsyncB); delay_us(4); shortsi(shortsyncB); kk = 8; break; case 8: shortsi(shortsyncB); delay_us(4); shortsi(shortsyncB); kk = 3; break; } }
Виталий (аka ВитГо)
pupkin Дата: Пятница, 14.12.2012, 17:35 | Сообщение # 65
Сержант
Группа: Проверенные
Сообщений: 36
Статус: Offline
так вообще ничего не появляется.... может у себя протестишь там)Добавлено (14.12.2012, 17:35) --------------------------------------------- каков принцип вывода символов по MOSI ?
ВитГо Дата: Суббота, 15.12.2012, 22:10 | Сообщение # 66
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
MOSI - это выход с регистра сдвига поэтому с каждым тактом байт загруженный в регистр SPDR с двигается и бит слева или справа (в зависимости от настроек) выводится на вывод MOSI
Виталий (аka ВитГо)
ВитГо Дата: Воскресенье, 16.12.2012, 07:59 | Сообщение # 67
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
сейчас я буду писать еще один модуль вывода изображения, попробую написать его на СИ, правда среду разработки буду использовать бесплатную (WinAVR)
Виталий (аka ВитГо)
ZET Дата: Вторник, 25.12.2012, 15:27 | Сообщение # 68
Рядовой
Группа: Пользователи
Сообщений: 1
Статус: Offline
http://vga-avr.narod.ru/main_rus.html
ВитГо Дата: Вторник, 25.12.2012, 16:46 | Сообщение # 69
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
угу, этот сайт я видел, он даже есть в полезных ссылках... но там самое интересное не показано (только есть ссылка что есть такое), а на сайт выложены уж совсем простые моменты.. да и если честно не очень оптимально там написана генерация сигналов кадровой синхронизации
Виталий (аka ВитГо)
pupkin Дата: Среда, 02.01.2013, 15:02 | Сообщение # 70
Сержант
Группа: Проверенные
Сообщений: 36
Статус: Offline
вот чел в CVAVR сделал генератор... http://laserium.narod.ru/videogenerator.html просьба глянуть)
ВитГо Дата: Четверг, 03.01.2013, 03:12 | Сообщение # 71
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
гм.. ну в принципе как я и ожидал: несмотря на то что использовался СИ - код во многом генериться при помощи инлайнового ассемблера.. если еще учесть что автор сам пишет про нелинейность по вертикали - становиться совсем не интересно :-( возможно все таки нужно подобные вещи писать более изощренно, а не влоб.. плюс генерация строчных данных через сдвиг в портA - вообще ужас какой то.. в принципе как экспериментальный проект пойдет конечно, но можно было бы еще подумать и сделать через SPI
Код
// Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Reinitialize Timer 0 value TCNT0=0xFD; TIMSK=TIMSK & 0xFD; #asm("sei") // Place your code here ++j; //PORTA.7=0;//?????? ?????? PORTB.0=0; if(j==625){ delay_us(2); #asm("nop/nop/nop") for(j=1;j<=5;j++){ delay_us(27); #asm("nop/nop/nop") PORTB.0=1; delay_us(4); #asm("nop/nop/nop/nop/nop") PORTB.0=0; }; for(j=1;j<=5;j++){//?????? ?????????????????? ???????????? ????????? delay_us(2); #asm("nop/nop") PORTB.0=1; delay_us(29); #asm("nop/nop/nop/nop") PORTB.0=0; }; j=6; l=0; n=0; goto end_proc; }; if(j==313){ delay_us(2); #asm("nop/nop/nop") PORTB.0=1; delay_us(29); #asm("nop/nop/nop/nop") PORTB.0=0; for(j=1;j<=5;j++){ delay_us(27); #asm("nop/nop/nop") PORTB.0=1; delay_us(4); #asm("nop/nop/nop/nop/nop") PORTB.0=0; }; for(j=1;j<=4;j++){//?????? ?????????????????? ???????????? ????????? delay_us(2); #asm("nop/nop") PORTB.0=1; delay_us(29); #asm("nop/nop/nop/nop") PORTB.0=0; }; delay_us(2); //#asm("nop/nop/nop") l=0; n=0; PORTB.0=1; j=318; goto end_proc; }; if ((j>99 && j<161)||(j>412 && j<574)){//161 574 delay_us(3); PORTB.0=1; delay_us(6); if(j>99 && j<161){ i=j-100; delay_us(1); }; if(j>412 && j<574){i=j-413;}; PORTA=pict[0][n];//1 #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA=pict[1][n];//2 #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA=pict[2][n];//3 #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA=pict[3][n];//4 #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA=pict[4][n];//5 #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA=pict[5][n];//6 #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA=pict[6][n];//7 #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA=pict[7][n];//8 #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA=pict[8][n];//9 #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA=pict[9][n];//10 #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA<<=1; #asm("nop/nop") PORTA.7=0; if(i==(l+5)){ l=i; ++n; if(n==32){n=0;l=0;}; }; goto end_proc; };
Виталий (аka ВитГо)