毕设之ov7670多点采集进度2-图像采集rgb565模式(逻辑分析仪ii2c的sda,sclk一直高电平,所以还未成功哈)

时间:2021-04-24 16:49:56

毕设之ov7670多点采集进度2-图像采集rgb565模式(逻辑分析仪ii2c的sda,sclk一直高电平,所以还未成功哈)

在配置ov7670寄存器后,前10帧图像将不稳定,为了能够达到更好地效果把,前10帧去掉了

//去掉前10帧
reg[3:0] Frame_Cont;
reg      Frame_valid;
always @(posedge CMOS_PCLK or negedge iRST_N)
begin
if(!iRST_N)
  begin
  Frame_Cont <= 0;
  Frame_valid <= 0;
  end
else if(Init_Done)
  begin
  if(CMOS_VSYNC == 1'b1 && Frame_valid == 1'b0) //vs上升沿即一帧图像(不懂的看ov的摄像头时序)
   begin
   if(Frame_Cont < 10)
    begin
    Frame_Cont <= Frame_Cont + 1'b1;
    Frame_valid <= 1'b0;
    end
    else
    begin
    Frame_Cont <= Frame_Cont;
    Frame_valid <= 1'b1;
    end
  end
  end 
  else
  begin
  Frame_Cont <= 0;
  Frame_valid <= 0;
  end
end 

毕设之ov7670多点采集进度2-图像采集rgb565模式(逻辑分析仪ii2c的sda,sclk一直高电平,所以还未成功哈)

从图上可以看出,第一个数据为一个像素的高8位,第二个数据为像素的低8位。在场信号低,行信号高时,开始捕获数据。把第二个数据拼接到第一个数据后面,实现完整的一个像素输出(RGB565)。

彬哥说ov7670的输入要接缓冲器,要用到sdram,但是我不会,所以想先试下不用sdram会产生什么效果。

//--------------------------------------
//采集rgb565数据流
reg byte_state;
reg[7:0] Pre_CMOS_iDATA;
always @(posedge CMOS_PCLK or negedge iRST_N)
begin
if(!iRST_N)
 begin
 byte_state <= 0;
 Pre_CMOS_iDATA <= 8'd0;
 CMOS_oDATA <= 16'd0;
 end
else
 begin
 if(Frame_valid==1'b1)
  begin
  if(~CMOS_VSYNC & CMOS_HREF)
   begin
    byte_state <= byte_state + 1'b1;
    case(byte_state)
    1'b0:Pre_CMOS_iDATA[7:0] <= CMOS_iDATA;
    1'b1:CMOS_oDATA <= {Pre_CMOS_iDATA[7:0],CMOS_iDATA};//rgb565
    endcase
   end
  else
   begin
   byte_state <= 0;
   Pre_CMOS_iDATA <= 8'd0;
   CMOS_oDATA <= CMOS_oDATA;
   end
  end
 else
  begin
  byte_state <= 0;
  Pre_CMOS_iDATA <= 8'd0;
  CMOS_oDATA <= CMOS_oDATA;
  end
 end
    
end    
endmodule   

想要了解更多的内容请去看彬哥的ov7670开发档案0.0。