在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于ZYNQ LCD顯示OV5640圖像測試方法

電子設計 ? 來源:米聯客 ? 作者:米聯客 ? 2020-12-01 11:39 ? 次閱讀

在實際開發中,我們會經常使用到LCD屏,LCD屏的種類有很多種,對應的使用方法也有所不同,但是,在ZYNQ 圖像傳輸開發中,思路大體類似,下面介紹在ZYNQ中,使用LCD顯示OV5640圖像方法。

1.1 概述
總體來說,搭建LCD顯示的工程架構同之前搭建OV5640 HDMI顯示的工程類似,采集輸入端、VDMA處理、顯示輸出端,這里變化的是顯示輸出端。

測試使用模塊:OV5640攝像頭,LCD (RGB或HDMI接口) 屏,米聯客ZYNQ開發板。這里需要說明LCD屏的分辨率是1024x600,OV5640使用的分辨率是640X480。

測試工程:測試工程是在攝像頭采集的測試工程的基礎上進行修改,下面僅說明區別,其他相同的部分,這里不在贅述。
為了做對比,我分別做了RGB /HDMI 接口LCD屏的640x480、640x480_1024x600測試歷程。這里使用縮放IP,將640x480分辨率圖像放大到1024x600。

LCD 測試工程
LCD(RGB接口) 640x480
640x480_1024x600 (使用縮放ip)
LCD(HDMI接口) 640x480
640x480_1024x600 (使用縮放ip)

1.2 驗證測試效果

1.2.1 RGB接口LCD屏測試

(1)640X480分辨率輸入,直接輸出測試

可以看到圖像顯示僅占據一部分界面,這是因為輸出分辨率大于輸入分辨率。輸入圖像僅占據輸出圖像的一部分。

1)640x480分辨率輸出

(2)640x480分辨率圖像輸入,采集圖像經過HLS IP處理放大到1024x600輸出。

2)1024x600分辨率輸出

1.2.2 HDMI接口的LCD屏測試

(1)640X480分辨率輸入,直接輸出測試
可以看到圖像顯示僅占據一部分界面,這是因為輸出分辨率大于輸入分辨率。輸入圖像僅占據輸出圖像的一部分。

(2)640x480分辨率圖像輸入,采集圖像經過HLS IP處理放大到1024x600輸出。

2)1024x600分辨率輸出

1.3 硬件工程

1.3.1 硬件平臺搭建

1、VTC設置

由于LCD屏是1024x600,對于VTC中沒有現成的參數配置,因此,這里我們使用AXI4總線對VTC分辨率進行配置。

生成后的IP

選擇自動連線,將VTC連接到總線上。然后,如圖所示連接,并將s_axi_aclken給定值1。


2、ZYNQ 時鐘設置

ZYNQ IP 提供的FCLK_CLK0用于AXI 數據傳輸的時鐘,這個時鐘給定值要根據數據傳輸情況給定,不能設置太高也不能設置太低,否則會造成數據的堵塞,不會輸出。通常我這里調試,640X480輸出會給100M,1080P輸出會給155M(實際輸出是150M)。具體參考程序。

3、縮放IP設置

OV5640的有幾種分辨率(640x480、720P),而LCD屏的分辨率是1024x600;如果直接使用5640的分辨率顯示,使用640X480輸出,則不會鋪滿整個LCD屏;或者使用720P輸出,則720P分辨率大于1024x600,則LCD不能顯示5640采集的全部圖像;因此,使用了hls封裝的縮放IP,可以將輸出的分辨率調整為LCD屏分辨率1024x600。
使用的硬件工程,在OV5640 VDMA圖像傳輸的基礎上進行修改。將HLS生成的IP添加工程中,將Video In to AXI4-Stream的輸出接口與HLS IP的輸入接口連接,HLS IP的輸出接口與VDMA的AXIS接口連接。

4、LCD接口設置

HDMI接口:對于HDMI接口的LCD屏,Video Out IP后面接HDMI_FPGA_ML IP,將RGB信號轉換為HDMI信號輸出。

RGB接口:對于RGB接口的LCD屏,Video Out IP信號直接輸出,這個IP輸出的是RGB信號,同事需要注意,對驅動LCD屏的其他信號,如時鐘、使能信號進行配置。

1.3.2 SDK工程

640x480顯示工程對應的main.c主函數
#include "I2C_16bit.h"

#include "xiicps.h"

#include "xil_io.h"

#include "xparameters.h"

#include "vtc_config.h"

#define VDMA_BASEADDR XPAR_AXI_VDMA_0_BASEADDR

