飛思卡爾智慧型車攝像頭上位機

2021-06-27 00:28:37 字數 3196 閱讀 7532

飛思卡爾智慧型車攝像頭上位機採集程式

玲聲依舊美

基於飛思卡爾xs128微控制器 攝像頭採集測試程式

ov7620採集程式說明:攝像頭資料口接pa0-pa7;行中斷接pt0,場中斷接pt1;

s0為微控制器rxd,接到串列埠模組的txd中,s1為微控制器txd,接到微控制器rxd中

波特率預設為9600,使用者可自行修改波特率,影象大小為64*50,幀頭幀尾都為0x01

#include 

#include "derivative.h" 

#define uint unsigned int

#define uchar unsigned char

#define rowmax 

50 //影象行數

#define columnmax 

64 //影象列數

uchar hang_count;

uint hang,lie;

unsigned char imagedata[rowmax][columnmax]; 

//影象資料陣列

void delay(uint tt) 

void crg_init(void) 

//時鐘初始化函式

void io_init(void) 

void ect_init()

void init_sci(void)

void sci_send_byte(unsigned char data)

void sci_send_image_string(unsigned char *putchar, uint num)

} void main(void)

}#pragma code_seg non_banked

void interrupt 8  port0_interrupt()

hang_count++;

} hang++; 

//行計數器加 1

if(hang_count==rowmax) }

#pragma code_seg non_banked 

interrupt 9 void pt1_interrupt(void)

智慧型車上位機全功能版

-------攝像頭組協議說明文件

一、傳送影象的協議:

要想上位機能夠正確顯示下位機傳送過來的灰度影象資料就必須注意以下幾點:

a.  首先要確保上下位機設定的波特率要一致。否則接收到的資料全部是亂的,此時上位機的狀態是:接收到位元組數,但顯示全部丟失。

b.  設定好上位機的影象大小,要保證跟下位機傳送的影象大小一致。

影象寬度,即影象陣列的總列數,影象高度,即影象陣列的總行數。

如果上位機的影象大小跟下位機傳送的不一致,那麼此時上位機的狀態將是:

c.  傳送影象資料之前請先傳送乙個幀頭0x01到串列埠。

d.  傳送影象資料的過程中,請你多加乙個判斷語句,如果當前要傳送的影象資料跟幀頭0x01一樣,請你該發另乙個數比如0x02。(我們最好要這麼樣做,因為幀頭是告訴上位機一幀影象的接收開始,當上位機接收到0x01時就要從0開始計數,當計數到一幅影象的大小後,如果再接收到乙個0x01,就表明這幅影象完整接收了,中途中沒有資料的丟失,這時候上位機才把這幅正確的影象顯示出來。否則,當上位機的計數尚未等於一幅影象的全部位元組數又接收到乙個0x01,就認為這幅影象是已經在傳輸中有丟失了。此時上位機的處理是直接丟棄這幅不完整的影象,也許你可能要說幹嘛要全部丟掉呢,把接收不足的位元組數用0或者1任意乙個位元組來填充不就好了嗎。想法固然是好的,但是這是不可行的,因為我們不知道這幅影象資料到底丟失哪一部分,我們無法對這部分進行填充處理,假如我們填充的地方錯誤,那麼影象將混亂不清,這時候對你的除錯將帶來無限的麻煩,不知道到底**出了問題的。)

e.  在一幅影象資料全部傳送完的後面再發乙個0x01到串列埠,因為上位機接收的一幅影象的判斷是前乙個0x01後乙個0x01中間長度恰好是一幅影象大小。如果在一幅影象資料全部傳送完的後面不傳送0x01時,如果是連續傳送過程,那麼你將丟失最後的一幅影象,如果你只發一幅影象,那麼上位機將顯示不出任何影象。

傳送灰度影象經典樣例:

比如說你採集的影象尺寸為80*30,imagedata[height][width]為二維陣列存放影象,sendbyte(c)為傳送c到串列埠的函式

首先我們先開啟上位機,設定好上位機的影象大小為80*30.

然後下位機的傳送**如下:

#define width 80 //影象寬度,即陣列列數

#define height 30 //影象高度,即陣列行數

unsigned char imagedata[height][width];

/傳送一幀影象的函式裡面要寫的**開始

//先傳送幀頭,傳送0x01到串列埠

sendbyte(0x01);

//傳送影象資料

for(i=0;i

sendbyte(imagedata[j]); }}

//最好在一幀影象資料發完後也要發乙個幀頭標誌.

//避免只發一幀影象的時候上位機檢測不到下乙個幀頭而顯示不出影象

//的尷尬局面。

sendbyte(0x01);

//傳送

0x01

到串列埠/

//傳送一幀影象的函式裡面要寫的**結束//

二、只發影象中心線的協議:

a、問題描述:

我們傳送的完整一幅影象資料的時候,由於資料量大,只能在前期除錯和研究影象處理的時候有用處,但是當我們到後期除錯的時候,我們就沒有必要傳送完整的一幅影象資料了。我們只想看看我們對影象進行的中心線提取到底穩定情況如何。所以我們只要傳送提取到的中心線資料就行了。因為中心線資料很少,所以可以讓車邊跑邊傳送中心線回來。

b、操作第一步:把上位機介面上的只接收中心線選項打勾。

c、設定好上位機的影象大小跟下位機的影象大小一致。(說明:

因為上位機接收到一條完整的中心線後需要還原出這條中心線在這幅影象的位置。如果沒有設定,那麼上位機還原出來的中心線位置就不是原圖實際的中心線位置了。)

c、下位機傳送的資料格式如下:

首先先發兩個位元組0xff 0xff的幀頭資料

然後再傳送中心線陣列:假如你的影象陣列大小為:100列,50行。

那麼你提取到的中心線將是乙個50個位元組大小的陣列。

你只要再傳送這50個大小的中心線陣列資料就可以了。

此時整個傳送資料有:0xff  0xff  +  乙個中心線陣列。

飛思卡爾智慧型車準備

第乙個兩周的計畫 1.eda 電子設計自動化 的學習 掌握 vhdl硬體描述語言的基礎,學習語法規範並進行程式設計,做好功能和時序 為進一步學習cpld 和 fpga的燒錄程式 製作電路板做好基礎。例程 多路選擇器的vhdl描述 暫存器描述及其vhdl語言現象 一位二進位制全加器的vhdl描述等。2...

飛思卡爾智慧型車準備篇

現在給大家說說如何準備這個比賽吧,當然我可能說的主要是攝像頭組的,因為我也跟大家說過我參加的是攝像頭組,不過準備的大致流程我覺得應該都是差不多的,可能有些細節方面的不太一樣。首先,我們要組隊,一般乙個組別由三個人組成,每屆的人數規定可能有變化,這三個人最好要有所分工,這樣可以減輕每個人的工作量,為以...

要做飛思卡爾智慧型車要學哪些知識?

至於學習!首先要看你主攻哪方面了!一般分硬體與軟體!硬體方面,也就是電路設計,關於比賽用到的電路不是特別複雜,需要具備一定的電路基礎,模擬電路,數位電路和一些eda設計的能力,主要還是多看前人的東西,之後再在這些基礎上改進創新。無論你主攻哪方面,以下基本電路知識是要知道的。所以現在開始 電路分析 數...