99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

3天內(nèi)不再提示

雙MIPI攝像頭圖像系統(tǒng)設計

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-11-15 10:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

雙MIPI攝像頭圖像系統(tǒng)設計

介紹

FPGA 的一大優(yōu)勢是我們可以實現(xiàn)并行圖像處理數(shù)據(jù)流。雖然任務比較重,但是我們不需要昂貴的 FPGA,我們可以使用成本低廉范圍中的一個,例如 Spartan 7 或 Artix 7。對于這個項目,將展示如何設計一個簡單的圖像處理應用程序,該應用程序平行處理兩個攝像頭。

本項目主要使用 Digilent PCAM 擴展板。PCAM 擴展板為最多四個 PCAMS 提供接口。所以只需要有FMC接口的開發(fā)板都可以完成本項目移植。

17780bac-647e-11ed-8abf-dac502259ad0.png

Vivado

為了讓系統(tǒng)快速啟動和運行,我們將從賽靈思的一個示例項目開始設計。要打開參考項目,我們需要首先創(chuàng)建一個針對自己開發(fā)板上 FPGA 的項目。

17c6d43a-647e-11ed-8abf-dac502259ad0.png

打開項目后,創(chuàng)建一個新的BD。

17fba408-647e-11ed-8abf-dac502259ad0.png

打開BD后,在BD中添加一個 MIPI CSI2 IP。

182de486-647e-11ed-8abf-dac502259ad0.png

要打開參考設計,右鍵單擊 CSI2 IP并選擇打開 IP 示例設計。

184b90a8-647e-11ed-8abf-dac502259ad0.png

我們將使用這個參考項目。首先要做的是移除 DSI 輸出路徑。這將為我們的圖像處理平臺釋放 FPGA 中的邏輯資源。

下一步是添加以下元素以創(chuàng)建第二條圖像處理通道。

  • CSI2 IP Block
  • Register Slices & concatenation
  • Sensor Demosaic
  • VDMA
  • AXI Switch

完成的設計應如下所示:

1875512c-647e-11ed-8abf-dac502259ad0.png

除了 CSI2 IP 中的設置外,第二個圖像處理通道與第一個相同。

1899e096-647e-11ed-8abf-dac502259ad0.png

原始 CSI2 IP 設置

18cf286e-647e-11ed-8abf-dac502259ad0.png

添加的 CSI2 IP 中的設置

18fc0cb2-647e-11ed-8abf-dac502259ad0.png

VDMA 內(nèi)存設置

1928b6a4-647e-11ed-8abf-dac502259ad0.png

Sensor Demosaic設置

1950e188-647e-11ed-8abf-dac502259ad0.png

AXI4 Stream Switch

196e88b4-647e-11ed-8abf-dac502259ad0.png

時鐘有不同的上行和下行時鐘

1999e3a6-647e-11ed-8abf-dac502259ad0.png19b50bea-647e-11ed-8abf-dac502259ad0.png

完成BD設計接下來就是針對硬件進行管腳約束。

一旦完成,我們就可以生成和構(gòu)建項目并導出 XSA 用于軟件開發(fā)。

該設備的利用率如下:

19e0d5ea-647e-11ed-8abf-dac502259ad0.png

軟件開發(fā)

導出 XSA 后,我們可以創(chuàng)建一個新的 Vitis 項目,其中包含 hello world 應用程序。

從 hello world 應用程序 BSP 設置中,我們可以導入 MIPI CSI2 示例項目。

1a039d82-647e-11ed-8abf-dac502259ad0.png

我們需要對這個項目進行一些更改。

首先是通過 IIC 與傳感器通信并設置傳感器。板上的 CSI2 Sensor與FPGA 的 I2C 并沒有直接連接。通過一個I2C BUFFER,與四個sensor連接,因為sensor的地址是一樣的。

這可以在 fucntion_prototpye.c 中提供的傳感器配置函數(shù)中進行更改。

所以我們在配置運行之前需要選擇多路復用器