#define VIDEO_BASEADDR0 0x01000000

#define VIDEO_BASEADDR1 0x02000000

#define VIDEO_BASEADDR2 0x03000000

#define H_ACTIVE 1024

#define V_ACTIVE 600

#define H_STRIDE 1024

XIicPs Iic;

u32 i=0;

#define SUM 2457600 //背景寫黑 1280*720*4

void main()

{

//設置內存中的背景

for(i=0;i

Xil_Out16((VIDEO_BASEADDR0 + i), 0x00);

Xil_Out16((VIDEO_BASEADDR1 + i), 0x00);

Xil_Out16((VIDEO_BASEADDR2 + i), 0x00);

}

// Initialize OV5640 regesiter

I2C_config_init();

// Config VTC

Vtc_init(&Vtc, VTC_DEV_ID, &Vtc_timing, VIDEO_RESOLUTION_WSVGA);

//Xil_Out32((VDMA_BASEADDR + 0x030), 0x108B);// enable circular mode

Xil_Out32((VDMA_BASEADDR + 0x030), 0x108B);// enable circular mode

Xil_Out32((VDMA_BASEADDR + 0x0AC), VIDEO_BASEADDR0); // start address

Xil_Out32((VDMA_BASEADDR + 0x0B0), VIDEO_BASEADDR1); // start address

Xil_Out32((VDMA_BASEADDR + 0x0B4), VIDEO_BASEADDR2); // start address

Xil_Out32((VDMA_BASEADDR + 0x0A8), (H_STRIDE*3)); // h offset (H_STRIDE* 3) bytes

Xil_Out32((VDMA_BASEADDR + 0x0A4), (H_ACTIVE*3)); // h size (H_ACTIVE * 3) bytes

Xil_Out32((VDMA_BASEADDR + 0x0A0), V_ACTIVE); // v size (V_ACTIVE)

/*****************從DDR讀數據設置**********************/

Xil_Out32((VDMA_BASEADDR + 0x000), 0x8B); // enable circular mode

Xil_Out32((VDMA_BASEADDR + 0x05c), VIDEO_BASEADDR0); // start address

Xil_Out32((VDMA_BASEADDR + 0x060), VIDEO_BASEADDR1); // start address

Xil_Out32((VDMA_BASEADDR + 0x064), VIDEO_BASEADDR2); // start address

Xil_Out32((VDMA_BASEADDR + 0x058), (H_STRIDE*3)); // h offset (H_STRIDE * 3) bytes

Xil_Out32((VDMA_BASEADDR + 0x054), (H_ACTIVE*3)); // h size (H_ACTIVE * 3) bytes

Xil_Out32((VDMA_BASEADDR + 0x050), V_ACTIVE); // v size (V_ACTIVE)

while (1) ;

}

640x480_1024x600 (使用縮放ip) 顯示工程對應的main.c主函數
#include "I2C_16bit.h"

#include "xiicps.h"

#include "xil_io.h"

#include "xparameters.h"

#include "vtc_config.h"

#include "xhls_video_scaler_top.h"

#define XPAR_HLS_VIDEO_SCALER_TOP_DEVICE_ID XPAR_HLS_VIDEO_SCALER_TOP_0_DEVICE_ID

#define VDMA_BASEADDR XPAR_AXI_VDMA_0_BASEADDR

#define VIDEO_BASEADDR0 0x01000000

#define VIDEO_BASEADDR1 0x02000000

#define VIDEO_BASEADDR2 0x03000000

#define H_ACTIVE 1024

#define V_ACTIVE 600

#define H_STRIDE 1024

XHls_video_scaler_top XHls_video_scaler;

XIicPs Iic;

void XHls_video_scaler_initialize(void)

{

int status;

status=XHls_video_scaler_top_Initialize(&XHls_video_scaler, XPAR_HLS_VIDEO_SCALER_TOP_DEVICE_ID);

if(0!=status)

{

xil_printf("XPAR_HLS_VIDEO_SCALER FAILED/n");

}

}

void XHls_video_scaler_setup(u16 row,u16 col,u16 drow,u16 dcol)

{

XHls_video_scaler_top_SetRows(&XHls_video_scaler,row);

XHls_video_scaler_top_SetCols(&XHls_video_scaler, col);

XHls_video_scaler_top_SetDrows(&XHls_video_scaler, drow);

XHls_video_scaler_top_SetDcols(&XHls_video_scaler, dcol);

XHls_video_scaler_top_InterruptGlobalDisable(&XHls_video_scaler);

XHls_video_scaler_top_EnableAutoRestart(&XHls_video_scaler);

XHls_video_scaler_top_Start(&XHls_video_scaler);

}

