【问题标题】:Arduino Mega vs UnoArduino Mega vs Uno
【发布时间】:2013-06-05 15:25:26
【问题描述】:

我们正在编写门铃识别系统,并决定使用 Arduino 来处理大部分电路。我不确定的一件事是Arduino UnoArduino Mega 的程序容量。我知道 Uno 只有大约 32 KB 的闪存,但我们的程序预计会在 1000 行代码内完成(我认为这会超过 32 KB 的阈值)。

我们没有太多时间来完成这个项目,所以如果 Uno 无法处理我们需要的内容,我们不想花很多时间弄清楚如何多路复用或向 Uno 添加内存盒子。

EEPROMs 添加到 Uno 会有多困难(且耗时)?坚持使用 Mega 会更好吗?

另外,首先使用 PC(带有 DAQ 板或其他东西)或 Raspberry Pi 而不是 Arduino 会更容易吗?

我们正在设计的系统用于读取指纹扫描仪的输入并将独特的铃声输出到扬声器。我们需要的是使系统在物理上紧凑,以便它可以取代家庭中的实际门铃系统(希望 Arduino 可以帮助实现)。

代码大约有一千行的原因是因为我们可能会在其中实现移动应用程序通信、锁定/解锁门等。我假设 32 KB(来自 Uno)是不够的基于我的一些 C 程序(在千行范围内)的大小,通常在 100 KB 左右。

基本上,我们需要它可扩展至程序可以大于或什至小于我们预计规模的程度。如果一个就足够了,我们不想最终不得不购买多块板。

【问题讨论】:

  • 在不知道什么是“门铃识别系统”的情况下,很难说哪个板子更好用。虽然价格差异不大,所以如果有疑问,请选择 Mega。
  • “一千行代码”(用 C 语言?)几乎没有可以挑战 Mega32 或更大的。您可能链接或未链接的库对闪存的使用有很大贡献,对于存储在闪存中的常量数据也是如此。如果需要更多闪存,您可能会查看 ATmega64 或 ATmega128,它们应该是与 Mega32 引脚兼容的版本。

标签: arduino raspberry-pi multiplexing eeprom flash-memory


【解决方案1】:

微控制器中的 32 KB 是很多程序内存。 1000 行代码可能会组合成几千字节,而所有 Arduino 库可能仍然比您的程序大。

如果我记得,我认为任何 ATMegas 都不支持具有外部程序存储器。如果你有类似大型查找表的东西,你可以得到一个I²C EEPROM 并将其加载到那里。

至于 PC/Raspberry Pi,用于计算机的某种 I/O 板的成本可能比 Uno 或 Mega 高得多,Raspberry Pi 也是如此,特别是如果您需要模拟输入或 PWM

我想说,目前,还是坚持使用 Uno,但将您使用的任何引脚保留为 #defines,这样,如果您的程序 ROM 用完,您可以轻松地将其移植到 Mega。

【讨论】:

  • 确实,除了集成闪存之外,8 位 AVR 都无法执行任何程序代码。
  • 这取决于你对“代码”的定义。如果您在闪存中实现解释器,那么要解释的代码可以在您想要的任何地方。如果口译员恰好是第四位口译员,这可能仍然非常有效。
  • 我同意你所说的关于 pi/pc 的说法,从长远来看,它可能最终会花费更多。我对 arduino 没有太多经验,但是如果我的 c 程序大小约为 100-200kb,你知道(大约)它是否会组装到一个 uno 可以使用的大小吗?获得一个巨型赌注会更安全吗?
【解决方案2】:

Atmel 微控制器不支持允许添加 ROM 和扩展代码量的外部程序总线。一些设备支持扩展数据总线,这将允许添加 RAM。我会说这是微控制器和微处理器之间的主要区别之一,尽管分离可能有些模糊。因此,当您用完代码或内存时,您就会陷入寻找效率或削减功能的困境。我在选择微控制器时的建议是首先决定:

我是成本受限还是时间受限?

如果成本受到限制,那么您可以选择您负担得起的设备并使您的应用程序适合。如果受时间限制,请选择可以使用的最大设备。

您说您时间有限,并且不确定代码规模。如果有任何方法可以证明 1000 美元的 PC+IO 板是合理的,那就走这条路吧。一个门铃听起来有点贵...

【讨论】:

  • 实际上,一些 AVR 设备本身就支持外部 SRAM。
  • 是的,更正了答案中的错误。不是ROM,是RAM。尽管阅读了上面的评论,您没有外部程序总线,但是如果您翻译外部数据并执行,这是否意味着外部数据是代码?应该停在模糊。
  • 我认为这里的边界有点模糊。在每种情况下,人们都可以从任何可以想象的来源接收数据,并根据接收到的数据执行存储在闪存中的部分代码。这将是某种语言的解释器(我并不真正认为它是“执行代码”)。另一方面,借助 AVR 的自编程能力,可以将已编译的原生 AVR 代码作为数据传输到 µC,让引导加载程序将其存储到闪存中,然后从那里执行。
  • 对于这个项目,我们受到成本和时间的限制,但是,如果我们需要花更多的时间来节省时间,那就更好了,不要太多。由于我对 arduino 板没有太多经验,我不确定 100-200kb 的程序在具有 32kb 存储空间的微控制器上是否适合
  • 啊,所以这是一个现实世界的项目,它必须便宜又快速 :) 所以这就是你购买工具链和微控制器系列的原因。从小处着手,看看你能走多低。保持升级到下一个更大处理器的能力作为缓解策略。如果使用 Arduino 和其他 AVR 工具链,您可以从一个微控制器转移到另一个微控制器,代码更改几乎为零。
【解决方案3】:

这完全取决于您的门铃识别方案实际上是什么。如果它需要 FFT 和/或花哨的浮点运算,那么您可能很容易耗尽 AVR 的 SRAM。如果它只是一些美化的有限状态机,并且实现得有点体面,如果这耗尽了 Uno,我会感到惊讶。

不过,最重要的问题是:您要构建什么?原型?一个?还是一个系列的飞行员?如果不是为了一个系列,那么开发人员的时间是最昂贵的 --> 首先去买一台更大的机器。如果您正在开发一系列计算硬件成本与开发人员时间 -> 瞄准仍然满足您需求的最便宜的控制器。那就是:拿最大的 Atmel 系列,一旦你有一个正在运行的原型,就把它缩小。恕我直言,门铃应该适合 ATiny。

【讨论】:

  • 对于我们正在进行的项目来说,这是一次性的,这就是为什么可以购买 mega 的原因,但是如果我们可以从长远来看,使用 uno 可以省钱的话也很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多