日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OV7670读操作

發(fā)布時間:2023/12/29 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OV7670读操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇文章主要介紹一下verilog讀ov7670的出廠序列號

讀時序共分為五個部分

  • 首先發(fā)送start,然后發(fā)送OV7670的器件地址,ov6070的ID是0x42,0x42+一位響應(yīng)位
  • 發(fā)送ov7670的寄存器地址,這里可以讀取它的廠商識別號 ,比如1c ?發(fā)送八位寄存器+接受一位響應(yīng)位
  • ov7670的SCCB時序不同與iic時序,在發(fā)送完第一個部分需要比iic時序多發(fā)送一個stop,那就是stop+start
  • 再次發(fā)送ov7670的器件地址,這次需要指定讀寫,第八位是讀寫控制位,0是寫,1是讀,即0x43+響應(yīng)位
  • 最后就是接受數(shù)據(jù),需要注意的是最后不是響應(yīng)位,而是NA,發(fā)送高電平即可,最后跟一個結(jié)束stop

ov7670管腳

  • pwdn是睡眠模式,0工作,1睡眠
  • rst_n ?復(fù)位 ? 低電平復(fù)位 高電平工作
  • XCLK系統(tǒng)時鐘輸入 官方手冊推薦使用24M
  • SCl IIC時鐘引腳 ?我用的是100K
  • SDA IIC數(shù)據(jù)輸入   

簡單的列一下程序

  • 100K時鐘產(chǎn)生

IIC時鐘對時鐘要求不嚴(yán)格,所以采用進(jìn)位的方法進(jìn)行分頻,所產(chǎn)生的時鐘頻率略小于100K,

div_en是使能信號,如果采用使能時鐘可能會出現(xiàn)問題。

  • 時序采用狀態(tài)機(jī)的方法一步步執(zhí)行,相對比較直觀

  • 響應(yīng)標(biāo)志位,因為數(shù)據(jù)位是雙向口,需要在響應(yīng)時間設(shè)置位輸入

  • 狀態(tài)機(jī)
//-------------------------------- //Funtion : sda_regalways @(posedge clk or negedge rst_n) beginif(!rst_n)beginiic_clk1 <= 1'd1;sda_reg <= 1'd1;riic_data <= 1'd0;endelse if(dir == 1'b1) //readcase(time_cnt)//idle6'd0 : beginiic_clk1 <= 1'd1;sda_reg <= 1'd1; end//start6'd1 :beginiic_clk1 <= 1'd1;sda_reg <= 1'd0;end6'd2 :beginiic_clk1 <= 1'd0;sda_reg <= 1'd0;end//ID_addr6'd3 : sda_reg <= wdata_reg[23];6'd4 : sda_reg <= wdata_reg[22];6'd5 : sda_reg <= wdata_reg[21];6'd6 : sda_reg <= wdata_reg[20];6'd7 : sda_reg <= wdata_reg[19];6'd8 : sda_reg <= wdata_reg[18];6'd9 : sda_reg <= wdata_reg[17];6'd10: sda_reg <= wdata_reg[16]; //ack6'd11: iic_clk1<= 1'd0;6'd12: ;6'd13: iic_clk1<= 1'd0;//sub_addr6'd14: sda_reg <= wdata_reg[15];6'd15: sda_reg <= wdata_reg[14];6'd16: sda_reg <= wdata_reg[13];6'd17: sda_reg <= wdata_reg[12];6'd18: sda_reg <= wdata_reg[11];6'd19: sda_reg <= wdata_reg[10];6'd20: sda_reg <= wdata_reg[9];6'd21: sda_reg <= wdata_reg[8]; //ack6'd22: iic_clk1<= 1'd0;6'd23: ;6'd24: iic_clk1<= 1'd0;//stop6'd25:beginiic_clk1 <= 1'd1;sda_reg <= 1'd0;end6'd26:beginiic_clk1 <= 1'd1;sda_reg <= 1'd1;end//start6'd27:beginiic_clk1 <= 1'd1;sda_reg <= 1'd1;end6'd28:beginiic_clk1 <= 1'd1;sda_reg <= 1'd0;end//ID_addr6'd29: sda_reg <= wdata_reg[7];6'd30: sda_reg <= wdata_reg[6];6'd31: sda_reg <= wdata_reg[5];6'd32: sda_reg <= wdata_reg[4];6'd33: sda_reg <= wdata_reg[3];6'd34: sda_reg <= wdata_reg[2];6'd35: sda_reg <= wdata_reg[1];6'd36: sda_reg <= wdata_reg[0]; //ack6'd37: iic_clk1<= 1'd0;6'd38: ;6'd39: iic_clk1<= 1'd0;//read_data6'd40: riic_data[7] <= iic_sda;6'd41: riic_data[6] <= iic_sda;6'd42: riic_data[5] <= iic_sda;6'd43: riic_data[4] <= iic_sda;6'd44: riic_data[3] <= iic_sda;6'd45: riic_data[2] <= iic_sda;6'd46: riic_data[1] <= iic_sda;6'd47: riic_data[0] <= iic_sda;//nack6'd48: sda_reg <= 1'd1;//stop6'd49:beginiic_clk1 <= 1'd1;sda_reg <= 1'd0;end6'd50:beginiic_clk1 <= 1'd1;sda_reg <= 1'd1;enddefault :beginiic_clk1 <= 1'd1;sda_reg <= 1'd1;endendcase end
  • iic_clk和iic_sda

? sda是雙向端口,在輸入的1時候設(shè)置為高阻態(tài)

?dir是讀寫方向控制段,這里只是讀所以置一

  • sigtab抓取數(shù)據(jù)

?

轉(zhuǎn)載于:https://www.cnblogs.com/bixiaopengblog/p/7527942.html

總結(jié)

以上是生活随笔為你收集整理的OV7670读操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。