Пытаюсь вывести изображение на телевизор.. вроде что-то проясняется на основе этого http://vg.ucoz.ru/pu...impulsy/5-1-0-9
разобрался как двигать белый косячный прямоугольник ....
хотелось бы функцию , чтобы по х у двигало. но delay_us требует только константу..
там чел в 3 статье что-то говорит про таймер... и пишит на ассемблере.. я далек от него) только C (cvavr)
может кто подскажет что-нибудь..
И вот еще тут размышляет чел.. http://vg.ucoz.ru/forum/8-13-1
именно это мне не понятно
как это по SPI ? и что значит по совпадению..)
Раздел: AVR
разобрался как двигать белый косячный прямоугольник ....
хотелось бы функцию , чтобы по х у двигало. но delay_us требует только константу..
там чел в 3 статье что-то говорит про таймер... и пишит на ассемблере.. я далек от него) только C (cvavr)
может кто подскажет что-нибудь..
И вот еще тут размышляет чел.. http://vg.ucoz.ru/forum/8-13-1
именно это мне не понятно
Цитата
текущая логика работы программы:
использую таймер Т1
по совпадению с OCR1A - осуществляется вывод синхроимпульсов горизонтальной и вертикальной синхронизации
по совпадению с OCR1B - осуществляется вывод данных строки видео сигнала.
вывод в строку осуществляется через SPI на частоте 8 мгц
использую таймер Т1
по совпадению с OCR1A - осуществляется вывод синхроимпульсов горизонтальной и вертикальной синхронизации
по совпадению с OCR1B - осуществляется вывод данных строки видео сигнала.
вывод в строку осуществляется через SPI на частоте 8 мгц
как это по SPI ? и что значит по совпадению..)
#include <mega32.h>
#include <delay.h>
#define ZERO PORTC=0 // 0 уровень синхроимпульса
#define BLACK PORTC=1 // 0.3 уровень черного
#define WHITE PORTC=2 // 0.7-1.0 уровень изображения
#define vcol 286 // количество видимых строк изображения
#define shortsyncZ 3 // длительность короткого синхроимпульса
#define shortsyncB 29 // длительность паузы короткого синхроимпульса
#define longsyncZ 27 // длительность длинного синхроимпульса
#define longsyncB 5 // длительность паузы длинного синхроимпульса
unsigned int i;
// подпрограмма генерирующая 5 коротких синхроимпульсов (импульсы последовательности l,m)
// параметр last_p - длительность последней паузы в пачке
// если last_p=0 - последняя пауза стандартные 27
// если last_p!=0 - последняя пауза 61
void shortsi(unsigned int last_p) {
ZERO; delay_us(shortsyncZ);
BLACK; delay_us(shortsyncB);
ZERO; delay_us(shortsyncZ);
BLACK; delay_us(shortsyncB);
ZERO; delay_us(shortsyncZ);
BLACK; delay_us(shortsyncB);
ZERO; delay_us(shortsyncZ);
BLACK; delay_us(shortsyncB);
ZERO; delay_us(shortsyncZ);
BLACK;
if (last_p==0) delay_us(shortsyncB);
else delay_us(61);
}
// подпрограмма генерирующая 5 длинных синхроимпульсов (импульсы последовательности n)
void longsi(void) {
ZERO; delay_us(longsyncZ);
BLACK; delay_us(longsyncB);
ZERO; delay_us(longsyncZ);
BLACK; delay_us(longsyncB);
ZERO; delay_us(longsyncZ);
BLACK; delay_us(longsyncB);
ZERO; delay_us(longsyncZ);
BLACK; delay_us(longsyncB);
ZERO; delay_us(longsyncZ);
BLACK; delay_us(longsyncB);
}
void main(void)
{
DDRC = 1<<DDC0|1<<DDC1; // настроим порты вывода
while(1) { longsi();
for(i=0;i<100;i++) { // пустые строки
ZERO; delay_us(4);
BLACK; delay_us(59);
}
for(i=100;i<250;i++) {
ZERO; delay_us(4);
BLACK;
delay_us(18);
WHITE;
delay_us(6);
BLACK;
delay_us(35);
}
for(i=250;i<vcol+1;i++) { // пустые строки до 311
ZERO; delay_us(4);
BLACK; delay_us(59);
}
}
Раздел: AVR