<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnHardware" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
說明
首先能夠采集OVXXXX系列的攝像頭數據並不是什么高端和困難的事情!
現在說一下怎么采集攝像頭數據(不帶FIFO)
1.攝像頭就是里面有很多采集點組成
如果說一個攝像頭是 240*320的
就是說橫着有240個采集點,豎着有320個采集點,共76800個采集點
2.以OV7670為例(假設采集240*320個像素點,模式輸出是RGB422)
3.3V和GNG -- 攝像頭供電
-------------------------------------------------------------------------
SDA和SCL為IIC配置攝像頭的引腳
可以設置攝像頭具體橫豎采集的像素點個數
可以設置采集模式,列如:RGB 422(就是說一個像素點用 8位數據表示 ,前面4位代表紅色,中間2位代表藍色,最后2位代表綠色)
列如: 采集的數據是 0xF0 (1111 0000) 就是純綠色
采集的數據是 0x00 (0000 1100) 就是純藍色
采集的數據是 0x00 (0000 1000) 就是不怎么藍的顏色
有可能有人會問這顏色識別的有點不好呀,分辨率有點低.其實有RGB565,但是呢為了方便敘述,咱先按照RGB422來講解.
-------------------------------------------------------------------------
VS (VSYNC) ----攝像頭工作的時候,這個引腳來一個高脈沖說明攝像頭開始采集一副圖像了(采集240*320個像素點)
注意哈,一般咱們把開始采集一副圖像就做開始采集一幀圖像
一般攝像頭采集是從左到右 從上到下采集,當然也可以使用IIC發送命令控制它采集的模式
-------------------------------------------------------------------------
HS (HREF) ---- 當這個引腳變為高電平,說明攝像頭正在輸出某一行像素點
假設是剛開始采集,那么這個引腳第一次變為高電平,說明攝像頭正在輸出第一行的像素點(從左到右 240個)
第一行的像素點采集完了,就會變為低電平,然后開始采集第二行,這個引腳又會主動變為高電平
然后就是這樣子循環.
-------------------------------------------------------------------------
PLK ---- 當這個引腳變為高電平,說明攝像頭正在輸出一個像素點的數據
假設是剛開始采集,那么這個引腳第一次變為來一個高脈沖,說明攝像頭正在輸出第一行的第一個像素點的數據
-------------------------------------------------------------------------
D0 - D7引腳 ---- 這個是輸出實際像素點采集的數據的引腳
配合上面的 PLK引腳,當PLK引腳來一個高脈沖以后,讀取D0 - D7引腳的值
便可獲取采集的像素點的數據.假設是剛開始采集采集的數據是 1111 0000 (0xF0)
就說明采集的第一行的第一個像素點的數據是 0xF0 純綠色
最后總結
假設是 240*320
VS (VSYNC) , HS (HREF) 和 PLK 引腳都接到單片機的中斷引腳上
D0 - D7 接到單片機的隨意8個引腳上
當檢測到 VS (VSYNC) 來了一個高脈沖說明開始采集一幀圖像了
然后檢測 HS (HREF) 引腳變為了高電平
說明開始采集一行圖像了,然后只要PLK引腳來一個高脈沖,說明攝像頭輸出了
一個像素點的數據,然后單片機讀取 D0 - D7 就獲取了數據了
然后通過 PLK 和 D0 - D7就可以獲取第一行的 240個數據
第一行輸出完成 HS (HREF) 引腳變為了低電平
開始輸出第二行的時候 HS (HREF) 引腳變為了高電平
然后只要PLK引腳來一個高脈沖,說明攝像頭輸出了
一個像素點的數據,然后單片機讀取 D0 - D7 就獲取了數據了
然后通過 PLK 和 D0 - D7就可以獲取第二行的 240個數據
然后就是循環采集320行數據.
難在哪里呢?
從上面的介紹可以看出好像挺簡單的
那難在哪里呢?
1.難點1
大部分人的基礎知識不夠,就是說連基本的IIC通信,中斷采集都不會
注意哈,我說的是會!!!
列如我問下: 等待芯片應答具體是啥?
發送非應答具體是啥??
2.難點2
攝像頭輸出的頻率實在是太快了
真的是太快了!!!!一般的單片機達不到這種速度
咱們只看 PCLK 的輸出速度哈
下圖中大概是 PCLK的高電平時間 大概是8ns
整個周期才16ns .....這是普通單片機做不到的
一般情況下就是72M主頻的STM32F103 執行中斷的時間也是約1us
即使是關閉所有的其它外設,中斷時間也只能達到 400ns
然后攝像頭模組加個FIFO芯片
FIFO的作用是啥?
沒有FIFO的時候,攝像頭輸出數據是主動的,時鍾也是攝像頭主動發出的,咱單片機只能接收判斷
FIFO芯片幫你緩存圖像數據.
讀取每一個字節的數據也是靠一個引腳產生時鍾上升沿,不過這個引腳是單片機自己產生.
現在就是說你想啥時候讀取數據就啥時候讀取....
最后關於程序
去淘寶搜索攝像頭,然后基本上都會給例程!!!