AVR的啊,这个咱貌似懂,用的就是AVR。估计你学的应该是光电子吧,因为你用到CCD驱动,虽然我也是光电子的,但是CCD驱动倒是没做过。
要想让mega16输出脉冲,可以采用单片机的T0,T1,T2来输出PWM,T1是16位的,用着稍微麻烦,可以用T0来做。你可以让T0端口作为PWM输出(指定端口,不是每个IO都行),为了更好的驱动,在输出上加一个三极管作为前级驱动,可以用8050。程序上要做的就是,PWM的频率设定,这个跟定时器的分频有关,占空比设置跟定时器的初始、匹配值有关。给你个小程序你看看,在上面弯友修改就行。//包含所需头文件
#include <ioM16v.h>
#include <macros.h>
/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
//端口初始化
void port_init(void)
{
PORTA = 0x00
DDRA = 0x00
PORTB = 0x00
DDRB = 0x00
PORTC = 0x00
DDRC = 0x00
PORTD = 0x00
DDRD = 0x00
}
//定时器T0初始化
void timer0_init(void)
{
TCCR0 = 0x00//停止定时器
TCNT0 = 0x00//初始值
OCR0 = 0x01//匹配值,该值改变后可以改消族变占空比,值越大,占空比越高,你也可以通过在主函数中改变此值来改变PWM占空比。
TIMSK |= 0x00//中断允许
TCCR0 = 0x61//启动定时器,分频设置在这里
}
void init_devices(void)
{
CLI() //禁止所有中断
MCUCR = 0x00
MCUCSR = 0x80//禁止JTAG
GICR = 0x00
port_init()
timer0_init()
SEI()//开全局中断
}
//主函数埋桥槐
void main(void)
{
init_devices() //初始化服务函数
while(1)
{
NOP() //换成你的程序
}
}
CCD积分时间就是曝光时间,就相当于普通胶片相机的快门打开~关闭的时间,积分时间越长,快门打开时间越长,进入相机到CCD表面的光线越多,拍出来的图像越亮,亮到一定程度后,图像有部分镇和或者全白,称为饱和或者过饱和。积分时间越短,图像越厅滑暗。
应该根据环境光强,合理的选择和设置积分时扮旅腊间。
驱动频率就是指给CCD提供的驱动信号,使CCD像素中的电荷被读出的速度。
或者称为点象素时钟率。
驱动频率/像素时钟率越高,CCD像素电荷被读出来的速度越快,一般情况下,帧率(每秒读出多少幅图像)越高。
帧率越高,画面会更连贯(人眼感知画面连贯最低帧率约为25帧)。
例如,做过一个640*480的ICX618ALA CCD的驱动,驱动频率在16MHz的时候,逐帧输出的帧率约40帧。
如果将驱动频率降到12MHz,帧率也会降低到约25帧左右。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)