externintSensorPreConfig(intpcam5c_mode){


u32Index,MaxIndex,MaxIndex1,MaxIndex2;
intStatus;
SensorIicAddr=SENSOR_ADDRESS;

u8SP701mux_addr=0x75;
u8SP701mux_ch=0x40;

u8PCAM_FMC_addr=0x70;
u8PCAM_FMC_ch=0x01;


Status=XIic_SetAddress(&IicAdapter,XII_ADDR_TO_SEND_TYPE,SP701mux_addr);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}

WriteBuffer[0]=SP701mux_ch;
Status=AdapterWriteData(1);
if(Status!=XST_SUCCESS){
printf("sp701muxfailed

");
returnXST_FAILURE;
}

Status=XIic_SetAddress(&IicAdapter,XII_ADDR_TO_SEND_TYPE,PCAM_FMC_addr);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}

WriteBuffer[0]=PCAM_FMC_ch;
Status=AdapterWriteData(1);
if(Status!=XST_SUCCESS){
printf("pcammuxfailed

");
returnXST_FAILURE;
}



Status=XIic_SetAddress(&IicAdapter,XII_ADDR_TO_SEND_TYPE,SensorIicAddr);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}


WritetoReg(0x31,0x03,0x11);
WritetoReg(0x30,0x08,0x82);

Sensor_Delay();


MaxIndex=length_sensor_pre;
for(Index=0;Index>8;
WriteBuffer[1]=sensor_pre[Index].Address;
WriteBuffer[2]=sensor_pre[Index].Data;

Sensor_Delay();

Status=AdapterWriteData(3);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}
}


WritetoReg(0x30,0x08,0x42);


MaxIndex1=length_pcam5c_mode1;

for(Index=0;Index>8;
WriteBuffer[1]=pcam5c_mode1[Index].Address;
WriteBuffer[2]=pcam5c_mode1[Index].Data;

Sensor_Delay();

Status=AdapterWriteData(3);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}
}


WritetoReg(0x30,0x08,0x02);
Sensor_Delay();
WritetoReg(0x30,0x08,0x42);


MaxIndex2=length_sensor_list;

for(Index=0;Index>8;
WriteBuffer[1]=sensor_list[Index].Address;
WriteBuffer[2]=sensor_list[Index].Data;

Sensor_Delay();

Status=AdapterWriteData(3);
if(Status!=XST_SUCCESS){
returnXST_FAILURE;
}
}


if(Status!=XST_SUCCESS){
xil_printf("Error:inWritingentrystatus=%x
",Status);
returnXST_FAILURE;
}

returnXST_SUCCESS;

}

由于我們添加了第二個 Demosaic,我們還需要更新其配置。

intdemosaic()
{
demosaic_Config=XV_demosaic_LookupConfig(DEMOSAIC_DEVICE_ID);
XV_demosaic_CfgInitialize(&InstancePtr,demosaic_Config,
demosaic_Config->BaseAddress);
XV_demosaic_Set_HwReg_width(&InstancePtr,1920);
XV_demosaic_Set_HwReg_height(&InstancePtr,1080);
XV_demosaic_Set_HwReg_bayer_phase(&InstancePtr,0x3);
XV_demosaic_EnableAutoRestart(&InstancePtr);
XV_demosaic_Start(&InstancePtr);

demosaic_Config1=XV_demosaic_LookupConfig(DEMOSAIC_DEVICE1_ID);
XV_demosaic_CfgInitialize(&InstancePtr1,demosaic_Config1,
demosaic_Config1->BaseAddress);
XV_demosaic_Set_HwReg_width(&InstancePtr1,1920);
XV_demosaic_Set_HwReg_height(&InstancePtr1,1080);
XV_demosaic_Set_HwReg_bayer_phase(&InstancePtr1,0x3);
XV_demosaic_EnableAutoRestart(&InstancePtr1);
XV_demosaic_Start(&InstancePtr1);
returnXST_SUCCESS;

}

