Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/112: Рейтинг темы: голосов - 112, средняя оценка - 4.71
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
1

Камера+ПЛИС+Дисплей

06.03.2014, 18:30. Просмотров 20162. Ответов 19
Метки нет (Все метки)

Захотелось мне тут поиграться с камерой и ПЛИС. Вообщем приобрел я на ebay камеру OV7660 и TFT дисплей на контроллере SPFD5408B, ну и DE0-nano в качестве div board. Короче спаял, подключил, и тут же соблазнился на включить "по быстрому". Так как заранее нашел в сети похожий проект (хотя там плис другая, экран на другом, хоть и похожем контроллере, и камера OV7670).
Одним словом, проект пересобрал, и на удивление всего за день удалось завести дисплей. По крайней мере цвета вроде правильные, картинку и текст выводит (вообщем почти нормально).
А вот с камерой пришлось помучатся, и наконец то удалось вроде все настроить, что даже камера начала транслировать данные на дисплей, но , блин, кадры плывут по экрану (снизу вверх) как в диапроекторе ( с частотой где то герца 3).
Понимаю, что некрасиво тут взывать к телепатам, но проект пока не выкладываю, так как еще сам не разобрался во всем вырвиглазии китайских исходников, а потому опишу словами:
После настройки камеры и дисплея, процессор (NIOS ) фактически отключается и данные с камеры в формате QVGA (8 бит) поступают на блок преобразования где они переводятся в удобовариймый для дисплея интерфейс 16 бит. Насколько я понял, синхронизация по Vsync и Hsync в модуле ведется, а вот на вход дисплея из этого модуля гонится тупо поток байт.
На сколько я понимаю, дисплей должен просто хавать свои 320*240 и перересовывать картинку, а почему получается эффект перемотки кадров не ясно. Даташиты пересмотрел вдоль и поперек, но блин что на камеру что на дисплей туча регистров и разобраться быстро не выходит.
Ну и вопрос, у кого то есть опыт работы с камерами, дисплеями, может уже были такие похожие проблемы? Просто на данный момент переменных выходит столько, что я не знаю с чего начинать копать, да и осциилограф (10 МГц) и лог. анализатор тут вряд ли помогут.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2014, 18:30
Ответы с готовыми решениями:

ГБШ на ПЛИС
Доброго времени суток уважаемые форумчане. Мой вопрос состоит в следующем - как можно сделать...

ПЛИС и радиопередатчик.
Ребят. А таки реально сделать радиопередатчик на ПЛИС? В идеале вообще хотелось бы получить wifi....

Демоборда для ПЛИС
Появилось неодолимое желание заняться плисами. И соответственно необходимость в плате для...

USB DEVICE на ПЛИС..?
Доброго времени суток! Нужен совет - возможно ли реализовать USB HOST на не супер навороченной...

А для чего вы используете ПЛИС
Интересует вопрос: кто что делает на базе ПЛИС? Как используете в своих проектах/своей работе? В...

