我附上的文件dcmeter.ino。所有的程序是包含在这个文件中除了液晶图书馆”liquidcrystal_i2c”。该代码是高度可定制的,特别是形状的进度条,显示信息。
因为所有的Arduino代码具有setup()函数执行第一次和loop()功能继续执行。
设置功能配置显示,包括进度条的特殊字符,它的mcp4322状态机设置继电器和第一次的LCD背光。
没有中断,在每一次迭代循环功能做以下步骤:
有价值的所有输入信号i_on,i_off,a_oc,a_ov和i_mod。i_on,和i_off去抖。a_oc和a_ov从Arduino´ADC直接读取和使用最后三位部分过滤的测量。i_mod无反跳直接读取。
控制对背光时间转。
执行mcp3422状态机。每隔5秒它投票mcp3422看看最后的转换完成,如果它开始下,先后得到了电压和电流的值在输出。
如果有输出电压从mcp3422状态机当前的新值,更新电源的现状的基础上,测量和更新显示。
有一个双缓冲的实现更快的更新显示。
以下的宏可以调整用于其他项目:
maxvp:1 / 100v单位最大OV。
maxcp:1 / 1000a单位最大OC。
debouncehardness:具有连续值的迭代估计是正确的i_on和i_off数。
lcd4x20或lcd2x16:为4X20或16显示编译的16选项尚未实施。
的4X20实现显示以下信息:第一行中的输出电压和输出电流。第二行是代表输出值相对保护设置点的电压和电流的进度条。在第三行的当前设定过压保护和过流保护。排在第四的电力供应现状:CC(在恒定电流模式),CV(在恒定电压模式),关闭,OV了(关闭显示电源走了因为一个OV),OC关闭(关闭显示电源去因为OC)。
我把这文件设计进度条的字符:https://drive.google.com/open?ID = 1ych5bmo9lfsu44w…