[Arduino|Zero]让Arduino亮起来,作个调试助手吧~

Photobucket

元件清单:

元件 数量 备注
洞洞板 1片 13孔*9孔
8.8.8.8.数码管 1片 推荐使用共阳
弯排针 1节 13针
圆孔排座 2节 6孔,数码管的座子

玩Arduino的话,数据的显示,一直是一个问题。例程中经常看到的方法,就是通过串口进行输出。这样的作法,算是比较无奈的吧。毕竟牵扯上串口,就要涉及波特率的设置,更郁闷的是,还要在PC上位机这边打开串口助手(Serial Monitor)才能看到数据,更不用说数据的刷新周期,刷新太快,眼睛看不过来,而刷得太慢,又总是让人心急如焚。

于是就想到了使用1602这样的液晶模块,而液晶模块的问题在于,驱动代码比较复杂,引脚比较多,比较容易搞混。还有一个问题就是,当单片机复位的时候,1602的电源因为一直没有断电,所以一直会保持原有的状态。也就是说,原来的一段代码,显示了一个“Hello,world.” 而此时,要是把程序刷成与1602毫无关系的代码(这段代码不会去复位驱动1602)。这样单片机已经在运行别的程序了,而1602却会依然显示“Hello, world.”。同样会造成困扰吧。

那么还是用数码管吧。优势在于:

  1. IO口直接控制,IO的实时状态,决定数码管的当前显示
  2. 无需启动代码
  3. 显示直观、清晰
  4. 热插拔,即插即显
  5. 取模好好设计的话,还能显示十六进制的 AbcdEF,这样一个四位数码管,可以完全显示一个双字节数据。

Photobucket

使用数码管的问题,在于它会占用很多的IO口。在没有辅助芯片(如74hc595)的情况下,阴极就需要8个IO口,而在此基础上,有几个位就需要需要几个阳极。AVR芯片的优势在于引脚的输出能力很强,其电流输出,点亮8,和点亮1之间,竟然没有太大的差异。不像使用STC的51单片机,还需要使用“逐段扫描”的方式来保证显示效果(详见这里)。这样算法方面也简单了许多。

Photobucket

我使用的4位数码管,就占用了12个IO口,从D2-D13。以6+6的方式排布,可以插在Arduino标准版的数字输出口一排。记得中间那条可以抽掉,这样在插接的时候,可作为一个定位的依据,另外,记得显示面是朝向外侧,有这2点保证,没错都不会差错了。

这里不得不吐槽一下,Arduino设计者搞出来的“诡异间距”,7、8脚之间的间距,竟然是诡异的4.0mm,既不是2.54,也不是5.12mm。是一个公制的尺寸,所以,按照照片中方法做出来的排针,若要插下去,板子不得不承受一定量的变形。但还不至于插不上,暂且hold住……

这样,除了模拟口A0-A5、D0、D1没用,占用了所有数字IO口。不过有意思的地方就是,模拟口一样可以设置成数字口来使用,而串口又得以保留,基本上,要进行程序库以及模块调试的话,基本还是可以满足要求。而且直接插在板子上,也没有影响到别的IO口的使用。

布线超级简单,因为可以实现完全自定义引脚设置,所以洞洞板这边,直接就是无跳线就近布线。只要把数码管的12个引脚能与12个IO口分别建立连接就okay,顺序都不重要。

Photobucket

Photobucket

类库这边,可以实现十进制和十六进制数的打印。在4位的显示空间上,如果只能显示十进制数,则无法完全显示一个双字节数据,unsigned int的最大值为65535,需要5位显示,而且其实不直观。而打印成FFFF,则是开发者中喜爱的形式了,而且4位显示得刚刚好。

Photobucket

Photobucket

同时,类库部分,也增加了一个最小显示位数的参数,来控制是不是显示前置的“0”,这样,显示数据,尤其是十进制数据的时候,可读性会更强。(参见文章的标题图片)。

Photobucket

正是这个 Debug Helper,作为《CupPlate》的温度显示模块,是不是让开发都变得更简单了呢~ 在文章中的代码中,就可以看到 Debug Helper 最初版本的调用例程(DigitalTubeDisplay类)。

特别感谢 @圣源电子

如果想直接买成品的话,还要稍等上一段时间哦。心急的朋友,还不快拿起你的烙铁来?数码管的驱动,满大街哦~

关于aGuegu

向着更高的逼格
此条目发表在初號機 | Zero, 模块分类目录,贴了, , , , , 标签。将固定链接加入收藏夹。