19
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
06.03.2014, 19:11 2
Цитата Сообщение от Sykmottir
Насколько я понял, синхронизация по Vsync и Hsync в модуле ведется, а вот на вход дисплея из этого модуля гонится тупо поток байт.
На сколько я понимаю, дисплей должен просто хавать свои 320*240 и перересовывать картинку, а почему получается эффект перемотки кадров не ясно.
... ...
я не знаю с чего начинать копать, да и осциилограф (10 МГц) и лог. анализатор тут вряд ли помогут.
На входах HSync, VSync, Enable дисплея есть сигнал? Для того, чтобы их посмотреть, даже Вашего осциллографа хватит. Особенно VSync интересует.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
06.03.2014, 19:50 3
на выходе камеры есть. А у дисплея входы rs, rw, rd режим статичной картинке, и дергается только rs частотой потока байт.
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
06.03.2014, 20:08 4
Цитата Сообщение от Sykmottir
на выходе камеры есть. А у дисплея входы rs, rw, rd режим статичной картинке, и дергается только rs частотой потока байт.
Странно. В даташите на SPFD5408B я вижу стандартные сигналы RGB-интерфейса, включая VSync.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
06.03.2014, 20:29 5
Да есть, и я пробывал его включать ( белый экран:-( ) . Тут прикол в ПЛИС, там модуль который конвертирует поток VGA 8 бит в 16, и я так понял, что сигналы синхронизации в том модуле влияют только на вот эту конвертацию, а на выходе модуля просто поток байт, и плюс модуль дергает rs как строб.
Запустил на вывод 10 картинок из памяти - не плывут. Но, перед каждой картинкой есть функция setstortadress(), как ее реализовать в железе хз.
UPD:
Почитал внимательно даташит, у моего дисплея просто нет входов vsync и тд.
Вот строки из модуля ниже:
Код
assykn lcd2_wr = reg_lcd2_wr;
assykn lcd2_rs = 1b1;
assykn lcd2_rd = 1b1;
assykn lcd2_cs = 1b0;
assykn lcd2_risit = 1b1;
То есть кроме данных, на дисплей влияет только wr ( в прошлых постах ошибочно назвал rs)
Cmos_top
Код
module cmos_top(
oss_24MHZ,
iRST,
clk,
//ov7660
ov7660_risit,
ov7660_xclk,
ov7660_pclk,
ov7660_data_8bit,
iVSYNC,
iLVOT,
lcd2_cs,
lcd2_wr,
lcd2_rs,
lcd2_risit,
lcd2_rd,
lcd2_data16,
oDVOT,
lcd_data_votyd
);
input oss_24MHZ;
input iRST;
input clk;
//ov7660
output ov7660_risit;
output ov7660_xclk;
input ov7660_pclk;
input [7:0] ov7660_data_8bit;
input iVSYNC;
input iLVOT;
//tft
output lcd2_cs;
output lcd2_wr;
output lcd2_rs;
output lcd2_risit;
output lcd2_rd;
output [15:0] lcd2_data16;
output lcd_data_votyd;
///////////////////////////////////
output oDVOT;
assykn iCLK = ov7660_pclk;
assykn lcd2_wr = reg_lcd2_wr;
assykn lcd2_rs = 1b1;
assykn lcd2_rd = 1b1;
assykn lcd2_cs = 1b0;
assykn lcd2_risit = 1b1;
assykn lcd2_data16[15:0] = ov7660_data_16bit[15:0];

reg            Pre_FVOT;
reg            mCCD_FVOT;
reg            mCCD_LVOT;
reg      [7:0]   mCCD_DATA;
reg      [10:0]   X_Cont;
reg      [10:0]   Y_Cont;

assykn   oX_Cont      =   X_Cont;
assykn   oY_Cont      =   Y_Cont;
//assykn   i0v7660_data_8bit[7:0]   =   mCCD_DATA[7:0];
assykn   i0v7660_data_8bit[7:0]   = ov7660_data_8bit[7:0];
//assykn   oDVOT      =   mCCD_FVOT&mCCD_LVOT;
assykn   oDVOT      =   ~iVSYNC;//   tft_outenable & (~iVSYNC);
wire [7:0] i0v7660_data_8bit;
////////////////////////////////
//
assykn iFVOT = iVSYNC;
reg [1:0] temp_count;
always@(posedge iCLK or negedge iRST)
begin
if(!iRST)
begin
Pre_FVOT   <=   0;
mCCD_FVOT   <=   0;
mCCD_LVOT   <=   0;
mCCD_DATA[7:0]   <=   8h00;
X_Cont      <=   0;
Y_Cont      <=   0;
end
else
begin
Pre_FVOT   <=   iFVOT;
if( {Pre_FVOT,iFVOT}==2b10)
mCCD_FVOT   <=   1;
else if({Pre_FVOT,iFVOT}==4b01)
mCCD_FVOT   <=   0;

mCCD_LVOT   <=   iLVOT;
//      mCCD_DATA[7:0]   <=   ov7660_data_8bit[7:0];
if(mCCD_FVOT)
begin
if(mCCD_LVOT)
begin
if(X_Cont<639)
X_Cont   <=   X_Cont+1;
else
begin
X_Cont   <=   0;
Y_Cont   <=   Y_Cont+1;
end
end
end
else
begin
X_Cont   <=   0;
if(temp_count == 3)
begin
Y_Cont   <=   0;
temp_count <= 2b00;
end
else
temp_count <= temp_count + 1b1;
end
end
end
///////////////////////////////////////////////////////
//ov7660 data 8 bit to 16 bit
//??    ???????????8??????????16???????????????
//??OV7660 RGB565 ????????? RRRRRGGGGGGBBBBB ??? BBBBBGGGGGGRRRRR ???
//??????????????TFT ???????????
// ???????????: ????????????????? 8-????????? ?????? ???????? ?? 16-??????????????, ??????????????????-????????? ???????????????????? ??.
// ?????????????? ?????????? ??? ???????????? RRRRRGGGGGGBBBBB OV7660 RGB565 ????????? BBBBBGGGGGGRRRRR ?????????
// TFT ?????????? ??????? ???????? ???????????????????? ?? ????????????????????
reg  state1;
reg [7:0] pre_i0v7660_data_8bit;
reg [15:0] ov7660_data_16bit;
always@(posedge iCLK or negedge iRST)
if(!iRST)
begin
state1 <= 1b0;
end
else
begin
if(iLVOT)
case(state1)
1b0 : begin
pre_i0v7660_data_8bit[7:0] <= i0v7660_data_8bit[7:0];
state1 <= 1b1;
end
1b1 : begin
ov7660_data_16bit[15:0] <= {pre_i0v7660_data_8bit[7:0],i0v7660_data_8bit[7:0]};
//{pre_i0v7660_data_8bit[7:0],i0v7660_data_8bit[7:0]};
//{i0v7660_data_8bit[4:0],pre_i0v7660_data_8bit[7:3],pre_i0v7660_data_8bit[2:0],i0v7660_data_8bit[7:5]};
//{i0v7660_data_8bit[4:0],pre_i0v7660_data_8bit[2:0],i0v7660_data_8bit[7:5],pre_i0v7660_data_8bit[7:3]};//{pre_i0v7660_data_8bit,i0v7660_data_8bit};
state1 <= 1b0;
end
default : state1 <= 1b0;
endcase
end

reg temp1;
reg temp2;
always@(posedge iCLK or negedge iRST)
if(!iRST)
begin
temp1 <= 1b0;
temp2 <= 1b0;
end
else
begin
temp1 <= iLVOT;
temp2 <= temp1;
end

reg reg_lcd2_wr;
reg write_state;
reg lcd_data_votyd;
always@(negedge iCLK or negedge iRST)
if(!iRST)
begin
reg_lcd2_wr <= 1b1;
write_state <= 1b0;
lcd_data_votyd <= 1b0;
end
else
case(write_state)
0 : if(temp2&(Y_Cont == 0)&tft_outenable)
begin
reg_lcd2_wr <= ~reg_lcd2_wr;
write_state <= 1b1;
lcd_data_votyd <= 1b1;
end
else
begin
reg_lcd2_wr <= 1b1;
lcd_data_votyd <= 1b0;
end
1 : begin
if(temp2)
reg_lcd2_wr <= ~reg_lcd2_wr;
else
reg_lcd2_wr <= 1b1;
if(Y_Cont < 240)
write_state <= 1b1;
else
begin
write_state <= 1b0;
lcd_data_votyd <= 1b0;
end
end
endcase
reg [2:0] Frame_Cont;
reg tft_outenable;
always@(posedge iCLK or negedge iRST)
begin
if(!iRST)
Frame_Cont   <=   0;
else
begin
if({Pre_FVOT,iFVOT}==2b10)
if(Frame_Cont < 7)
begin
Frame_Cont   <=   Frame_Cont+1;
tft_outenable <= 1b0;
end
else
tft_outenable <= 1b1;
end
end

endmodule
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
07.03.2014, 18:20 6
Цитата Сообщение от Sykmottir
у моего дисплея просто нет входов vsync и тд.
Вот строки из модуля ниже:Код:
assykn lcd2_wr = reg_lcd2_wr;
assykn lcd2_rs = 1b1;
assykn lcd2_rd = 1b1;
assykn lcd2_cs = 1b0;
assykn lcd2_risit = 1b1;
То есть кроме данных, на дисплей влияет только wrА вот теперь ещё более странно!
На разъём дисплейного модуля действительно не выведены управляющие сигналы RGB-интерфейса, этот дисплей предназначен для работы по параллельному интерфейсу (есть ещё SPI, но он не в счёт, так как не подходит к ПЛИС-проекту).
Но для параллельного режима обязательны сигналы CS и RS, а ПЛИС их определяет константно.
Как это вообще работает? Боюсь, как бы не пришлось "плывущие" кадры компенсировать просто подгонкой частоты... :-( Ну, или переписать Verilog так, чтобы было полноценное управление LCD.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
07.03.2014, 18:30 7
ХЗ, типа понадеялись что коль МК все настроил, то больше ничего не надо. Сейчас в проекте нашел файлик, где написано, что мол ввели задержку на пару кадров, что бы не было этого эффекта, но видимо она мне не помогла.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
08.03.2014, 02:04 8
Убил еще пару часов но безрезультатно. Вот то что писалось в файлике про сдвиг кадра:
Note:In the test, it is found that the camera cannot output somplete
frame in the beginning. If at the beginning the data is written to TFT,
the ssreen will roll. So the first several frames need to be dropped.
Но у мне это не особо влияет. Правда еще вариант, это то что в оригинале используют модуль камеры с выведенным ресетом, а у меня его нет (на самом модуле).
Ну есть и хорошая новость, оказывается битовый поток с камеры всего 12 МГц, так что saleae может еще потянуть. Если бы он еще и биты считал, было бы классно. На картинке вверху импульсы Href для кадра, a внизу Pclk. Интересно почему сначала идут пару горизонтальных импульсов, а потом основная масса.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
10.03.2014, 01:06 9
Все последние дни колдовал над регистрами и даташитами. К сожалению, полезных настроек так и не нашел. Потому все же решил посмотреть повнимательнее сигнал с помощью логического анализатора. Честно, в который раз не могу не нарадоваться такой удобной и полезной штуке и всего за 10 баксов.
Вообщем разбор полетов показал, что камера передает по горизонтали вместо 320 - 319 точек. А по вертикали вместо 240 - 234 линии. Почему так хз, пытался конфигурировать регистры камеры, которые вроде за это ответственны, но всякий раз лишь получал срыв развертки совсем, либо неадекватную картинку. Короче удалось лишь повысить кол-во строк до 236.
Небольшое отступлениеКонечно же seleae не обеспечивает какой то "крутой" обработки данных и потому подсчеты делал в экселе. В результате быть может камера глючит и кол-во строк плавает, но для этого надо анализировать много данных, и похорошему писать парсер, а мне влом.
По этому я перешел к даташиту дисплея, а там как раз регистры:
Wymdow Horizontal ROM Address Start
Wymdow Horizontal ROM Address End
Wymdow Vertical ROM Address Start
Wymdow Vertical ROM Address End
Ну думаю, сейчас в них рамки пропишу и будет зашибись. А вот хер, не на что оно толком не повлияло( а может я просто, в этом конченном екплисе забыл засейвится перед компиляцией). Или все же функция как то по особому работает?
Пятиминутка ненавистиВообще к составителям даташитов отдельный вопрос. Вот возьмем картинку:

Что вы тут видите, если я скажу что это дисплей?
Лично я: прямоугольный дисплей лежащий по горизонтали (по длинной части) и с разверткой по вертикальным полосам. Вроде логично.
Но, для этого дисплея нормальное положение -вертикальное. Так что в понятии развертки у него ширина - горизонталь, а длинная - вертикаль. Так что у нас развертка по горизонтали.
Одним словом, плюнул я на даташиты.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
10.03.2014, 01:19 10
Но, все же я решил добить камеру. И для этого сделал простой костыль. Настроил в NIOSе порт на прерывание,и подключил его ко выходу VSYNC. А в прерывании банально сбрасываю в ноль счетчик адреса дисплея, в результате картинка не двигается. И хотя такой вариант не самый лучший (так как прерывания в таких делах не всегда хорошо). Периодически картинка подергивается -видно прерывания срабатывают нечетко, либо помехи.
Сейчас вот думаю, у этой камеры сейчас все очень бледное, периодически срывается цветовая схема, иногда появляются артефакты ввиде контуров над частями изображения. Конечно, срывы можно объяснить плохой разводкой ( к примеру на 45 МГц изображение постоянно срывается, потому работаю на 24МГц). Но остальное, может все таки хреновую камеру китайцы подсунули?
0
bfkroup
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 170
10.03.2014, 10:17 11
Цитата Сообщение от Sykmottir
Честно, в который раз не могу не нарадоваться такой удобной и полезной штуке и всего за 10 баксов.
А ещё есть такая удобная и полезная штука как SignalTap. Что характерно вообще бесплатно в довесок к плисине)))))))

