1.前言
从事硬件工程师近二十年,最近在医院做完体检后,医生看过体检单后告知我:我目前的血糖偏高。医生说造成这种病情的原因大多都是因为生活饮食不规律,缺少运动导致。同时医生叮嘱道,血糖高一定要控制好,否则会引发各种并发症。
做了二十年牛马身体终于扛不住了,接下来的时间,我建立了规律的生活管理:每日三餐定时定量,减少碳水化合物摄入;每日进行60分钟的中等强度有氧运动。为实现血糖的动态监测,我还网购了一个家用的血糖仪,每天定时测量血糖数据。经过1个月的饮食控制和运动锻炼,血糖终于回归到了正常生理区间。
2.好奇
由于自己是一个硬件工程师,也是从事多年的仪器仪表行业,对这个每天用来测血糖的小仪器充满好奇,想看看这个“小家伙”的内部结构和电路,但是又怕拆开之后影响仪器的测量精度,犹豫了很久。后面还是耐不住好奇,心想:拆开看看,如果影响了测量精度就重新买一个。
说拆就拆,拆开之后直接惊掉了下巴,盯着电路板,看了好几遍,最终确认了一个事实:整个电路板只有一颗芯片。
对于测血糖来说,需要完成微小的生物电化学信号测量,需要驱动段码液晶屏显示,需要检测按键实现用户交互,还需要测量温度和电池电量数据,这么复杂的功能居然通过一个芯片就能完成,真是神奇。特别是测量微小的生物电化学信号,由于信号非常小,是不能直接使用芯片ADC进行测量的,通常是要搭建外部的信号放大电路。
于是我怀着忐忑的心情查阅了这个神奇的芯片资料,查到资料之后我便恍然大悟,原来这个芯片是 Holtek(合泰半导体)推出的一款专用于血糖仪的单片机BH67F2472,集成了LCD 驱动功能,集成了信号放大电路适用于血糖测量,整合度高、外部零件少,特别适用于小体积的LCD血糖仪。
3.下载
根据电路和芯片手册,我发现仪器的制造商居然把芯片程序的下载口预留出来了,一个念头如野草般疯长:倘若购置相应的下载器,是否就能将自写的代码,注入这个奇特的芯片中呢?
说干就干,我网购了一个Holtek的下载器,同时我又重新买了一个全新的血糖仪(用于我日常动态监测血糖),然后安装了下载器厂家提供的开发工具HT-IDE3000。
由于没有找到BH67F2472的工程源码,但是我到找了BH67F2495(型号越接近代码越兼容),基于BH67F2495代码我写了一个BH67F2472的简单的GPIO控制程序。万事俱备开始下载,连接、上电、点击烧录……期待的火花瞬间被错误提示浇灭。多次尝试失败后,联系下载器厂家,厂家建议我用先升级下载器固件。反复折腾几次后,终于将这个简单的GPIO控制程序下载到了芯片中。
熟悉开发工具和下载器后,发现这款芯片不支持仿真,下载器确实也只有下载功能!在这种情况下程序开发的难度将会大幅增加,就像航船失去了灯塔的指引在暗礁丛中摸索前行。但好在电路板上预留了UART接口,可以通过UART输出调试信息提高调试效率。
4.反推电路图
虽然下载了GPIO控制程序下载到了芯片中,但是由于电路的引脚和程序没有对应,所以并没有实现什么实际效果。为了真正控制电路板上的外设,打破程序与硬件“不匹配”的僵局,我拿出出万用表,打开BH67F2495芯片官方技术手册中的引脚说明。我先将万用表调到通断检测档,逐个追溯电路外设与芯片引脚的连接情况。经过好几个小时的细致排查,所有外设与芯片引脚的对应关系都标注完成,反推出了电路板的原理图。电路原理框图如下:
5.第一个程序设计
得到原理图后,就可以通过程序控制电路板上的设备。第一个程序力求最简单,于是设计GPIO控制程序,通过MCU的IO口PB6的电平驱动蜂鸣器,让蜂鸣器发出声音,值得注意的是蜂鸣器不像LED那样,通过固定的高电平来点亮LED,蜂鸣器需要一定频率(如1KHZ)的高低交替电平信号控制,电路框图如下:
程序代码通过控制PB6的电平,实现蜂鸣器的驱动,让蜂鸣器发出声音。关键代码如下:
完成程序设计后,编译、下载。屏息凝神,轻轻一点。刹那间,“滴——”的一声清响,宣告着程序与硬件,终于完成了第一次有效控制。
6.分享
完成GPIO这个最简单的程序设计后,觉得这个芯片非常有意思,后面又花了一段时间设计了7个demo程序,每个demo力求做到简单易懂。这7个demo程序分别是:ADC程序、按键程序、DAC程序、GPIO程序、LCD程序、定时器程序、串口通信程序。
同时也详细的核对了原理图,并整理成Altium Designer 格式,电路板的原理图如下:
感兴趣的小伙伴,希望获取资料的小伙伴,可以评论区留言或者私信作者。