您的位置 首页 > 数码极客

int0如何调试中断服务子程序

来坛子3年多了, 发帖较少, 主要看大家的帖子。这帖算是我第一次的大作了,花了几个晚上整理编辑, 希望能通过此3个篇章的描述把经验分享给坛友们

图片不多,为了讲清楚,文字描述比较多,大家千万不要喷啊!

第一篇功能扩展展示

目前市面上很多低档国产表都是用的DTM0660/HY12P66/DM1106单片机方案, 如胜利的VC890D/C+, VC9801A+,VC9804A+,VC81D, VC97, VC921 优利德的UT890D/C+, UT210D/E, 华普HP890CN, 等等。 典型的特点是电路板上有一个8脚的I2C接口的EEPROM (24C02/24C04/24C08), 很多配置信息在里面,这给坛友们带来无限刷机改造的乐趣。坛里最多的就是改5999/9999显示,自动关机时间和背光时间。

拜读了各位大神们的帖子之后,把我的一块胜利VC890D也拿来玩了一把, 把该有的功能都加上。

1,增加VC890C+支持的摄氏温度和华氏温度功能

2,增加VC9801A+支持的50Hz~5KHz方波输出功能

3,增加VC9804A+支持的频率占空比功能

4,调整档位和相关量程(单档双功能或量程)

下面来看看增加完后的效果展示

1,温度功能 (未校准和验证)

2,方波输出功能 (已验证OK)

支持50Hz, 100Hz,200Hz, 300Hz, 400Hz, 500Hz, 600Hz, 700Hz, 800Hz, 900Hz, 1000Hz, 2000Hz, 3000Hz,4000Hz, 5000Hz.

波形不是很好

Vpp在8.6mV左右

3,频率占空比功能 (市电检验OK, 其他频率未验证)

50Hz频率, 50%占空比

93.93KHz频率, 57.6%占空比

146.8KHz频率, 61.1%占空比

4,档位量程调整

档位量程改成以下

看看单档双量程 (2M Ohm档 变10M/100M双量程,通过"Hold"键切换)

第二篇功能扩展说明

在详细说明之前,提醒一下大家,以下内容有风险,改表请谨慎

第一节功能码设定区

参考了坛友VC921增加电流档的帖子

以及察看DTM0660的文档,知道了EEPROM中地址”80H~BFH”为功能码设定区

这里80H~BFH为十六进制地址, 共计有16x4=64个有效功能设定地址

以下以本机VC890D举例

第二节档位编码

1.DTM0660文档中的说明 (适用自动档表)

用到PT2.7 四个I/O口实现4位(比特)编码,可实现16个有效档位编码

对应刀盘编码点位MEA4/MEA3/MEA2/MEA1

2.以下以本机VC890D举例 (适用手动档表)

可以看到, 由于是手动档表,档位数远远大于16个档位(本机有28个档位), 所以它用到了 PT3.7/PT2.7/PT3.5 共6个I/O口实现, 其中一个I/O口定义电源开关(OFF档), 另外5个I/O口实现5位(比特)编码,可实现32个有效档位编码

对应刀盘编码点位 M5/M4/M3/M2/M1/M0

第三节功能码设定区与档位编码的对应

1.DTM0660文档中的说明 (适用自动档表)

16个档位编码刚好对应功能码区80H~BFH中一排的16个地址,这样共有4排地址,这就可以实现一个档位多个功能(1~4个), 通过选择键软件选择执行哪一排地址的功能设定。

2.以下以本机VC890D举例 (适用手动档表)

本人通过对VC890D的刀盘电路板和之前说的6个编码(M0~M5)对照, 做出了本机的对应关系(悬空为1,接Vss为0),如下图

然后通过分析, 得出M1为电源控制 (0为关机,1为开机)。另外5个点位组成的编码如上节所说可支持32个有效档位,这样如果对应到功能码区,会占用到两排地址。

通过参考其他坛友VC890C+的EEPROM信息,发现功能码区和本机VC890D一致,而两块表的区别是VC890C+多了温度档,而且有了单档位双功能或量程。

所以对照看地址A0H~AFH中的AAH和ACH中有数据,得出另外两排地址(A0H~BFH)刚好可以对应前两排地址(80H~9FH),而实现单档双功能或量程。

