阅读:1624回复:15
问一个数据采集卡的问题
俺有一块数据采集卡,AD采样一次就产生一个中断。俺在驱动程序里处理这个中断就是得到采样值。应用程序把采样值显示出来。
可现在的问题是,AD采样的频率很快(即中断产生的频率很快),应用程序更本响应不过来。程序一运行,就好像停在那里,连用户的操作都不响应了。 是不是在驱动里面,要先把得到的采样值存起来,再让应用程序来读。不知大家都是怎么做的,给点意见吧。 |
|
|
沙发#
发布于:2002-07-16 17:38
根据采样定理,不需要每个点都采吧。
我做过VxD处理中断可以实现10k左右的中断 我曾用ADC0832(记不清,可能会错),好像转换一次要70us左右,大概用EOC做中断源中断频率10几K,漏点数据应该也没什么影响吧 |
|
|
板凳#
发布于:2002-07-16 17:39
你的采样频率有多少
|
|
|
地板#
发布于:2002-07-16 17:45
根据采样定理,不需要每个点都采吧。 你说的10K左右的中断,是用定时器产生的吗? |
|
|
地下室#
发布于:2002-07-16 17:47
你的采样频率有多少 我用的就是AD的EOC,即完成一次采样就会产生中断。 |
|
|
5楼#
发布于:2002-07-16 17:54
我做过AD转换采集数据,用示波器可以测出大概的转换频率为十几K,我说的10K左右是指VxD能够处理频率这么多的中断,不是定时器产生的
|
|
|
6楼#
发布于:2002-07-16 17:56
如果你要求不丢数据
那么需要使用缓冲区 如果可以丢,那么就像你的方法就可以了 |
|
|
7楼#
发布于:2002-07-16 18:05
如果你要求不丢数据 你所说的缓冲区,是指硬件上的存储空间还是指在驱动程序里所开出的一个大的buffer。 |
|
|
8楼#
发布于:2002-07-16 18:08
硬件上有那当然最好,那叫fifo
软件上也可以开辟缓冲区 |
|
|
9楼#
发布于:2002-07-16 18:10
我做过AD转换采集数据,用示波器可以测出大概的转换频率为十几K,我说的10K左右是指VxD能够处理频率这么多的中断,不是定时器产生的 既然转换频率为十几K,那vxd也就无法处理该转换完成所产生的中断,若不用定时器中断,程序何时知道该去做保存采样值的工作呢。 |
|
|
10楼#
发布于:2002-07-16 18:13
你在应用程序中再开一个线程,专门用于接收采集卡中的数据,并开辟一个缓冲区,积累到一定程度或次数,再发送一个消息到主线程显示即可。
|
|
11楼#
发布于:2002-07-16 18:13
硬件上有那当然最好,那叫fifo 硬件上没有缓冲区,直接在驱动里开缓冲,开多大比较合适呢。有没有什么限制。 |
|
|
12楼#
发布于:2002-07-16 18:15
开多大有你自己决定
以不丢数据为原则,也不一定非要在驱动中开辟 像blue说的那样做是正道 |
|
|
13楼#
发布于:2002-07-16 18:19
太谢谢大家了,分我给了,可惜分准备的太少了。问一下zn还能补加分吗。
|
|
|
14楼#
发布于:2002-07-18 21:14
FIRST YOU CAN SAVE DATA RECIEVING INTO A STACK,AND THEN DEADING IT。THEN YOU CAN SUCCESS!
|
|
15楼#
发布于:2002-07-18 21:44
你可以在应用程序中开辟一个线程,开辟一片很大的内存,采用DO_DIRECT_IO的方法调用驱动程序,让应用程序与驱动共享这块内存。在界面线程也可访问这块内存进行实时显示。
|
|