使用 Atmega 128 作为实时逻辑单元

Posted

技术标签:

【中文标题】使用 Atmega 128 作为实时逻辑单元【英文标题】:Using Atmega 128 as real time logic units 【发布时间】:2015-11-19 04:08:47 【问题描述】:

目前我正在设计简单的数码钢琴模型。我使用了大量的解码器和 And's 来构建我的项目。在模拟中,这些 AND 被连接并启用外部 int0。这样如果按下任何按钮,无论其他进程如何,都会触发按钮播放功能。但在 PCB 和焊接中,我发现这些 AND 很烦人。所以我试图通过更改我的代码来省略这些 AND。如果任何单个输入达到零,是否有任何软件中断会自动触发?还是 Atmega 128 中类似 FPGA 的组件?还是我必须在我的主代码的每一行中编写按钮扫描代码(我扫描了数据表但没有成功)

74148为8对3编码器

【问题讨论】:

"是否有任何单个输入达到零时自动触发的软件中断?" - 不能将外部中断配置为触发低电平有效吗? 问题是一个中断只有一个引脚,但我使用了很多按钮。为了解决这个问题,我为每个按钮使用了与门,以及连接到 INT0 和其他与门的大与门。就像 (AB)*(CD)*(EF)... 以此类推 可能会显示您的原理图。不确定我们是否遇到了您的问题。如果你和你所有的输入你怎么知道哪个被按下了? atmega128 也有点老了。更现代的 AVR 在每个输入上都有一个可激活的引脚更改中断。也许考虑升级到 atmega1284 由于我是初学者,老师禁止使用过于超级的控制器。这样我们就可以了解有关设计的次要问题和主要问题(例如这些)。 【参考方案1】:

如果有很多键,您可能需要使用一系列并行移位寄存器(例如 74HC(T)165 ... 每个单元 8 个键) - 菊花链式连接 - 并一次读取它们的值每 10 毫秒左右使用 ATMega128 SPI 接口

further reading

【讨论】:

这也是个好主意。但我使用了定时器中断。并感谢您的好意先生【参考方案2】:

好吧,如果您的时序“慢”,您可以轻松实现一个二极管,并用 1n4148 二极管(74148 的阴极)和一个独特的上拉电阻替换所有与所有阳极......当任何输入驱动二极管到 GND 它会拉低 avr 上的 INTERRUPT...

通过适当的上拉 (4.7k),您可以达到 10us 帧响应时间(也许更多)

【讨论】:

以上是关于使用 Atmega 128 作为实时逻辑单元的主要内容,如果未能解决你的问题,请参考以下文章

使用定时器中断闪烁 LED(atmega 128)

SPI管脚干扰

atmega328p 单片机里面有自带蜂鸣器吗

SQL Server创建事务——锁

使用 avrdude 对闪存的引导加载程序部分进行编程很慢

汇编第七日