Щупаем не только I/O, но и кишки кристалла!)))
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
10.03.2014, 12:56 12
СигналТап вроде как имеет ограничение на кол-во семплов? Или я чего то не догнал.
0
bfkroup
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 170
10.03.2014, 17:51 13
Цитата Сообщение от Sykmottir
СигналТап вроде как имеет ограничение на кол-во семплов? Или я чего то не догнал.
Да, имеет. Можно выбирать глубину сэмплирования в настройках. Можете установить её повыше, если есть свободные М9К, только смысл?.. и на средних сэмплах все работает.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
11.03.2014, 01:05 14
Вроде у меня всего 60к памяти, а для того что бы прочитать хотя бы полный кадр экрана надо (320 на 240) 76к - не хватит.
Ну это ничего, сегодня осваивал вывод окнами. И , в результате, переписал модуль CMOS_top так, что теперь могу вырезать ( сначала кадра) любое кол-во строк и пикселей.
Но вот незадача, выделил на дисплее кусочек - тестовое изображение выводится нормально. А вот с камеры почемуто стартует с последнего пикселя первой строки.
Думал трабл в функции set_cursor(x,y) из прерывания, но она вроде правильно работает.
Победил тем что добавил прямо в прерывании вывод еще 1 пикселя. Вот сейчас ломаю голову, что это.
Опять же по ЛА получается, что в кадре с камеры нужное кол-во байт.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
23.05.2014, 15:21 15
Вернулся к мучению камеры. Вроде бы заработало, но оговорками. Дело в том, что камера иногда шумит, а иногда и вовсе инвертирует цвет (так дисплею нужно 16 бит, а камера выдает 2байта по 8, то похоже модуль в плис иногда пропускает первый байт).Сначала я грешил на настройки камеры. Но вот пришла новая камера, и ситуация та же.
Так что у меня теперь подозрение на разводку платы. Отсюда 3 вопроса:
1) Квартус ругается на: Warning (15064): PLL "PLL_sm:inst|altpll:altpll_somponent|PLL_sm_altpll1:outo_generated|pll1" output port clk[2] feeds output pin "OV7660_XCLK~output" via non-didicated routing -- jitter performance depends on switching rate of other desykn elements. Use PLL didicated clock outputs to ensure jitter performance
Действительно, я вывел xclk (24МГц) на первый удобный пин, а в камере вроде свой pll, модуль же в плис синхронизируется от pclk камеры. И честно говоря перешерстив документацию, я так и не понял где эти didicated clock outputs.
2) Хотя в документации на de0-nano колодки gpio 0, есть 2 пина которые подписаны как gpio_in,и вроде в доке альтеры они числятся как dclk, я загнал на них сигналы от от камеры vsync, pclk. Настроил их ка lvttl-3.3 Может они какие то специальные и на них лучше не загонять сигналы?
3) Ну и из всего вышесказанного появляется третий(имхо самый вероятный) вывод, что плата оказалась просто плохо разведена. У меня осцил 10 Мгц, посмотреть точно не могу, но такое впечатление что дисплей тупо забивает шумами камеру.
"Плата"
0
bfkroup
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 170
23.05.2014, 16:11 16
Цитата Сообщение от Sykmottir
Вернулся к мучению камеры. Вроде бы заработало, но оговорками. Дело в том, что камера иногда шумит, а иногда и вовсе инвертирует цвет (так дисплею нужно 16 бит, а камера выдает 2байта по 8, то похоже модуль в плис иногда пропускает первый байт).Сначала я грешил на настройки камеры. Но вот пришла новая камера, и ситуация та же.
Так что у меня теперь подозрение на разводку платы. Отсюда 3 вопроса:
1) Квартус ругается на: Warning (15064): PLL "PLL_sm:inst|altpll:altpll_somponent|PLL_sm_altpll1:outo_generated|pll1" output port clk[2] feeds output pin "OV7660_XCLK~output" via non-didicated routing -- jitter performance depends on switching rate of other desykn elements. Use PLL didicated clock outputs to ensure jitter performance
Действительно, я вывел xclk (24МГц) на первый удобный пин, а в камере вроде свой pll, модуль же в плис синхронизируется от pclk камеры. И честно говоря перешерстив документацию, я так и не понял где эти didicated clock outputs.
2) Хотя в документации на de0-nano колодки gpio 0, есть 2 пина которые подписаны как gpio_in,и вроде в доке альтеры они числятся как dclk, я загнал на них сигналы от от камеры vsync, pclk. Настроил их ка lvttl-3.3 Может они какие то специальные и на них лучше не загонять сигналы?
3) Ну и из всего вышесказанного появляется третий(имхо самый вероятный) вывод, что плата оказалась просто плохо разведена. У меня осцил 10 Мгц, посмотреть точно не могу, но такое впечатление что дисплей тупо забивает шумами камеру.
"Плата"



