CUI32Stem
Create USB Interface 是一个开源的微控制器板,可以使用 C、BASIC 或 Arduino 语言进行编程。最新版本称为 CUI32Stem,专为与 GROVE 原型系统协同工作而设计,包括各种传感器和执行器。它采用高性能的 Microchip® PIC32 微控制器,无需焊接即可实现与各种用户发明的可编程交互!:)
这些图片的高分辨率版本可以在以下链接中找到:正面 和 背面。
CUI32Stem 可以运行 Arduino 代码(通过多平台 ChipKIT MPIDE 版本的 Arduino IDE 编译),并且还预装了免费的实时操作系统 StickOS,这是编程该板最快捷的方式(在终端窗口中使用 BASIC,无需在计算机上安装任何软件)。这两个功能使得对于微控制器单元 (MCU) 的新手来说非常容易上手。对于希望充分利用 CUI32Stem 上强大的 32 位微控制器的高级用户,可以直接在 Microchip MPLAB X 中开发 C 语言程序,该软件适用于 Windows、Mac OS X 和 Linux。
[CUI32Stem Dash Kit]
CUI32Stem 可以单独购买(引脚头装在袋中,未焊接,提供纤薄的外形以适应低调安装位置),或者作为两个不同的 GROVE 套件的一部分购买(其中一个较大的套件如上图所示,包含无线功能和更多 Grove 元件,另一个即将推出)。当作为套件的一部分发货时,CUI32Stem 板将预焊接引脚头(允许 GROVE 元件简单地插拔)。有关购买方式的更多详细信息,请参见下文的“如何购买”部分。您可以通过板上的“V选择器”选择“V引脚”提供 3.3V 或 5V,以匹配所选 GROVE 元件的适当电压——CUI32Stem 上的非模拟引脚支持 5V(尽管微控制器本身运行在 3.3V)。
一些 GROVE 元件为 CUI32Stem 增加了无线功能,包括蓝牙和简单的“串行 RF”模块,以及一个正在设计中的“串行 WiFi”模块(尚未发布)。这个串行 WiFi 模块允许 CUI32Stem 通过 802.11 无线访问互联网和/或使用开放声音控制协议 (OSC)。StickOS 支持非常简单的无线链接(参见示例),通过专为 CUI32Stem 设计的附加板 ZigFlea,还可以简单地将数据记录到 USB 存储器棒。板上有一个母 USB 连接器的焊盘(位于板的顶部和底部,您可以选择使用哪一个——母 USB 连接器需单独购买,或包含在套件中),允许您使用 USB 主机模式——StickOS 包含 FAT32 文件系统并支持将数据记录到标准闪存驱动器。
预装在每个发货的 CUI32Stem 上的 StickOS 包含一个板载 BASIC 编译器、行编辑器、调试器、性能分析器和内联帮助系统,用于创建新的固件程序、保存并运行它们。所有这些都可以通过使用标准终端仿真器进行通信,而无需在计算机上安装任何软件。
Arduino 代码可以使用 MPIDE(多平台集成开发环境)编译并运行在 CUI32Stem 上,该平台有自己的论坛。最后,C 代码当然可以通过 Microchip 的 MPLAB X IDE 和相应的 C32 编译器为 CUI32Stem 编译,这些都是免费的下载资源。“Microchip 应用程序库”MAL 也可以免费下载,并且有许多不错的示例。有关 PIC32 上 C 代码的更多示例也可以在这里找到。
- 对于那些对基准测试感兴趣的人来说,标准 Arduino 的 Coremark 为 18,而 CUI32Stem 的 Coremark 为 203——这是在两者都使用原生 C 代码并进行完全优化编译的情况下实现的。虽然在 StickOS 中运行 BASIC 代码时显然无法看到这种性能,但这种权衡是为了易用性。Arduino 代码在性能方面显然会更接近原生 C 代码。一个展示 CUI32Stem 性能的示例项目(使用 MPIDE 编写的 Arduino 语言)是 Philip Burgess 的开源项目,用于构建一个自包含的多音合成器,使用 PIC32。通过压电传感器作为输入,它实现了一个包括实时音频效果的样本播放多音合成器。由于缺乏足够的内部存储器,这个项目在标准 Arduino 上是不可能实现的——而为 Arduino 添加一个“波形盾”或类似设备以访问外部存储器将使实现多音(重叠的音乐音符/声音)变得困难(甚至不可能),正如 Burgess 所展示的那样。
特性
CUI32Stem 被设计为 GROVE 系统的核心。
Arduino 代码可以通过 MPIDE 为 CUI32Stem 编译。
强大的 32 位微控制器,运行频率为 80MHz。
预装易于使用的实时操作系统 - StickOS:
StickOS BASIC 特性
-
跟踪或单步执行程序,
-
使用采样分析查看程序运行时间分布,
-
使用断点、断言和监视点,
-
在程序停止时实时操作和检查变量(以及引脚),
-
甚至可以编辑并继续运行程序!
CUI32Stem 是 Microcontrollers For Everyone (MFE 项目) 的一部分,该项目由 StickOS BASIC 的创作者 Rich Testardi 发起。该项目的目标是鼓励新的休闲用户群体,包括学生、爱好者以及其他非职业用户,学习、享受并使用最先进的微控制器技术构建有用的项目。MFE 的目标明确不是隐藏或抽象微控制器技术,而是使其更易接近、透明且宽容,以便休闲用户能够学习职业用户使用的相同基础概念,但无需投入职业级的精力。
规格
PIC32MX795F512H 处理器:
-
80 MHz 时钟频率
-
1.56 DMIPS/MHz
-
512K 闪存
-
128K RAM
-
8 个 DMA 通道
-
3 个 SPI
-
4 个 I2C
-
6 个 UART(串口)
-
全速 USB 2.0 设备或主机模式
-
16 个 A/D 通道,10 位分辨率
硬件安装
登录 StickOS 非常简单:
-
如果您使用的是 Windows,请从这里下载 "CPUStick.inf",然后右键点击文件并选择“安装”;Mac 和 Linux 无需安装即可自动识别 CUI32Stem。
-
如果您使用的是 Windows 或 Linux,请下载一个终端仿真程序(我在 Windows 上使用 "Tera Term",在 Linux 上使用 "minicom");Mac 内置了 "screen" 命令。
-
使用 USB 数据线将 CUI32Stem 连接到主机电脑。
-
确定您的 COM 端口或设备文件名;在 Windows 中,您可以在设备管理器中找到 CPUStick;在 Mac 中,查找 /dev/tty.usbmodemXXX 文件,其中 XXX 与 "关于本机 -> 更多信息 -> 硬件 -> USB" 中 CPUStick 设备的位置 ID 匹配;在 Linux 中,设备文件名取决于发行版。
-
在您的系统上打开终端仿真程序,并连接到相应的 COM 端口或设备文件。
-
按下 <Enter> 键以获得提示符:
Welcome to StickOS for Microchip PIC32MX2-F128B v1.92c!
Copyright (c) 2008-2012; all rights reserved.
http://www.cpustick.com
[email protected]
(checksum 0x8725)
> _
针对初学者的 Mac 特定帮助: 如上所述,所有 Mac 都内置了 "screen" 工具 - 它可以在 Terminal 应用中使用,具体步骤如下:
首先,打开 Terminal。如果您从未使用过它,它位于 Applications/Utilities/Terminal。接下来,输入:
ls /dev/tty.*
以获取所有串口的列表。选择您想要打开的端口。例如,我的列表如下:
/dev/tty.Bluetooth-Modem
/dev/tty.Bluetooth-PDA-Sync
/dev/tty.usbmodemfa141
您的 CUI32Stem 板会显示类似于最后一个的名称,其中包含 'tty.usbmodem'。
现在,您只需输入 'screen portname' 并按回车键,即可在屏幕上显示 StickOS。在我的例子中,我输入了:screen /dev/tty.usbmodemfa141
之后,您可能需要再次按下回车键,以使 CUI32Stem 返回来自 StickOS 的欢迎消息...
退出 screen 应用的方法是同时按下 control-A 和 control-\。
最后一点:当您将 GROVE Serial Bluetooth 元件连接到 CUI32Stem 时,此过程也同样适用。 唯一的区别是名称中会包含 'bluetooth',当然...如果您不确定,只需逐个尝试,直到找到正确的端口。
应用创意
使用 CUI32Stem 制作交互式项目非常简单!网上有成千上万的 Arduino 项目示例,只需进行少量修改(例如更改引脚名称以对应 CUI32Stem 的引脚等)即可编译。
对于那些对 BASIC 感兴趣的人——无论是刚开始学习还是想尝试一下……StickOS 真的有那么简单吗?
以下示例使用 CUI32Stem 展示了使用 StickOS 可以完成的一些简单任务,这些任务能够立即产生结果、提供鼓励和反馈。未来将开发更完整的“课程”,以展示如何使用许多 GROVE 元件。
1/5:让 LED 闪烁 作为嵌入式编程的“Hello World!”,我们来让 CUI32Stem 的引脚 'rd0' 上的 LED 闪烁:
> 10 dim led as pin rd0 for digital output
> 20 while 1 do
> 30 let led = !led
> 40 endwhile
> run
_
程序的第 10 行定义了一个名为“led”的变量,该变量绑定到 CUI32Stem 的引脚 rd0,并配置为数字输出;从此以后,对该变量的任何操作都会立即反映到引脚上。程序的第 20-40 行构成了程序的主循环。第 30 行简单地在循环内反转 CUI32Stem 引脚 rd0 上 LED 的状态。
哦!出了点问题——LED 没有闪烁,而是似乎半亮……哦!我们忘记添加延迟了!让我们用 <Ctrl-C> 停止程序,修复程序并添加 500ms 的延迟,然后从我们停止的地方继续:
<Ctrl-C>
STOP at line 30
> 35 sleep 500 ms
> cont
_
好多了!
现在让我们与 CUI32Stem 进行一些交互,再次用 <Ctrl-C> 停止程序……然后检查 LED 的状态(即打印“led”变量的值),并手动让 LED 闪烁:
<Ctrl-C>
STOP at line 35
> print led
0
> let led = 1
> print led
1
> let led = 0
> print led
0
>_
注意,当我们改变变量时,LED 的状态也随之改变!
2/5:使用定时器 ISR 让 LED 闪烁 现在我们的 LED 已经在闪烁了,让我们升级到使用定时器 ISR(中断服务程序)而不是编程循环——这样我们以后可以在“主循环”中做其他事情。我们保留程序的第 10 行,但删除后续所有行,列出程序并从那里开始:
> delete 20-
> list
10 dim led as pin rd0 for digital output
end
>_
第 10 行仍然定义了一个名为“led”的变量,该变量绑定到 CUI32Stem 的引脚 rd0,并配置为数字输出;第 20 行配置定时器 #1 每 500ms 弹出一次;第 30 行启用定时器中断,并指定每次定时器弹出时运行语句“let led = !led”(如果我们有更多工作要做,可以调用子程序);最后,第 40 行只是让主循环进入睡眠状态——从此我们只处理中断!
哇,这次居然一次就成功了! :-)
3/5:使用输出比较模块让 LED 闪烁 现在我们对定时器有了一些了解,让我们尝试使用 CUI32Stem 的“输出比较模块”外设,这样我们可以让 LED 闪烁而完全不使用 CPU!同样,这些都是职业用户使用的基本概念!
我们再次用 <Ctrl-C> 停止程序,然后直接在命令行中操作(甚至不写程序),因为我们对自己还不太确定……
<Ctrl-C>
STOP at line 40
> dim hz as pin rd0 for frequency output
> hz = 1
>_
第一行定义了一个名为“hz”的变量,该变量绑定到 CUI32Stem 的引脚 rd0,并配置为接收输出比较模块的输出;从此以后,对该变量的任何操作都会立即编程为输出比较模块的输出频率(以 Hz 为单位)。
哇,这太酷了!让我们让它变快一点:
> hz = 10
>_
再快一点:
> hz = 100
>_
我想把一个蜂鸣器连接到这个东西上,但在继续之前,让我们尝试另一个实验……
4/5:使用 A/D 转换器读取电位器 在这个实验中,我们将电位器的中间引脚连接到 CUI32Stem 的引脚 an0,电位器的外部引脚连接到地和 3.3V(当然,你也可以直接插入一个 GROVE 电位器元件)。我们再次在命令行中操作(不写程序),以便观察它的工作原理:
> dim pot as pin an0 for analog input
> print pot
1876
>_
第一行定义了一个名为“pot”的变量,该变量绑定到 CUI32Stem 的引脚 'an0',并通过 A/D 转换器配置为模拟输入;从此以后,对该变量的任何引用都会反映当前引脚上读取的毫伏数值!
现在让我们转动电位器,再试一次:
> print pot
1201
>_
太棒了!!!
5/5:将所有内容结合起来——模拟到频率转换器! 好了,让我们将 CUI32Stem 的引脚 rd0 上的 LED 替换为一个小蜂鸣器……现在让我们使用刚刚学到的所有技能编写一个程序,创建一个“模拟到频率转换器”!我们首先用“new”命令清除之前的所有内容,然后从这里开始:
> new
> 10 dim buzzer as pin rd0 for frequency output
> 20 dim pot as pin an0 for analog input
> 30 configure timer 1 for 100 ms
> 40 on timer 1 do let buzzer = pot
> 50 halt
> run
_
现在转动电位器,听听蜂鸣器的声音——它从 0 到 3300 Hz,每 100ms 从电位器更新一次!我们太棒了! :-)
继续(更高级的)StickOS 示例如下:
更高级的编程
安装 MPIDE 多平台 IDE 来编译适用于 CUI32Stem 的 Arduino 代码的步骤详见 此处。
使用 MPLAB 编写的简单 C 程序,根据按钮按下状态切换 LED:
#define SYSCLK 80000000L
#include <p32xxxx.h>
#include <plib.h>
int main(void)
{
SYSTEMConfigPerformance(SYSCLK);
LATE = 0xFFFE; TRISE = 0xFFFE;
while (1) {
LATEbits.LATE0 = PORTEbits.RE7;
}
return 0;
}
支持
在线原理图查看器
资源
如何购买
点击此处从 Seeedstudio Bazaar 购买。
仅购买 CUI32Stem 板(无针脚): 型号:https://www.seeedstudio.com/depot/cui32stem-p-1100.html?cPath=132_208
一个“入门套件”:(插入链接到 Bazaar) 文档 Wiki:CUI32Stem GROVE Dash Bundle
一个“完整套件”:(插入链接到 Bazaar) 文档 Wiki:CUI32Stem GROVE Lab Bundle
另请参阅
技术支持与产品讨论
感谢您选择我们的产品!我们为您提供多种支持,以确保您使用我们的产品时体验顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。