而且通过分析VC890C+ 只有温度档(摄氏温度和华氏温度) 和通断二极管档有双功能量程,得出M5为地址选择码, M5=0时,调用80H~8FH 16个地址或A0H~AFH 16个地址(通过Hold键切换),M5=1时,调用90H~9FH 16个地址或B0H~BFH 16个地址(通过Hold键切换)。以上双量程功能经过试验是正确的。

3.坛友如果有兴趣,可以按以上方法做出自己表的对应关系

第四节功能码设定参考举例

功能码设定区和档位编码对应关系清楚后,就可以根据自己的数据来分析档位功能对应信息了

下面把我从坛子里找到的功能码区信息整理总结一下作为分析参考:

注意:以上只是参考,具体得看实际数据,因为版本不同,可能对应关系也不同。

第五节功能码参考资料

1,DTM0660文档中的说明 (适用自动档表)

通过以上几节我们弄清楚了功能码设定区和档位编码的对应关系,那我们就要了解功能码了,以下是DTM0660文档中列出的功能码

这些功能码就是 填在功能码区对应地址中的码,芯片中的固件应该调用这些码来打开相应功能。

以上举个UT210D/E的例子。

2,以下以本机VC890D举例 (适用手动档表)

通过对照档位对应关系和原始配置,做出了本表的功能码表,然后通过推测和试验,完善了本功能码表。找到了方波功能码,频率占空比功能码,完善了一些其他量程功能,如2A量程:

以上功能码,未有底色的为原本配置中涵盖的功能,只是对应列出,绿色底色的为新找到和试验出来的功能码,黄色底色为推测的功能码(其中注有”???”的不确定是否是此功能)。 这里可以看到当中有电流的自动换量程功能(可惜由于检流电阻的原因,我的所有电流档位在改9999显示后全都降量程使用, 所以没有使用该功能)。

注意:此功能码仅供参考,因为不同的版本可能刷的固件有区别,从而功能码定义不一定相同。我就看到有坛友的VC890C+有稍微区别。 所以最好是通过前几节的所描述的对应关系,做出自己的功能码表。

第二篇续

第六节功能电路参考

这里只列出温度,频率占空比,其他标准功能电路请查阅DTM0660文档。

各功能外围电路会有一定不同,这个在刀盘设计时会把切换开关做进去和档位编码组合使用。

下面以VC890D举例说明:

可以把刀盘分为4圈切换。最里面两圈共2组3圈触片,通过刀盘弹片B/C/D/E 切换, 组成档位编码。 最外面两圈2组2圈触片,通过刀盘弹片A/F切换,实现外围电路切换。

从图中档位分布和最外两圈触片分布,可以对应到电路图中的切换开关 J1A/J1B(电容/电阻/通断/二极管/温度/mV), J6(三极管), J3(电流mA/A), J4(电流uA), 其他电压档没有用到切换开关, uA档多了一个切换J4B(加多了一个900欧的检流电阻实现更加微小电流的检流)

注意:如果要改动档位功能,一定要考虑外围电路的切换,只有用到相同外围电路或外围电路不相互干扰的档位才可以通用。

第七节本机VC890D功能实现

根据以上章节的信息,以及参照外围电路,在9999显示功能已加入的情况下,最终将温度/频率占空比/方波功能按照以下方案实现:

1.档位功能调整

a.原2M Ohm 档改为10.00M Ohm 双档位

b.腾出原20M Ohm档改为方波输出(50Hz~5KHz)

c.原通断档改为通断和二极管双档位

d.腾出原二极管档位改为摄氏温度和华氏温度双档位

e.所有电流档都降量程处理

f.原20A 交流/直流电流档改成9.999A双档位

g.原AC 750V档改为频率占空比双档位

h.原DC 1000V档改为未定(找到一个很怪的功能码,估计是NCV,还在尝试)

根据上述方案对EEPROM功能码区的功能码进行修改并写入EEPROM. (具体烧写方式这里不做描述,请参照其他坛友改9999显得帖子)

2.外围电路调整

为了方便调整,也为了之后第三篇的校准做准备,先把板子上对应的调试口,跳线口全部焊上针脚以便操作

a.温度功能, 通过对比VC890D和VC890C+(含温度功能)的电路板,发现没有什么区别,所以不需改外围即可实现,档位直接按VC890C+的档位改动

b.方波功能, 不需外围电路,直接由单片机的PT2.2输出,将该引脚引出即可

图中所示的PT2.2 就是方波输出信号接口