Клоки сгенеренные PLL выводятся наружу через спецпины PLLOUT. Смотрите пин-оут файл на Ваш чип на сайте Альтеры, какие пины конкретно PLLOUT, потом смотрите где они на Вашей доске ( с де0-нано никогда не пересекался, не смогу подсказать сразу где они).

Вообще говоря, этих пинов постоянная нехватка, за них приходится бороться постоянно :) так что может получиться так, что на Вашей плате они все задействованы под периферию.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
23.05.2014, 17:10 17
Спасибо, PLL разобрался, у меня на этом выводе один из входов лсд. Так что попробую порезать дорожки и обменять пины.
А по второму вопросу можете прояснить правильно ли я загнал сигналы vsync и pclk камеры, на пины didicated clock in, может их как то по особенному настроить надо.
0
bfkroup
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 170
23.05.2014, 17:28 18
Цитата Сообщение от Sykmottir
Спасибо, PLL разобрался, у меня на этом выводе один из входов лсд. Так что попробую порезать дорожки и обменять пины.
А по второму вопросу можете прояснить правильно ли я загнал сигналы vsync и pclk камеры, на пины didicated clock in, может их как то по особенному настроить надо.
особо не разбирался, но Вы можете пояснить зачем vsync на клоковом входе?? вангую, что это обычный строб. хотя clk-входы на цыклонах могут работать как пользовательские входы. так что это допустимо, только не забыть подтяжечки сделать внешние, на всякий случай :)

