使用 HIDAPI 的 USB 数字万用表驱动程序
该驱动程序解码并显示使用 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。