ascii码_AD7606数据采集板使用ASCII码传递BINARY数据

■ 问题提出


带有128KB缓存的AD7606模拟采集板[1] 后面更新了不带板内缓冲区的C51程序。采集板与计算机之间存在两种实时数据通道:

  • 通过USB-RS232转接串口,波特率为460800
  • 通过WiFi-UART模块,波特率为460800,但是实际传输速率要小于460800

为了能够利用 STC WiFi下载程序[2] 界面作为接受数据的缓冲界面,这样就需要能够利用ASCII码来高效传输二进制数据。

传统的方式通过C51的printf函数,将二进制转换成ASCII字符串通过串口发送出去,虽然这样有很强的可读性,但是存在着很大的转换效率低下:

  • 通常一个两字节(16bit)的二进制,最大需要6个字节(带有符号位)。比如有符号整数 0xd8ef : -10000。
  • 为了分割连续两个数字,其间还需增加一个空格(0x20)

因此,最大需要是踹死7个字节来传输一个16bit的数据。传输效率浪费了:

a2b72cad011efb4319c175da10b964b2.png

▲ ISP下载软件界面

■ Base64编码方式


在网页 What is Base64 Encoding and How does it work? | Base64Encoder[3] 给出了Base64编码的具体方式。它将连续三个字节(24bit)转换成四个6bit组,按照下面的表格找到对应的ASCII码。

3a06c1fc5c420ff9538e9ca190511da9.png

▲ Base64编码字符表格

这样的转换效率为

通过Base64的转换比普通的ASCI字符效率提高了:

在实际实现中,将原来的 “62”编码为$+$,修改为$*$,这样在下载程序界面可以避免换行的。整个显示是铺满Mem0界面。

■ C51编码程序和Python解码程序


1. C51的编码[4]

2. Python解码程序

■ 最大采样速率测试结果


经过测试,在 带有128KB缓存的AD7606模拟采集板[1] 上,对八个通道进行周期为1毫秒的采集,实际上传速率为 16kByte/s。再乘以编码增益,则实际上传速率为:21.3kByte/秒.

db2a39e16bc881de79ad55b30953df0d.gif

最大速率上载数据

a8648dcd5b5c1ef2ea5e063f8571ede5.png

▲ 通过AD7606采集板采集到的两个通道的信号波形

■ 结论


通过Base64编码,将原来的3个字节的数据编码成4个字节的ASCII字符,可以在适合ASCII存储显示的界面完成二进制数据的传递。这大大提高数据的传输效率。

参考资料

[1]

带有128KB缓存的AD7606模拟采集板: https://zhuoqing.blog.csdn.net/article/details/105980787

[2]

STC WiFi下载程序: https://zhuoqing.blog.csdn.net/article/details/105999836

[3]

What is Base64 Encoding and How does it work? | Base64Encoder: https://www.base64encoder.io/learn/

[4]

说明: C51工程文件:C51STCToolsAD7606Sample8G1KNoBufferSample8G1KNoBuffer.uvproj

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值