中级会员
- 积分
- 361
- 威望
- 177
- 贡献
- 116
- 兑换币
- 111
- 注册时间
- 2014-11-1
- 在线时间
- 34 小时
- 毕业学校
- 湖北工业大学
|
本人用的主控板是kl26,蓝宙提供的k60线性ccd自适应曝光测试程序不能直接使用,修改程序后采集回来的图像貌似出现严重锯齿,实在不知道问题出在哪???????? 急急急急急
以下是自己修改的程序
/********************************************* main.c ************************************/
#include "common.h"
#include "include.h"
#include "calculation.h"
uint8 send_data_cnt = 0;
uint8 TIME1flag_10ms=0;
uint8 Pixel[128];
uint8 i=0;
/************************************** calculation.c ***************************************/
#include "common.h"
#include "include.h"
#include "calculation.h"
//#include "isr.c"
uint8 *ImageData=0;
extern uint8 Pixel[128];
uint8 PixelAverageValue=0; //CCD1阈值
uint8 PixelAverageValue_old=0;
uint8 value1_max=0;
uint8 value1_min=0;
/*****************************************************
*函数名 :CCD_init
*函数功能 :CCD初始化
*时间 :2015_1_20
******************************************************/
void CCD_init()
{
gpio_init(PTA15,GPO,1);
gpio_init(PTA6, GPO,1);
adc_init(ADC0_SE11);
}
/*****************************************************
*函数名 :SartIntegration
*函数功能 :启动程序__时序操作
*实验模块 :蓝宙线性ccd三代
*时间 :2015_1_20
*******************************************************/
void StartIntegration()
{
SI_SetVal();
SampLingDelay();
CLK_SetVal();
SampLingDelay();
SI_ClrVal();
SampLingDelay();
CLK_ClrVal();
for(uint8 i=0;i<128;i++)
{
SampLingDelay();
SampLingDelay();
CLK_SetVal();
SampLingDelay();
SampLingDelay();
CLK_ClrVal();
}
SampLingDelay();
SampLingDelay();
CLK_SetVal();
SampLingDelay();
SampLingDelay();
CLK_ClrVal();
}
/*****************************************************
*函数名 :ImageCapture
*函数功能 :CCD采样程序
*参数说明 :*ImageData 采样数组
*时间 :2015_1_19
******************************************************/
void ImageCapture(uint8 *ImageData)
{
SI_SetVal();
SampLingDelay();
CLK_SetVal();
SampLingDelay();
SI_ClrVal();
SampLingDelay();
//Delay for the first pixel
for(uint8 i=0;i<20;i++)
{
SampLingDelay();
}
//SampLinging pixel 1
*ImageData=adc_once(ADC0_SE11,ADC_8bit);
ImageData++;
SampLingDelay();
CLK_ClrVal();
for(uint8 i=0;i<127;i++)
{
SampLingDelay();
CLK_SetVal();
SampLingDelay();
//SampLingDelay pixel 2-128
*ImageData = adc_once(ADC0_SE11,ADC_8bit);
ImageData++;
CLK_ClrVal();
}
SampLingDelay();
CLK_SetVal();
SampLingDelay();
CLK_ClrVal();
}
/***************************************************
*函数名 :Get_Dyn_Th
*函数功能 :计算动态阈值
*时间 :2015_1_20
*****************************************************/
void Get_Dyn_Th(void)
{
PixelAverageValue_old=PixelAverageValue;
//计算CCD1像素点最大值
value1_max=Pixel[0];
for(uint8 i=1;i<128;i++)
{
if(value1_max<=Pixel)
value1_max=Pixel;
}
//计算CCD1像素点最小值
value1_min=Pixel[0];
for(uint8 i=1;i<128;i++)
{
if(value1_min>=Pixel)
value1_min=Pixel;
}
//计算CCD1阈值
PixelAverageValue=(value1_max+value1_min)/2+40;
if(abs(value1_max-value1_min)<=110)
{
PixelAverageValue=PixelAverageValue_old;
}
}
/******************************************************
*函数名 :Bi_conversion
*函数功能 :赛道路面信息处理_软件二值化
*时间 :2015_1_20
*******************************************************/
void Bi_conversion(void)
{
Get_Dyn_Th();
for(uint8 i=0;i<128;i++)
{
if(Pixel>PixelAverageValue) //PixelAverageValue即为阈值
{
Pixel=250;
}
else
{
Pixel=0;
}
}
}
/*****************************************************
*函数名 :sendsex
*函数功能 :上位机识别语言
*时间 :2015_1_20
*******************************************************/
void SendHex(unsigned char hex)
{
unsigned char temp;
temp = hex >> 4;
if(temp < 10)
{
uart_putchar(UART0,temp + '0');
}
else
{
uart_putchar(UART0,temp - 10 + 'A');
}
temp = hex & 0x0F;
if(temp < 10)
{
uart_putchar(UART0,temp + '0');
}
else
{
uart_putchar(UART0,temp - 10 + 'A');
}
}
/**************************************************
*函数名 :SendImageData
*函数功能 :上位机通信协议
*时间 :2015_1-20
****************************************************/
void SendImageData(unsigned char * ImageData)
{
unsigned char i;
unsigned char crc = 0;
/* Send Data */
uart_putchar(UART0,'*');
uart_putchar(UART0,'L');
uart_putchar(UART0,'D');
SendHex(0);
SendHex(0);
SendHex(0);
SendHex(0);
for(i=0; i<128; i++)
{
SendHex(*ImageData++);
}
SendHex(crc);
uart_putchar(UART0,'#');
}
/*************************************************************************
* 蓝宙电子工作室
*
* 函数名称:SamplingDelay
* 功能说明:CCD延时程序 200ns
* 参数说明:
* 函数返回:无
* 修改时间:2012-10-20
* 备 注:
*************************************************************************/
void SampLingDelay(void)
{
volatile uint8 i ;
for(i=0;i<1;i++)
{
asm("nop");
asm("nop");
asm("nop");
}
}
void PIT1_IRQHandler(void)
{
PIT_Flag_Clear(PIT1); //清中断标志位
StartIntegration(); //曝光函数
static unsigned char TimerCnt10ms = 0;
TimerCnt10ms++;
}
void main()
{
uint8 *Pixel_pt;
DisableInterrupts; //禁止总中断
for(uint8 i=0;i<128;i++)
{
*Pixel_pt++=0;
}
Pixel_pt=Pixel;
/******************** 初始化 *************************/
//uart_init(UART0,115200);
//adc_init(ADC0_SE11);
CCD_init();
EnableInterrupts; //开总中断
while(1)
{
if(TIME1flag_10ms == 1)
{
TIME1flag_10ms = 0 ;
ImageCapture(Pixel); // Sampling CCD data
if(++send_data_cnt >= 5) // Send data to CCDView every 100ms
{
send_data_cnt = 0;
SendImageData(Pixel);
}
}
}
}
|
|