在ADC库函数的例子里面加了下面这个函数来实现在白纸上寻找黑线位置,CCD总是有问题找不到,劳烦各路大神帮忙看一下
u16 CCD_Find(void)
{
u16 ao_d[128];
u16 n,max,min,mid,find=0,bla=0;
GPIO_SetBits(GPIOB,GPIO_Pin_13);
delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
delay_us(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_13);
delay_us(50);
for(n=0;n<129;n++)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
delay_us(50);
}
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_13);
delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
delay_us(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_13);
delay_us(50);
for(n=0;n<128;n++)
{
ao_d[n]=Get_Adc_Average(ADC_Channel_1,10);
UART0_TX_Oscilloscope(ao_d[n]/10,0);
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
delay_us(50);
}
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
delay_us(50);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
max=0;
for(n=0;n<128;n++)
{
if(max<ao_d[n])
max=ao_d[n];
}
min=max;
for(n=0;n<128;n++)
{
if(min>ao_d[n])
min=ao_d[n];
}
mid=(max+min)/2;
for(n=128;n>0;n--)
{
if(ao_d[n-1]<mid)
{
find=n;
bla++;
}
}
bla=bla/2;
find=find+bla;
return find;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
额,又发现了一个问题,你是用Jlink下载吗,为什么你的程序我试了很多次Jlink都下不进去?
---------------------------------
对啊,就是战舰板子的Jlink,驱动就用的光盘里面的
---------------------------------
额,Jlink的问题解决了,你说的示波器是用串口示波器模拟吗?这样就能实现上位机的功能了是吗?还有,你的这个程序只是把CCD的AD采集了,提取黑线的话还是需要进一步计算的是吗?
---------------------------------
可以用串口显示工具查看,调用函数的返回值就是黑线中心位置
---------------------------------
你看的时候可以直接把输入ADC的线接到示波器上看起来就很直观了
一周热门 更多>