65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 HIDAPI 的 USB 数字万用表驱动程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.84/5 (20投票s)

2012 年 1 月 4 日

CPOL

2分钟阅读

viewsIcon

63339

downloadIcon

4051

该驱动程序解码并显示使用 HIDAPI 函数访问的 Victor 86B USB 数字万用表数据包的 LCD 输出。

引言

Victor 86B 数字万用表价格便宜且广泛可用 (http://www.dealexcel.com/victor-vc86b-3-34-digital-multimeter_p1985.html),似乎非常适合业余项目。

不幸的是,但是没有 Victor 应用程序的源代码可用。http://www.china-victor.com/Files/Download/setup_86b_multi.rar 并且应用程序的一些功能,例如保存到 .csv 文件,无法正常工作。

虽然有一些其他适用于 Victor 86B 的软件可用,但它们要么是闭源的 (http://homepage.ntlworld.com/green_bean/coffee/roastlogger/dmmdetails.html),要么是不完整的且是用解释型语言编写的 (http://www.daveansell.co.uk/?q=node/44),因此决定从头开始构建一个驱动程序。

该驱动程序解码并显示使用 HIDAPI (http://www.signal11.us/oss/hidapi/) 函数访问的 Victor 86B USB 数字万用表 数据包的 LCD 输出。

该程序基于 HIDAPI (http://www.signal11.us/oss/hidapi/) 解码并显示 Victor 86B USB 数字万用表 的输出。

这些表格显示了如何反向工程 USB HID 数据包 (buf) 的解码,使用了台式电源和其他仪器来驱动 Victor86B,因为没有可用的 LCD 控制位的规范包含在 HID 数据包中。

背景

所有表格条目都采用十进制格式,表格包含带有和不带有前导小数点的代码。在大多数情况下,如果两个字符中的四个被设置,这意味着小数点处于活动状态。

LCD       digits           annunciators
        -   -   -   - 
       | | | | | | | | 
     -  -   -   -   -       M            Hz  
       | | | | | | | |   DC REL          V
        -   -   -   -    AC HOLD m oC u  A
          .   .   .
 buf  3,10 6,9 5,7 0,2   1  4    8 11 12 13

数字 4 解码

                    .
      LCD b3    b10  b10
      0   33    79   95   
      1   17    111  127
      2   65    15   31
      3   97    239  255
      4   81    175  191

数字 3 解码

                .   
    LCD b6      b9  b9
        0   47  69  85  
    1   31      101 117 
    2   79      5   21  
    3   111     229 245 
    4   95      165 181 
    5   239     37  53  
    6   239     69  85  
    7   31      229 245 
    8   111     69  85  
    9   111     37  53

数字 2 解码

                    .
    LCD b5      b7  b7
        0   54  84  100
    1   38      116 132
    2   86      20  36
    3   118     244 4
    4   102     180 196
    5   246     52  68
    6   246     84  100
    7   38      244 4
    8   118     84  100
    9   118     52  68

数字 1 解码

                .
    LCD b0  b2  b0
    0   75      29  91
    1   107     13  123
    2   11      61  27
    3   235     93  251
    4   171     77  187
    5   43      221 59
    6   75      221 91
    7   235     13  251
    8   75      93  91
    9   43      93  59

LCD 附加信息解码

//         M            Hz
//      DC REL          V  
//      AC HOLD m oC u  A  
// buf  1  4    8 11 12 13

if ((unsigned)(buf[ 1]& 16)) LCD_DC   = 1; // DC
if ((unsigned)buf[13]== 140) LCD_V    = 1; // Volts
if ((unsigned)buf[13]== 124) LCD_A    = 1; // Amps
if ((unsigned)buf[ 8]== 134) LCD_m    = 1; // m - milliamps
if ((unsigned)buf[12]== 126) LCD_u    = 1; // u - microamps
if ((unsigned)buf[ 4]== 177) LCD_REL  = 1; // REL
if ((unsigned)buf[ 4]== 241) LCD_HOLD = 1; // HOLD
if ((unsigned)buf[13]== 172) LCD_Hz   = 1; // Hz
if ((unsigned)buf[11]== 191) LCD_oC   = 1; // degrees C
if ((unsigned)buf[ 4]== 145) LCD_M    = 1; // Mega - ohms

Using the Code

提供了 MS 项目文件作为一个完整的示例。它可以轻松扩展为将结果转储到 .csv 文件等。

关注点

如果曾经有理由发布带有 USB 接口的仪器的开放规范,那就是现在。规范可以节省几天的时间来反向工程存储格式。幸运的是,HIDAPI 库节省了很多痛苦,否则需要对 USB 接口进行询问。

历史  

  • 版本 0.1。

更新 

对于那些无法找到 Victor 86B 的人,Marcelo Veiga Neves 在 https://github.com/mvneves/victor70c 上发布了一个 Victor 70C 的驱动程序。

86B/C 和 70C 的协议在这里被描述得非常简洁 http://sigrok.org/wiki/Victor_protocol

© . All rights reserved.