fly_zho
驱动小牛
驱动小牛
  • 注册日期2002-12-03
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1624回复:15

问一个数据采集卡的问题

楼主#
更多 发布于:2002-07-16 17:33
    俺有一块数据采集卡,AD采样一次就产生一个中断。俺在驱动程序里处理这个中断就是得到采样值。应用程序把采样值显示出来。
    可现在的问题是,AD采样的频率很快(即中断产生的频率很快),应用程序更本响应不过来。程序一运行,就好像停在那里,连用户的操作都不响应了。
    是不是在驱动里面,要先把得到的采样值存起来,再让应用程序来读。不知大家都是怎么做的,给点意见吧。
我是小龙女! 靠!你不信,不信拉倒! 反正我们恐龙家的女儿也不愁嫁...
trent
驱动老牛
驱动老牛
  • 注册日期2002-03-01
  • 最后登录2014-09-18
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望185点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-16 17:38
根据采样定理,不需要每个点都采吧。
我做过VxD处理中断可以实现10k左右的中断
我曾用ADC0832(记不清,可能会错),好像转换一次要70us左右,大概用EOC做中断源中断频率10几K,漏点数据应该也没什么影响吧
我不仅要金子,我还要点石成金的手指!
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-16 17:39
你的采样频率有多少
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
fly_zho
驱动小牛
驱动小牛
  • 注册日期2002-12-03
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-16 17:45
根据采样定理,不需要每个点都采吧。
我做过VxD处理中断可以实现10k左右的中断
我曾用ADC0832(记不清,可能会错),好像转换一次要70us左右,大概用EOC做中断源中断频率10几K,漏点数据应该也没什么影响吧

    你说的10K左右的中断,是用定时器产生的吗?
我是小龙女! 靠!你不信,不信拉倒! 反正我们恐龙家的女儿也不愁嫁...
fly_zho
驱动小牛
驱动小牛
  • 注册日期2002-12-03
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-16 17:47
你的采样频率有多少

    我用的就是AD的EOC,即完成一次采样就会产生中断。
我是小龙女! 靠!你不信,不信拉倒! 反正我们恐龙家的女儿也不愁嫁...
trent
驱动老牛
驱动老牛
  • 注册日期2002-03-01
  • 最后登录2014-09-18
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望185点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-16 17:54
我做过AD转换采集数据,用示波器可以测出大概的转换频率为十几K,我说的10K左右是指VxD能够处理频率这么多的中断,不是定时器产生的
我不仅要金子,我还要点石成金的手指!
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-16 17:56
如果你要求不丢数据

那么需要使用缓冲区

如果可以丢,那么就像你的方法就可以了
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
fly_zho
驱动小牛
驱动小牛
  • 注册日期2002-12-03
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-16 18:05
如果你要求不丢数据

那么需要使用缓冲区

如果可以丢,那么就像你的方法就可以了

    你所说的缓冲区,是指硬件上的存储空间还是指在驱动程序里所开出的一个大的buffer。
我是小龙女! 靠!你不信,不信拉倒! 反正我们恐龙家的女儿也不愁嫁...
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-16 18:08
硬件上有那当然最好,那叫fifo

软件上也可以开辟缓冲区
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
fly_zho
驱动小牛
驱动小牛
  • 注册日期2002-12-03
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-16 18:10
我做过AD转换采集数据,用示波器可以测出大概的转换频率为十几K,我说的10K左右是指VxD能够处理频率这么多的中断,不是定时器产生的

     既然转换频率为十几K,那vxd也就无法处理该转换完成所产生的中断,若不用定时器中断,程序何时知道该去做保存采样值的工作呢。
我是小龙女! 靠!你不信,不信拉倒! 反正我们恐龙家的女儿也不愁嫁...
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-16 18:13
你在应用程序中再开一个线程,专门用于接收采集卡中的数据,并开辟一个缓冲区,积累到一定程度或次数,再发送一个消息到主线程显示即可。
fly_zho
驱动小牛
驱动小牛
  • 注册日期2002-12-03
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-07-16 18:13
硬件上有那当然最好,那叫fifo

软件上也可以开辟缓冲区
 

    硬件上没有缓冲区,直接在驱动里开缓冲,开多大比较合适呢。有没有什么限制。
我是小龙女! 靠!你不信,不信拉倒! 反正我们恐龙家的女儿也不愁嫁...
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-07-16 18:15
开多大有你自己决定

以不丢数据为原则,也不一定非要在驱动中开辟

像blue说的那样做是正道
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
fly_zho
驱动小牛
驱动小牛
  • 注册日期2002-12-03
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-07-16 18:19
    太谢谢大家了,分我给了,可惜分准备的太少了。问一下zn还能补加分吗。
我是小龙女! 靠!你不信,不信拉倒! 反正我们恐龙家的女儿也不愁嫁...
westbb
驱动牛犊
驱动牛犊
  • 注册日期2002-07-15
  • 最后登录2002-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-07-18 21:14
FIRST YOU CAN SAVE DATA RECIEVING INTO A STACK,AND THEN DEADING IT。THEN YOU CAN SUCCESS!
zjg1603
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
15楼#
发布于:2002-07-18 21:44
你可以在应用程序中开辟一个线程,开辟一片很大的内存,采用DO_DIRECT_IO的方法调用驱动程序,让应用程序与驱动共享这块内存。在界面线程也可访问这块内存进行实时显示。
游客

返回顶部