c.频率占空比功能

根据上节所述的电路图,加入外围电路(两个1M电阻和一个0.1uF电容),由于使用了原AC750V电压档的档位(由上一节知道该档位没有外围电路切换开关), 所以要外加一个开关实现该外围电路的接入(J1A, J2A/B)。

图中所示的J3 就对应着电路图中的”J1A”.

d.NCV功能

由于没有找到NCV功能的功能码,所以本机未实现此功能。

不过做了尝试,找到一个很怪的功能码,显示如图:

尝试了一下,未果。

第八节VC890Dvs VC890C+

这一节简单介绍一下VC890D和VC890C+的区别

1.档位区别:

a.VC890D 有 DC20uA 档, VC890C+则是 DC200uA档

b.VC890D 的通断二极管是分开两个档位, VC890C+则是把这两个功能和在一个档位, 而腾出的档位是给温度功能

2.电路板区别:

VC890D 的跳线RD1/RD2是接通的,VC890C+则是断开的。

VC890D的跳线 RT4/RT3 是断开的, VC890C+则是接通的。

由于跳线的不同,造成了两块表对应的功能码区和档位编码对应关系的变化:

从上面两图可以看到为什么两个表功能档位不一样但功能码区的数据是一样的,它们就是仅仅通过电路板上的几个简单跳线就实现了档位和功能的区别。

第三篇校准篇

第一节校准效果展示

改完9999显示及上述功能后, 又研究了一下校准功能。

先是校准了1000mV档(原200mV档)

校准前,100mV误差达0.46mV (0.46%),500mV误差达2.7mV(0.54%)

校准后, 100mV误差0.04mV (0.04%), 500mV误差0.12mV (0.02%), 1000mV误差0.4mV(0.04%), 对于9999显示的表来说,也就是1~4个字的误差,误差线形不错,精度已经足够。

校完mV后发现10V/100V/1000V (原2V/20V/200V)档误差变大(量1V误差0.2V, 达20%) 所以又校准了10V/100V档,由于没有高电压直流源,1000V档未校准。

10V档 (校准后只有1个字的误差)

100V档 (校准后基本没有误差)

较完电压档后,又对比了一下电阻100K档,发现精度还行(误差在1~4个字),就没有再校准了。

第三篇续

第二节 DTM0660校准流程(适用于自动档表)

把DTM0660文档中的校准流程列下

以上只是DTM0660通用流程,不一定适用所有表,毕竟不同的表或版本固件可能不一样,功能键定义也不尽相同。

下面为文档中校准数据在EEPROM中的地址表供参考

第三节VC890D校准研究试验(手动档表)

1,功能键和进入校准模式分析

通过分析上节流程,了解到进入校准流程,需要短接跳线J8,并拨入电阻挡,而且会使用到功能键。

关于短接跳线J8, 发现是将EEPROM的WP脚接地,对照本机,找到本机的J1就是该跳线位

关于按键

DTM0660的电路图是自动档的,里面支持好几个功能按键, 分别用到了3个I/O口(PT3.5,PT3.7和PT1.5) 和两个中断端口, 和PT1.1-INT1) 组合达到6个功能键(中断响应)

而VC890D是手动档, PT3.5和PT3.7都用于档位编码了,它的中断只有两个(一个就是Hold/Backlight键使 INT0和Vss接通产生中断,另一个就是板上有个键位"REL"使INT1和Vss接通产生中断).

所以分析觉得芯片内的固件定义的中断响应程序是不同的, 所以流程得尝试得来。

2,功能键的尝试和校准模式的进入尝试

先把另一个中断按键(“REL”/INT1)引出来

这样短接WP后,拨动档位到电阻档,发觉可以进入校准流程,引出的”REL”键可以实现跳过功能,而且默认校准顺序是和文档一样的, 先是自检部分,会听到两次哔哔声(大约1分钟),后进入mV校准,然后可以 通过按”REL”键可以跳过到之后的电阻/电容/温度等默认校准程序。

但是”Hold”键不起任何作用,而且很怪的是,在校准功能下,数字是自动增加或减少的, 而且并不知道如何将数据写入EEPROM.

经过各种尝试,发现只要把档位打到电容/电阻/二极管/三极管(即电路图中J1A/J1B都接通时)就可以进入校准流程

上图中 是电路板上的调试跳线位,(J2/J3/J4 分别对应”J8”,”J1A”,”J1B), 也就是说这个测试点位就是实现校准的位置。