最后階段是設置第二個 DMA,這里必須注意 DDR3地址管理以確保幀不會相互重疊。

intvdma_hdmi(){

InitVprocSs_CSC(1);

ResetVDMA();

RunVDMA(&AxiVdma,XPAR_AXI_VDMA_0_DEVICE_ID,HORIZONTAL_RESOLUTION,
VERTICAL_RESOLUTION,srcBuffer,FRAME_COUNTER,0);

RunVDMA(&AxiVdma1,XPAR_AXI_VDMA_1_DEVICE_ID,HORIZONTAL_RESOLUTION,
VERTICAL_RESOLUTION,srcBuffer1,FRAME_COUNTER,0);

returnXST_SUCCESS;

}

我們還需要注釋掉 DSI 和TPG等函數(shù)使用的任何代碼。

主代碼也需要更新,以便在串口命令下控制 AXI Switch。

/******************************************************************************
*Copyright(C)2018-2022Xilinx,Inc.Allrightsreserved.
*SPDX-License-Identifier:MIT
*******************************************************************************/

/*****************************************************************************/
/**
*
*@filexmipi_sp701_example.c
*
*
*MODIFICATIONHISTORY:
*
*VerWhoDateChanges
*---------------------------------------------------------------------
*X.XXXXYY/MM/DD
*1.00RHe19/09/20Initialrelease.
*
* ******************************************************************************/ /*****************************IncludeFiles*********************************/ #include"xparameters.h" #include"xiic.h" #include"xil_exception.h" #include"function_prototype.h" #include"pcam_5C_cfgs.h" #include"xstatus.h" #include"sleep.h" #include"xiic_l.h" #include"xil_io.h" #include"xil_types.h" //#include"xv_tpg.h" #include"xil_cache.h" #include"stdio.h" #include"xaxis_switch.h" /**************************ConstantDefinitions*****************************/ #definePAGE_SIZE16 #defineXAXIS_SWITCH_DEVICE_IDXPAR_AXIS_SWITCH_0_DEVICE_ID #defineIIC_BASE_ADDRESSXPAR_IIC_2_BASEADDR #defineEEPROM_TEST_START_ADDRESS0x80 #defineIIC_SWITCH_ADDRESS0x74 #defineIIC_ADV7511_ADDRESS0x39 //XV_tpg_Config*tpg1_Config;XV_tpg_Config*tpg1_Config; //XV_tpgtpg1; //XV_tpgtpg1; typedefu8AddressType; typedefstruct{ u8addr; u8data; u8init; }HDMI_REG; #defineNUMBER_OF_HDMI_REGS16 HDMI_REGhdmi_iic[NUMBER_OF_HDMI_REGS]={ {0x41,0x00,0x10}, {0x98,0x00,0x03}, {0x9A,0x00,0xE0}, {0x9C,0x00,0x30}, {0x9D,0x00,0x61}, {0xA2,0x00,0xA4}, {0xA3,0x00,0xA4}, {0xE0,0x00,0xD0}, {0xF9,0x00,0x00}, {0x18,0x00,0xE7}, {0x55,0x00,0x00}, {0x56,0x00,0x28}, {0xD6,0x00,0xC0}, {0xAF,0x00,0x4}, {0xF9,0x00,0x00} }; u8EepromIicAddr;/*VariableforstoringEepromIICaddress*/ intIicLowLevelDynEeprom(); u8EepromReadByte(AddressTypeAddress,u8*BufferPtr,u8ByteCount); u8EepromWriteByte(AddressTypeAddress,u8*BufferPtr,u8ByteCount); /****************i************TypeDefinitions*******************************/ typedefu8AddressType; /**************************VariableDefinitions*****************************/ externXIicIicFmc,IicAdapter;/*IICdevice.*/ //HDMIIIC intIicLowLevelDynEeprom() { u8BytesRead; u32StatusReg; u8Index; intStatus; u32i; EepromIicAddr=IIC_SWITCH_ADDRESS; Status=XIic_DynInit(IIC_BASE_ADDRESS); if(Status!=XST_SUCCESS){ returnXST_FAILURE; } xil_printf(" AfterXIic_DynInit "); while(((StatusReg=XIic_ReadReg(IIC_BASE_ADDRESS, XIIC_SR_REG_OFFSET))& (XIIC_SR_RX_FIFO_EMPTY_MASK| XIIC_SR_TX_FIFO_EMPTY_MASK| XIIC_SR_BUS_BUSY_MASK))!= (XIIC_SR_RX_FIFO_EMPTY_MASK| XIIC_SR_TX_FIFO_EMPTY_MASK)){ } EepromIicAddr=IIC_ADV7511_ADDRESS; for(Index=0;Indexfor(Index=0;Indexfor(i=0;i<1000;i++)?{};?//?IIC?delay ?if(BytesRead!=1){ returnXST_FAILURE; } } returnXST_SUCCESS; } /*****************************************************************************/ /** *ThisfunctionwritesabufferofbytestotheIICserialEEPROM. * *@paramBufferPtrcontainstheaddressofthedatatowrite. *@paramByteCountcontainsthenumberofbytesinthebuffertobe *written.Notethatthisshouldnotexceedthepagesizeofthe *EEPROMasnotedbytheconstantPAGE_SIZE. * *@returnThenumberofbyteswritten,avaluelessthanthatwhichwas *specifiedasaninputindicatesanerror. * *@noteone. * ******************************************************************************/ u8EepromWriteByte(AddressTypeAddress,u8*BufferPtr,u8ByteCount) { u8SentByteCount; u8WriteBuffer[sizeof(Address)+PAGE_SIZE]; u8Index; /* *Atemporarywritebuffermustbeusedwhichcontainsboththeaddress *andthedatatobewritten,puttheaddressinfirstbaseduponthe *sizeoftheaddressfortheEEPROM */ if(sizeof(AddressType)==2){ WriteBuffer[0]=(u8)(Address>>8); WriteBuffer[1]=(u8)(Address); }elseif(sizeof(AddressType)==1){ WriteBuffer[0]=(u8)(Address); EepromIicAddr|=(EEPROM_TEST_START_ADDRESS>>8)&0x7; } /* *Putthedatainthewritebufferfollowingtheaddress. */ for(Index=0;IndexreturnSentByteCount-sizeof(Address); } /****************************************************************************** * *ThisfunctionreadsanumberofbytesfromtheIICserialEEPROMintoa *specifiedbuffer. * *@paramBufferPtrcontainstheaddressofthedatabuffertobefilled. *@paramByteCountcontainsthenumberofbytesinthebuffertoberead. *Thisvalueisconstrainedbythepagesizeofthedevicesuch *thatupto64Kmaybereadinonecall. * *@returnThenumberofbytesread.Avaluelessthanthespecifiedinput *valueindicatesanerror. * *@noteNone. * ******************************************************************************/ u8EepromReadByte(AddressTypeAddress,u8*BufferPtr,u8ByteCount) { u8ReceivedByteCount; u8SentByteCount; u16StatusReg; /* *PositiontheReadpointertospecificlocationintheEEPROM. */ do{ StatusReg=XIic_ReadReg(IIC_BASE_ADDRESS,XIIC_SR_REG_OFFSET); if(!(StatusReg&XIIC_SR_BUS_BUSY_MASK)){ SentByteCount=XIic_DynSend(IIC_BASE_ADDRESS,EepromIicAddr, (u8*)&Address,sizeof(Address),XIIC_REPEATED_START); } }while(SentByteCount!=sizeof(Address)); /* *Receivethedata. */ ReceivedByteCount=XIic_DynRecv(IIC_BASE_ADDRESS,EepromIicAddr, BufferPtr,ByteCount); /* *ReturnthenumberofbytesreceivedfromtheEEPROM. */ returnReceivedByteCount; } /*****************************************************************************/ /** * *MainfunctiontoinitializeinteropsystemandreaddatafromAR0330sensor *@paramNone. * *@return *-XST_SUCCESSifMIPIInteropwassuccessful. *-XST_FAILUREifMIPIInteropfailed. * *@noteNone. * ******************************************************************************/ intmain(){ intStatus; intpcam5c_mode=1; intusr_entry,prev_sel; intdefault_input; intdsi_hdmi_select=0; Xil_ICacheDisable(); Xil_DCacheDisable(); XAxis_SwitchAxisSwitch; XAxis_Switch_Config*ASWConfig; ASWConfig=XAxisScr_LookupConfig(XAXIS_SWITCH_DEVICE_ID); XAxisScr_CfgInitialize(&AxisSwitch,ASWConfig,ASWConfig->BaseAddress); XAxisScr_RegUpdateDisable(&AxisSwitch); XAxisScr_MiPortDisableAll(&AxisSwitch); XAxisScr_MiPortEnable(&AxisSwitch,0,0); XAxisScr_RegUpdateEnable(&AxisSwitch); xil_printf(" ****************************************************** "); xil_printf(" **SP701ExampleDesign**"); Status=IicLowLevelDynEeprom(); if(Status!=XST_SUCCESS){ xil_printf("ADV7511IICprogrammingFAILED "); returnXST_FAILURE; } xil_printf("ADV7511IICprogrammingPASSED "); //InitializeFMC,AdapterandSensorIIC Status=InitIIC(); if(Status!=XST_SUCCESS){ xil_printf(" IICinitializationFailed "); returnXST_FAILURE; } xil_printf("IICInitializtionDone "); //InitializeFMCInterruptSystem Status=SetupFmcInterruptSystem(&IicFmc); if(Status!=XST_SUCCESS){ xil_printf(" InterruptSystemInitializationFailed "); returnXST_FAILURE; } xil_printf("FMCInterruptSystemInitializationDone "); //SetupIICInterruptHandlers SetupIICIntrHandlers(); xil_printf("IICInterruptHandlersSetupDone "); Status=SetFmcIICAddress(); if(Status!=XST_SUCCESS){ xil_printf(" FMCIICAddressSetupFailed "); returnXST_FAILURE; } xil_printf("FmcIICAddressSet "); //InitializeAdapterInterruptSystem Status=SetupAdapterInterruptSystem(&IicAdapter); if(Status!=XST_SUCCESS){ xil_printf(" InterruptSystemInitializationFailed "); returnXST_FAILURE; } xil_printf("AdapterInterruptSystemInitializationDone "); //SetAddressofAdapterIIC Status=SetAdapterIICAddress(); if(Status!=XST_SUCCESS){ xil_printf(" AdapterIICAddressSetupFailed "); returnXST_FAILURE; } xil_printf("AdapterIICAddressSet "); Status=InitializeCsiRxSs(); if(Status!=XST_SUCCESS){ xil_printf("CSIRxSsInitfailedstatus=%x. ",Status); returnXST_FAILURE; } dsi_hdmi_select=0; //usingdefault_inputvartocomparesameoptionselection default_input=1; //SetupDSI(); resetIp(); EnableCSI(); GPIOSelect(dsi_hdmi_select); Status=demosaic(); if(Status!=XST_SUCCESS){ xil_printf(" DemosaicFailed "); returnXST_FAILURE; } CamReset(); //PreconifgureSensor Status=SensorPreConfig(pcam5c_mode); if(Status!=XST_SUCCESS){ xil_printf(" SensorPreConfigurationFailed "); returnXST_FAILURE; } xil_printf(" Sensor1isPreConfigured "); WritetoReg(0x30,0x08,0x02); //PreconifgureSensor Status=SensorPreConfig1(pcam5c_mode); if(Status!=XST_SUCCESS){ xil_printf(" SensorPreConfigurationFailed "); returnXST_FAILURE; } xil_printf(" Sensor2isPreConfigured "); WritetoReg(0x30,0x08,0x02); Status=vdma_hdmi(); if(Status!=XST_SUCCESS){ xil_printf(" Vdma_hdmiFailed "); returnXST_FAILURE; } Status=vtpg_hdmi(); if(Status!=XST_SUCCESS){ xil_printf(" VtpgFailed "); returnXST_FAILURE; } Sensor_Delay(); xil_printf(" PipelineConfigurationCompleted "); while(1){ xil_printf(" PleaseSelectCamera(1or2)+ENTER:"); usr_entry=getchar(); charb; scanf("%c",&b);//ThiswilltakeENTERkey switch(usr_entry){ case'1': xil_printf(" SwitchingtoCamera1 "); XAxisScr_RegUpdateDisable(&AxisSwitch); XAxisScr_MiPortDisableAll(&AxisSwitch); XAxisScr_MiPortEnable(&AxisSwitch,0,0); XAxisScr_RegUpdateEnable(&AxisSwitch); break; case'2': xil_printf(" SwitchingtoCamera1 "); XAxisScr_RegUpdateDisable(&AxisSwitch); XAxisScr_MiPortDisableAll(&AxisSwitch); XAxisScr_MiPortEnable(&AxisSwitch,0,1); XAxisScr_RegUpdateEnable(&AxisSwitch); break; default: xil_printf(" Selectionisunavailable.Pleasetryagain "); break; } } returnXST_SUCCESS; }