void main()

{

// Initialize OV5640 regesiter

I2C_config_init();

// Config VTC

Vtc_init(&Vtc, VTC_DEV_ID, &Vtc_timing, VIDEO_RESOLUTION_WSVGA);

//Initialize XHls_video_scaler Ip

XHls_video_scaler_initialize();

//set input and output resolution ratio

XHls_video_scaler_setup(480,640,600,1024);

//Xil_Out32((VDMA_BASEADDR + 0x030), 0x108B);// enable circular mode

Xil_Out32((VDMA_BASEADDR + 0x030), 0x108B);// enable circular mode

Xil_Out32((VDMA_BASEADDR + 0x0AC), VIDEO_BASEADDR0); // start address

Xil_Out32((VDMA_BASEADDR + 0x0B0), VIDEO_BASEADDR1); // start address

Xil_Out32((VDMA_BASEADDR + 0x0B4), VIDEO_BASEADDR2); // start address

Xil_Out32((VDMA_BASEADDR + 0x0A8), (H_STRIDE*3)); // h offset (H_STRIDE* 3) bytes

Xil_Out32((VDMA_BASEADDR + 0x0A4), (H_ACTIVE*3)); // h size (H_ACTIVE * 3) bytes

Xil_Out32((VDMA_BASEADDR + 0x0A0), V_ACTIVE); // v size (V_ACTIVE)

/*****************從DDR讀數據設置**********************/

Xil_Out32((VDMA_BASEADDR + 0x000), 0x8B); // enable circular mode

Xil_Out32((VDMA_BASEADDR + 0x05c), VIDEO_BASEADDR0); // start address

Xil_Out32((VDMA_BASEADDR + 0x060), VIDEO_BASEADDR1); // start address

Xil_Out32((VDMA_BASEADDR + 0x064), VIDEO_BASEADDR2); // start address

Xil_Out32((VDMA_BASEADDR + 0x058), (H_STRIDE*3)); // h offset (H_STRIDE * 3) bytes

Xil_Out32((VDMA_BASEADDR + 0x054), (H_ACTIVE*3)); // h size (H_ACTIVE * 3) bytes

Xil_Out32((VDMA_BASEADDR + 0x050), V_ACTIVE); // v size (V_ACTIVE)

while (1) ;

}

1.4 小結

實際使用中,屏的分辨率和使用方法各有差異,但是使用的思路是類似的,這里給出的是RGB、HDMI接口屏的OV5640傳輸顯示,大家可以根據自己實際使用情況進行調整。

編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • lcd
    lcd
    +關注

    關注

    34

    文章

    4426

    瀏覽量

    167509
  • Zynq
    +關注

    關注

    10

    文章

    609

    瀏覽量

    47182
  • RGB接口
    +關注

    關注

    1

    文章

    5

    瀏覽量

    10361