对比自动档流程,说是要打到电阻档,对其他坛友的资料,档位编码是PT2.7 为1111,即都悬空,对应本机就是去掉拨盘,但是尝试了把J2/J3/J4短接并去掉拨盘后,还是”Hold”键不起作用,数字自己加减。

难道是还有条件判断旗帜位? PT3.5和PT3.7构成判断旗帜位?

对照档位,找出了所有PT2.7(M4(M3(M2(M1)为1(悬空)的档位,并且PT3.5(M0(M5)不同的组合共4个

M0 M1 M2 M3 M4 M5

Diode: 0 1 1 1 1 0

AC 20mA: 1 1 1 1 1 0

DC2V: 0 1 1 1 1 1

DC200mV: 1 1 1 1 1 1

通过尝试发现在Diode档时,”Hold”键有反应了,表会显示个100.0mV后”哔哔”一响。然后发现数据已经变了,而且量的也不准了。

可以断定M0M5为00时,”Hold”键执行写入EEPROM功能。 虽说数字还会自动加减,但写入功能已经确定, 而且校准数据是以”100.0mV”为基准的。

知道这个以后,就用精密可调电阻和锂电搭了个分压电路作了个100.0mV电压源。

3,VC890D的校准方式总结

a.准备好100.0mV电压源,短接J1(“J8”)跳线的WP与Vss脚,在”REL”键测试点接触一个按钮开关。拨档拨入二极管档,进入校准模式。

b.机器自检,过程1分钟左右(中途屏幕会显示一些十六进制码,会听到两次”哔哔”声),然后进入默认的mV校准进程

c.把100.0mV电压源接入正负表笔,看屏幕显示多少mV),然后断开电压源,然后看屏幕上的数字变化,当屏幕上数字显示到”xxx.xmV”时,迅速按下”Hold”键(数字自动加减变化较快,所以操作要迅速),会听到”哔”的一响,这样校准数据就写入了。就是把”xxx.xmV”当作标准100.0mV。

d.再次接入100.0mV电压源,看是否准确。如不准确可多次重复步骤c.

(说明:实际操作中,有时数据是自动加或自动减,可能在对应”xxx.xmV”时,刚好是往相反的方向自动变化,经过尝试,可以用手触摸J3J4跳线,给一些干扰,让数字变化朝想要的方向变化)

e.校完mV默认校准后,拨动档位到DC2V档, 这样需要一个1.000V电压源,方式略有不同,直接接入电压源,然后按”Hold”键写入就行了(就是把你当前输入的电压不管显示多少都设为1.000V)。但是如果电压源不够精准,那就要和mV档一样,要断开电压源,让数字自动变化到你想要的数值后再按”Hold”键写入。请参照步骤c/d。同样的拨到DC20V档,用10.00V电压源校准。

(说明:如果不是很精准的电压源,你要自己想好比例,算出你想要的数值写入。 举例:假设电压源是1.010V, 显示1.020V, 则多显示的比例是, 即1/101, 这时你想要的数值应该是1.000x(1+1/101), 即1.0099,就是你要看到显示为1.010时才按”Hold”键写入)

f.同样,其他档位也是用对应校准,由于没有合适的校准源,其他档位本机VC890D没有校准。 所以应该用什么数值的参考源本贴没法提供。 大家可以学会本方法后,自己尝试。

g.实际操作中,由于数值是自动加减的,所以各项操作要迅速,尤其是接入和断开校准源时,数值变化刚好是你想要的时,要迅速按”Hold”键写入, 因为同一档位多次校准细化时,那个你想要的数值会在你断开校准源的瞬间出现变化(毕竟校准源有时也会有几个字的差别,越细化时,一两个字的变化在毫厘之间)。

4, 最后附上校准DC200mV, DC2V, DC20V后的EEPROM数据与原数据对比。

红色框中为不一样的地方,估计就是对应的DC电压档的校准数据。

第三篇结束,全文到此。谢谢阅读!!!

通过上述3篇的描述,相信坛友们应该能有所收获,把DIY的精神发扬光大。

最后再次强调:以上所述内容有风险,改表需谨慎 !!!

谢谢观看!

浏览更多精彩内容请登录数码之家网站

技术交流请联系原作者

作者:oos

本文来源:数码之家

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“int0如何调试中断服务子程序”边界阅读