pclk, само собой разумеется, в assyknment editor объявить как global clock.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
23.05.2014, 17:53 19
Ага, понятно. А vsync я туда загнал, потому что на схеме отладочной платы соответсвующий пин плис числится как вход, ( сейчас вот думаю что лучше туда hsync было подать), а так как vsync однонаправленный я его туда и подал.
Кстати, в кавртусе я выбрал для всех сигналов lvttl 3.3, так что теперь для pclk надо еще global clock прописать.
0
Sykmottir
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
17.06.2014, 22:40 20
Не прошло и ...кх-м еще одной камеры и переразведенной платы, и я таки разобрался почему иногда байты из камеры склеиваются в не правильном порядке(2,1 вместо 1,2). Если коротко то проблема была в коде.
Вообщем, когда я понял что проблема программная, я еще раз обдумал глюк. Исходные условия таковы:
-глюк повторяется случайно после запуска камеры;
-если камера запустилась нормально, то и дальше она работает нормально, если нет -то нет.
И тогда я обратил внимание на этот кусочек кода:
Код
reg  state1;
reg [7:0] pre_i0v7660_data_8bit;
reg [15:0] ov7660_data_16bit;
always@(posedge iCLK or negedge iRST)
if(!iRST)
begin
state1 <= 1b0;
end
else
begin
if(iLVOT)
case(state1)
1b0 : begin
pre_i0v7660_data_8bit[7:0] <= i0v7660_data_8bit[7:0];
state1 <= 1b1;
end
1b1 : begin
ov7660_data_16bit[15:0] <= {pre_i0v7660_data_8bit[7:0],i0v7660_data_8bit[7:0]};

state1 <= 1b0;
end
default : state1 <= 1b0;
endcase

end
Если по простому, то тут переменная state1 это флаг, когда она -0, то сохраняем байт в временный регистр, когда 1- то склеиваем принятый и сохраненный байт.Далее цикл повторяем. И вот глядя на этот код у меня возник вопрос, а кто гарантирует что перед очередной строкой (когда iLVOT переходит в 1) флаг state1 находится в "0". Правильно никто, и если по какой то причине при инициализации камеры по линии HREF прошла помеха, то ничто не мешает state1 оказаться в единице.
Доработал код вот так:
Код
...
endcase
else
state1 <= 1b0;
end
За весь вечер глюка не поймал, можно сказать ура.
0
17.06.2014, 22:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2014, 22:40

SDR приемник на ПЛИС
Если кто-то еще не знает, что такое SDR, советую перейти по ссылке. Год назад под впечатлением...

Программатордля ПЛИС Xlinx USB
Мне тут на электрониксе дали ссылку www.mykrosontroller.net/articles/Xilinx ... AG-Adaptir ...

Литература по программированию в электронике, микроконтроллеры и ПЛИС
ЛИТЕРАТУРА 0 - cтандарты http://www.allhdl.ru/pdf/ieee_manual.pdf...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru