最近一时冲动,买了一个成本非常低的电子骰子套件。组装的过程还是挺有古典趣味的。这个电路的设计风格还停留在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。这可能需要在查理复用技术中进行校正。但是事实上由于人眼对光亮度的差异并没有特别敏感,两者的差异只能说是勉强可见。
简单测试一下(LED并未像骰子一样排列)。看起来我们新的多复用技术能很好地工作。注意一点,该电路需要由AVR I/O接口的内部阻抗。这确实有效,但是在“真正”的设计中应当避免。
我们可以讲这种新的方案成为“查理复用+(Charlieplex Plus)”。分析表明,依靠这样的技术,一个I/O口可以比普通的查理复用技术多控制两个LED。也就是说n个I/O口所能控制的LED数量就为2n+n²-n = n²+n。具体情况如上表所示。
你应该在你的设计中采用这种思路吗?恐怕不应该,因为这种做法的缺陷和限制甚至比现有的查理复用还多。但是这却很有趣!
所以回到最初,控制电子骰子最少需要多少个I/O口呢?
答案是2.
技术专区
- 一文看懂自制简易蜂鸣器的方法和步骤
- 利用闲置手机电池制作充电宝
- 简易水位报警器制作_制作简单的水满报警器
- 电子管调频收音机制作
- 自制电焊机的绕线方法