4

这是我在 stackoverflow 上的第一篇文章,我听说过这个网站,我觉得它很棒!让我们看看我是否可以就如何开始我的项目获得一些指导。

想法: 基本上我想构建自己的自定义 OSC 控制器(OSC 是一种基于 UDP 的协议,旨在替换 MIDI)。有趣的是,我想将控制器构建为吉他,因此我可以将它用作合成器,并在吉他主体上包含一些典型的 MIDI 控制器硬件。这将包括速度感应垫、光学编码器、LCD 面板、速度感应琴弦和触感音柱。这是一个例子

我的问题:我对如何启动如此规模和复杂的项目感到困惑。在基本的低级别,固件似乎只是处理基本整数并转换为适当的 OSC 信号。我不确定如何选择我的硬件和编程语言,甚至不确定如何实现这个协议。也许我咬得太多了,但我认为这是一个很好的项目,可以很好地理解嵌入式硬件的工作原理和编程低延迟并发系统。

  1. 什么是作为该设备基础的好的硬件平台?我认为 PIC18 处理 OSC 的速度会很慢,因为它是一种现代协议。哪种类型的微控制器可以处理 OSC 实现?
  2. 用什么语言来实现这个协议?我知道 C 通常用于嵌入式软件,但 Ada 激发了我的兴趣。这里的目标是创建一个可以处理来自用户的多个输入的低延迟固件。我了解 Ada 用于许多此类情况并且“更稳定”?您对此有何看法?
  3. 是否可以在没有物理硬件的情况下模拟硬件和微控制器?在不知道它是否适合我的需求的情况下,我有点难以在硬件上投资几百美元(我在学生预算中)。如果我能够在没有硬件的情况下模拟所有输入并编写固件,那将使我对完成这个项目的能力更有信心。即使能够模拟我的想法的基本版本也比没有更理想。

我希望我能得到一些意见,如果我关于硬件的问题不适合这个网站,我理解你们是否对在硬件方面给我建议犹豫不决。

再次感谢!

4

4 回答 4

2
  1. 首先,看看 Arduino 和 Make Controller。两者都是开源 (hw&sw) 微控制器模块,可以处理 OSC 并拥有强大的用户社区。您可以在 youtube 上找到两者的示例视频。

  2. C 和 Ada 仍然被编译成机器代码,所以如果你想最大限度地控制你的硬件,你可能想看看汇编语言——但只有当它变得绝对必要时。在那之前,我会坚持使用 C。它会带你走得很远。

  3. 是的,可以在软件中模拟您的电路。但是,使用实际硬件会更容易一些事情。但是,对于一些好的软件示例,请查看 Cycling '74 网站上的 Max/MSP 教程。Max/MSP 是一种经常用于计算机/硬件交互的图形编程语言。本文将为您提供一些关于它可以做什么的想法。

  4. 与 Max/MSP 类似的是一个名为 Pd 的开源产品。它不如 Max/MSP 精致,但可以免费使用,您可以随时开始使用它。

  5. 一些适合初学者的好书是 Tom Igoe 的 Physical Computing 和 Paul Scherz 的 Practical Electronics for Inventors。Tom Igoe 也有一个信息量很大的网站。

  6. Make、Circuit Cellar 和 Nuts & Volts 是一些您可能会觉得有帮助的好杂志。所有这些都以某种方式处理您将用于此类项目的电子设备类型。

  7. 除非您正在为商业企业设计原型,否则您可能会考虑启动一个开源项目。这听起来是个好主意,我相信它会引起很多兴趣。

于 2009-10-09T14:13:14.633 回答
2
  1. 支持以太网和可用网络堆栈的东西似乎是明智的。您是在寻找现成的电路板还是开发自己的电路板?许多 ARM 微控制器包括片上以太网控制器。您需要考虑对网络硬件的支持以及这种支持(或者实际上是应用程序本身)是否需要操作系统或 RTOS。

  2. C 编译器几乎适用于从 8 位到 64 位的所有体系结构。但是,如果您使用具有超过几十 KB RAM 的 32 位部件,C++ 是可行的并且几乎无处不在。艾达是一种罕见的不太受支持的野兽,在军事/航空航天之外,IMO 将是一个不寻常的选择。您可能需要第三方支持,例如网络堆栈和以太网驱动程序——Ada 是否可以使用这些支持?以合理的成本?

  3. 您可能不需要在指令或周期级别模拟硬件。如果使用 C 或 C++,您可以在 PC 上制作大部分代码的原型。优点是PC已经有网络支持。许多嵌入式开发工具链包括指令模拟器,有些还模拟片上外围设备,但它们的使用受到限制——它们不能实时执行,模拟外部 I/O 可能很复杂且不切实际。

**[编辑]**关于 C++(回应 Jason S 的评论)。并不是说 C++ 一定需要更多的内存;您为使用的功能付费。但是需要小心,因为 C++ 使简单和有吸引力的事情可能具有隐藏的资源成本。我在嵌入式系统中使用 C++,但很少使用例如 C++ 标准库 - 它很棒并且可以节省大量时间,但在资源和确定性方面的成本很高,某些系统可能无法承受。我已经在 8 位和 16 位系统上成功使用了 C++,但是当使用的子集受到高度限制并且代码体很小时,优势就不是那么重要了。例如,我不会建议您学习 C++ 只是为了在 8 位系统上使用它;但如果您已经了解 C++,请继续(小心)。我目前正在开发 dsPICF33 设备,

于 2009-10-08T21:18:03.497 回答
1

你可能想看看类似gumstix的东西。体积小,功耗低,运行linux,无线且便宜!

看起来有可用的 linux OSC 库。您绝对可以在 linux PC 上对您的应用程序进行原型设计,然后在嵌入式 linux 平台上进行交叉编译。

于 2009-10-08T21:57:43.533 回答
1

还有基于 MIPS CPU 的 PIC32。我会说使用 Ada 来实现它的实时功能,但您还必须移植运行时才能使其工作,除非您使用具有零足迹配置文件运行时的语言,这也是可行的。

于 2011-03-08T21:45:13.263 回答