收藏 人收藏

    評論

    相關推薦

    ElfBoard技術貼|ELF 1開發板適配攝像頭詳解

    ELF1及ELF1S開發板適配的OV5640攝像頭,集成了CMOS圖像傳感器,作為一款500萬像素級別的攝像頭,不僅能夠支持最高達2592x1944分辨率的QSXGA圖像輸出,幀率可達15fps
    的頭像 發表于 12-27 10:16 ?382次閱讀
    ElfBoard技術貼|ELF 1開發板適配攝像頭詳解

    《DNESP32S3使用指南-IDF版_V1.6》第三十五章 攝像頭實驗

    OV5640輸出給外部的圖像尺寸,也就是顯示LCD上面的圖像大小。輸出大小窗口與預縮放窗口比例不一致時,會進行縮放處理,在
    發表于 12-27 09:56

    飛凌嵌入式-ELFBOARD OV5640攝像頭講解第2期

    OV5640 輸出圖像格式如下圖3是OV5640輸出的圖像格式: 圖3 OV5640輸出圖像格式
    發表于 12-02 13:35

    飛凌嵌入式-ELFBOARD OV5640攝像頭簡介第二期

    OV5640 輸出圖像格式如下圖3是OV5640輸出的圖像格式: 圖3 OV5640輸出圖像格式
    發表于 11-25 08:53

    飛凌嵌入式-ELFBOARD-OV5640攝像頭簡介

    OV5640采用了CMOS圖像傳感器,也是我們ELF 1以及ELF 1S適配的攝像頭。OV5640為500w像素級攝像頭,最高支持2592x1944@15fps(QSXGA)【圖像有效
    發表于 11-18 11:14

    飛凌嵌入式-ELFBOARD-OV5640攝像頭簡介第一期

    OV5640采用了CMOS圖像傳感器,也是我們ELF 1以及ELF 1S適配的攝像頭。OV5640為500w像素級攝像頭,最高支持2592x1944@15fps(QSXGA)【圖像有效
    發表于 11-18 11:09

    ov5640圖像顯示花屏的原因?

    我使用stm32mp135faf7芯片,自己layout板子,使用ov5640攝像頭模塊,把圖像顯示顯示屏上,無法得到正常的camera圖像
    發表于 07-22 07:21

    在升級XIAO ESP32S3 Sense的攝像頭到OV5640無法自動對焦怎么處理?

    Youtube的大佬DroneBot Workshop在他的最新視頻里測試 OV5640 的時候提到升級后的攝像頭沒法自動對焦,是不是在代碼初始化的時候需要設置什么啊?貌似沒有文檔提到自動對焦具體
    發表于 06-28 12:33

    請問esp32 camera源碼的ov5640支持自動對焦嗎?

    如題,源碼支持OV5640,不知道是否支持自動對焦功能。
    發表于 06-18 06:52

    基于H743板子移植YOLOV5s做缺陷檢測可行嗎?

    大概的思路是用yolov5s的模型進行剪枝壓縮量化處理,然后通過cube-ai進行移植,搭配ov5640的攝像頭,想請教下這個方案可以行的通嗎?
    發表于 03-20 08:08

    stm32f103zet6驅動ov2640串口發送rgb565格式圖像到串口助手,為什么收不到數據?

    使用戰艦103例程驅動ov2640,例程源碼是采集圖像顯示lcd屏幕上,目前可以得到清晰穩定的圖像,于是便想將rgb565格式
    發表于 03-14 06:14

    cycx3_uvc_ov5640如何添加Method 1支持的靜態圖像捕獲功能?

    根據例程 cycx3_uvc_ov5640可以實現 Method 2拍照功能,我們的設備需要按鍵拍照功能,請問如何添加 Method 1 支持的靜態圖像捕獲功能,如何實現此功能?
    發表于 03-06 06:10

    ov5640給到cx3的數據是yuv格式的,請問cx3可以轉換成mjpg視頻流輸出嗎?

    你好,目前ov5640給到cx3的數據是yuv格式的,請問cx3可以轉換成mjpg視頻流輸出嗎?
    發表于 02-28 08:17

    CX3在使用OV5640的同時又使用GPIO功能,兩個函數無論先定義誰后面的一個就會報錯怎么解決?

    CX3 想在使用OV5640的同時又使用GPIO功能,這個兩個函數無論先定義誰,后面的一個就會報錯。請問是不是GPIO設置沖突問題,怎么解決? CyFxGpioInit (void
    發表于 02-26 08:28

    CX3 I2C啟動失敗的原因?怎么解決?

    ;quot; cycx3_uvc_ " ov5640,沒有進行任何修改。 編譯并下載到內存后,可以正常獲取相機圖像。 但是,將編譯后的圖像文件下載到 EEPROM 時,無論將 PMOD 設置
    發表于 02-23 06:53
    主站蜘蛛池模板: 欧美一级在线免费观看| 嫩草影院久久国产精品| 黄色短视频软件| 欧美性猛片xxxxⅹ免费| 日本不卡一区二区三区在线观看| 四虎精品影院在线观看视频| 久久久久久久国产精品电影| 人人做人人干| 久久99国产精品免费观看| 欧美成人精品一级高清片| 天天干夜夜爽| 美女扒开尿囗给男人玩的动图| 欧美资源在线观看| 色综合色综合色综合色综合网 | 国产区精品高清在线观看| 黄免费看| 韩日毛片| 在线视频观看免费| 婷婷涩五月| 有坂深雪在线| 视频亚洲一区| 精品噜噜噜噜久久久久久久久| 久久精品国产福利国产琪琪| 一色屋免费视频| 波多野结衣在线观看一区| 啪啪.com| 欧美日韩无| 福利视频99| 四虎影视网站| 天天爱夜夜爱| 一二三区乱码一区二区三区码| ww欧美| 性xxx中文视频| 精品噜噜噜噜久久久久久久久| 26uuu欧美性色| 人人草人人澡| 国产美女久久| 日韩h视频| 国产在视频线精品视频2021| 四虎影视院| 色天天综合色天天天天看大|