測試

我們可以在連接到 HDMI 輸出時運行應用程序并在顯示器上看到圖像。

使用應用程序選擇圖像。

1a4ac248-647e-11ed-8abf-dac502259ad0.png1a783606-647e-11ed-8abf-dac502259ad0.png1ab90ffa-647e-11ed-8abf-dac502259ad0.png1b3be4de-647e-11ed-8abf-dac502259ad0.png

參考

https://www.hackster.io/

總結(jié)

該項目展示了一個MIPI攝像頭接入FPGA的簡單、快捷的方式,同時可以學習一下軟件的導入工程的方式,簡單的基于MicroBlaze系統(tǒng)要學會自己寫控制代碼,也許這就是新一代“FPGA打工人”需要掌握的一項新技術(shù)吧~(doge~不是)

示例工程

https://github.com/ATaylorCEngFIET/Hackster/tree/master

https://github.com/ATaylorCEngFIET/SP701_Imaging_Vivado


審核編輯 :李倩


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

    關(guān)注

    1645

    文章

    22036

    瀏覽量

    618102
  • 攝像頭
    +關(guān)注

    關(guān)注

    61

    文章

    4976

    瀏覽量

    98305
  • 圖像系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    7142

原文標題:示例工程

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    【Milk-V Duo S 開發(fā)板免費體驗】4 - OV5647 攝像頭攝像頭測試

    引言 以前使用Milk-V Duo的時候,覺得它的攝像頭支持比較弱,只能支持特定型號的攝像頭,還不好買。我有個學生甚至因為這個原因退出了集創(chuàng)賽。這次特意測試了一下它的攝像頭。 DuoS的攝像頭
    發(fā)表于 07-08 21:26

    如何在K230上移植mipi sensor,然后讀取mipi接口的raw數(shù)據(jù)?

    問題描述 我想在K230上移植一個 1通道 的 mipi 攝像頭,這個攝像頭輸出的不是幀圖像數(shù)據(jù),而是一個事件流,所以需要通過 mipi
    發(fā)表于 06-17 06:22

    Made with KiCad(126):Antmicro OV5640 攝像頭子板

    統(tǒng)一的 50 引腳 FFC 接口 用于驅(qū)動圖像傳感器的板載時鐘發(fā)生器 OV5640 攝像頭電路板與 Antmicro 開發(fā)的各種處理平臺電氣兼容。下面列出了其中幾種: 支持 NVIDIA
    發(fā)表于 05-12 18:13

    用于攝像頭模塊的 Open Top QFN 插槽Ironwood Electronics

    人工干預,提升攝像頭模塊生產(chǎn)線的測試效率??焖傺b載特性縮短單模塊測試時間,降低制造成本。信號完整性保障低接觸電阻與穩(wěn)定的電氣連接確保攝像頭模塊(如CMOS傳感器)的高清圖像傳輸質(zhì)量,避免信號干擾或丟失
    發(fā)表于 05-09 09:11

    RT1176是否有任何驅(qū)動程序示例可以通過并行攝像頭接口與8/10/12位攝像頭通信?

    對于RT1176,是否有任何驅(qū)動程序示例可以通過并行攝像頭接口與 8/10/12 位攝像頭通信?我在 SDK 中只看到一個 MIPI CSI2 示例。謝謝。
    發(fā)表于 03-28 06:54

    米爾瑞芯微RK3576實測輕松搞定三屏八攝像頭

    屏異顯: LVDS實現(xiàn)接10寸觸摸屏:輸出內(nèi)容為是通過開啟瀏覽器引擎訪問米爾網(wǎng)頁 MINI DP接27寸顯示器:輸出內(nèi)容為8路攝像頭捕捉圖像預覽 HDMI接15寸HDMI顯示器:輸出以基于QT開發(fā)
    發(fā)表于 01-17 11:33

    安防監(jiān)控攝像頭氣密性測試案例-連拓精密#攝像頭氣密檢測設備

    攝像頭
    連拓精密科技
    發(fā)布于 :2024年12月11日 15:00:21

    積水自動監(jiān)控攝像頭

    城市管理中的一項重要科技創(chuàng)新。積水監(jiān)測系統(tǒng)主要通過安裝在關(guān)鍵路段、排水口和易積水區(qū)域的攝像頭,對降雨和積水情況進行實時監(jiān)控。這些攝像頭配備了先進的圖像識別技術(shù),能夠
    的頭像 發(fā)表于 12-09 11:13 ?667次閱讀
    積水自動監(jiān)控<b class='flag-5'>攝像頭</b>

    攝像頭及紅外成像的基本工作原理

    本文介紹了攝像頭及紅外成像的基本工作原理,攝像頭可以將看到的圖像真實的呈現(xiàn)出來,所見即所得! 攝像頭如何工作? 攝像頭可以將看到的
    的頭像 發(fā)表于 11-25 09:28 ?2330次閱讀
    <b class='flag-5'>攝像頭</b>及紅外成像的基本工作原理

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

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

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

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

    “多維像素”超級攝像頭方案-(攝像頭+毫米波雷達組合)演示視頻

    攝像頭
    sensemi
    發(fā)布于 :2024年11月05日 09:44:11

    《DNK210使用指南 -CanMV版 V1.0》第二十六章 攝像頭圖像捕獲實驗

    第二十六章 攝像頭圖像捕獲實驗 本章將介紹CanMV下攝像頭的使用,能通過攝像頭實時地采集攝像頭捕獲到的
    發(fā)表于 10-23 10:05

    用于環(huán)視和CMS攝像頭系統(tǒng)的四通道攝像頭應用程序

    電子發(fā)燒友網(wǎng)站提供《用于環(huán)視和CMS攝像頭系統(tǒng)的四通道攝像頭應用程序.pdf》資料免費下載
    發(fā)表于 10-11 10:02 ?0次下載
    用于環(huán)視和CMS<b class='flag-5'>攝像頭</b><b class='flag-5'>系統(tǒng)</b>的四通道<b class='flag-5'>攝像頭</b>應用程序

    基于RK3588J的6路MIPI CSI視頻采集案例分享,多路視頻系統(tǒng)必看!

    等比例拼接形式采集畫面,且攝像頭幀率需統(tǒng)一,因此攝像頭分辨率幀率均使用1920x1080@30fps。 RK3588J的MIPI CSI介紹RK3588J的MIPI CSI接口介紹如下
    發(fā)表于 08-22 11:51