有趣设计:驱动电子骰子至少需要几个I/O口?
最近一时冲动,买了一个成本非常低的电子骰子套件。组装的过程还是挺有古典趣味的。这个电路的设计风格还停留在70年代:一个CD4017,一个NE555,一对晶体管。当然,我开始思考,怎样用最高效的方式来实现呢?当然这意味着需要用到微控制器;而且还要达到我们资源利用尽可能低的目标。那么用一个带有3个I/O口的ATtiny10能够实现吗?
骰子的图案包含7个LED,但是,你可能很快就发现其中六个LED都是成对亮灭的,所以我们就具有3对LED外加一个额外的LED需要控制。这需要四个I/O口——但还是太多了!要减少需要的I/O口,一个很显然的使用方法是“查理复用技术(Charliplexing)”,你能在网上找到很多关于查理复用技术电子骰子的电路图。简单来说,查理复用技术允许使用n个I/O口控制n²-n个LED。所以当我们采用查理复用技术时,我们就需要三个I/O口就够了。但对于我们使用的ATtiny10来说还是太多了,因为我们还需要一个额外的I/O口来“摇骰子”。查理复用技术使用了微控制器I/O引脚的三态特性。同时激活的只有两个I/O口——其中一个为高电平,另一个为低电平——而其他引脚就是高阻抗状态。只有以正确的极性和激活的引脚直接相连的LED才能发光。而不与引脚直接相连的路径上的LED——比如连接到激活引脚的的是两个串联的LED——那么这些LED就不会发光,这是因为二极管的非线性电流-电压特性导致的。现在,你可能会疑惑当只有一个I/O口(而不是两个)激活时会发生什么了?在查理复用技术的方案中什么也不会发生,但我们可以利用这一点。以上的电路展示了怎样以不同的方案连接LED。除了两个I/O引脚之间的反平行对之外,作为查理复用技术的使用习惯,LED还需要连接到VCC(5V)和GND。串联的四个LED(LED1-4与LED5-8)的正向电压之和超过5V,所以当PB0和PB2处于高阻抗(Z)状态时,这些灯都不会发光。当PB0和PB2中有一个引脚处于高电平或低电平状态,而另一个引脚为高阻抗状态时,那就会有一对LED会发光。而当PB0为高电平而PB2为低电平或恰好相反时,LED9或LED10就将和一对LED并联。这时大部分的电流会流过单个LED,所以这时只有LED9或LED10会发光。
上表是可能的编码。看到了吗?两个引脚可以控制六个部分的LED!这正是我们所需要的,任务完成了。但需要说明一点:单个LED的亮度并不同于串联的两个LED。这可能需要在查理复用技术中进行校正。但是事实上由于人眼对光亮度的差异并没有特别敏感,两者的差异只能说是勉强可见。12下一页>
- 第一页:驱动电子骰子至少需要几个I/O口?(1)
- 第二页:驱动电子骰子至少需要几个I/O口?(2)


- 第一页:驱动电子骰子至少需要几个I/O口?(1)
- 第二页:驱动电子骰子至少需要几个I/O口?(2)