先介紹一下CCD模塊:該模塊有幾個重要的針腳
VCC:接電源正極 3.3v-5v
GND:接地
CLK:時鐘信號線
SI:邏輯信號線
AO:模擬信號輸出
1. 接法
一般VCC和GND都是直接接在單片機的接口上,如果獨立電源供電的話,注意要共地。AO接AD轉換接口。
2. 用法
使用方法如上圖所示
3. 代碼(這里使用arduino)
digitalWrite(CCD_SI,HIGH);//SI拉高電平
digitalWrite(CCD_CLK,HIGH);//時鐘高電平
digitalWrite(CCD_SI,LOW);//SI低電平
digitalWrite(CCD_CLK,LOW);//時鐘低電平
for(i=0;i<128;i++)
{
digitalWrite(CCD_CLK,HIGH);
digitalWrite(CCD_CLK,LOW);
}//從這里結束曝光
delayMicroseconds(exp_time);//曝光時間
digitalWrite(CCD_SI,HIGH);
digitalWrite(CCD_CLK,HIGH);
digitalWrite(CCD_SI,LOW);
piexl[0]=analogRead(A0);//AD,注意這個函數的返回值是0-1024的,所以至少要用10bit的大小才不會導致溢出。
if(piexl[0]==255) piexl[i]=254;
digitalWrite(CCD_CLK,LOW);
for(i=1;i<128;i++)
{
digitalWrite(CCD_CLK,HIGH);
piexl[i]=analogRead(A0);
digitalWrite(CCD_CLK,LOW);
}
digitalWrite(CCD_CLK,HIGH);
digitalWrite(CCD_CLK,LOW);
AD,注意這個函數的返回值是0-1024的,所以至少要用10bit的大小才不會導致溢出。
if(piexl[0]==255) piexl[i]=254;
digitalWrite(CCD_CLK,LOW);
for(i=1;i<128;i++)
{
digitalWrite(CCD_CLK,HIGH);
piexl[i]=analogRead(A0);
digitalWrite(CCD_CLK,LOW);
}
digitalWrite(CCD_CLK,HIGH);
digitalWrite(CCD_CLK,LOW);
4. 代碼介紹
每次使用ccd掃描數據的時候要進行兩次時序操作,數據輸出在第二次。
第一次時序操作是用來初始化端口的電平,兩次電平操作中間的是曝光時間設置。
輸出結果一般轉換成8比特位的數值,對應0-255的灰度值,白色是255,黑色是0
5. 常見問題解決
輸出不了數據:檢查線路是否錯誤。檢查電平操作是否正確。檢查是否有進行兩次電平操作。
6. 數據查看
一般是使用串口將數據發送到上位機查看.
有現成的上位機軟件也可以自己去了解一下串口編程的api,自己編寫一個上位機。
|