到学校里事情有点多,笔记刚好写到ADC,ADC内容也有点多,所以暂时停更了,不过这份笔记我一定会去完善的,感兴趣的可以持续关注一下。
今天发现一个很好的开发MSP430单片机的IDE,感觉能够对大多数正在准备电赛和入门使用MSP430单片机的同学提供到很大的帮助,特意来发一份博客,将我收集的资料分享出来,需要的同学自取就可以了。
相信很多同学都听参加过电赛的学长说过Arduino,而今天的这份资料就是让大家使用Arduino的开发方式去开发MSP430。我是在Seeed发现的该方法,上面主要是介绍一款LaunchPad的扩展板,只是引出IO,想自制的也可以自制一块,也包括一些常见传感器使用的Demo,该教程我也会放在资料包里,官网链接为https://wiki.seeedstudio.com/cn/Grove_Base_BoosterPack/。
话不多说,以板载LED闪烁的Demo作为展示:
// most launchpads have a red LED
#define LED RED_LED
//see pins_energia.h for more LED definitions
//#define LED GREEN_LED
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(LED, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
像正常Arduino的开发流程,你只需要选择开发板定义,端口号(注意:端口处会显示两个串口,一个是下载口,一个是仿真口,我们选择下载端口),再点击上传就可以了。不过任何事物都有两面性,这只会让你快速开发Energia已有的开发板型号(LaunchPad系列),对其他MSP430型号的MCU和底层的一些寄存器学习并不会特别友善,但可以去阅读人家封装好的函数后再去学习底层知识,位置在:…\energia-1.8.10E23\hardware\energia\msp430\cores\msp430,LaunchPad型号定义在:\energia-1.8.10E23\hardware\energia\msp430\variants,个人建议大家都阅读一下吧,毕竟我们只是在使用人家写好的平台。
以下是Energia的官方链接:https://energia.nu/,我只翻译了部分介绍,感兴趣的同学可以自行去看看。
Energia 是一个开源电子原型设计平台,由 Robert Wessels 于 2012 年 1 月创立,其目标是将 Wiring 和 Arduino 框架引入基于德州仪器 MSP430 的 LaunchPad。 Energia IDE 是跨平台的,支持 Mac OS、Windows 和 Linux。 Energia 使用 Peter Bigot 的 msp gcc 编译器。Energia 包括一个集成开发环境 (IDE),它以处理 IDE(处理→接线→Arduino→Energia)为基础。 Energia 也是一个可移植的框架/抽象层,可以在其他流行的 IDE 中使用。
Energia 和 Arduino 的基础是 Hernando Barragan 开发的 Wiring 框架。该框架是为设计师和艺术家精心创建的,旨在鼓励来自世界各地的初学者和专家分享想法、知识和集体经验的社区。Energia 团队采用边做边学的理念,努力让直接使用硬件变得容易。专业工程师、企业家、制造商和学生都可以从 Energia 为微控制器带来的易用性中受益。
德州仪器(Texas Instruments)提供了 MSP430、MSP432x、TM4C、C2000、CC32xx 和 CC13xx LaunchPad, LaunchPad 是由德州仪器 (TI) 制造的低成本微控制器板。最新版本的 Energia 支持大多数 LaunchPad 产品。
最后再展示一个ADC12数值在数码管上的显示Demo吧:
#include "TM1637.h"
/* Macro Define */
#define CLK 39 /* 4-Digit Display clock pin */
#define DIO 38 /* 4-Digit Display data pin */
#define LED RED_LED /* blink LED */
#define ROTARY_ANGLE_P 24 /* pin of rotary angle sensor */
/* Global Variables */
TM1637 tm1637(CLK, DIO); /* 4-Digit Display object */
int analog_value = 0; /* variable to store the value coming from rotary angle sensor */
int blink_interval = 0; /* LED delay time */
int8_t bits[4] = {0}; /* array to store the single bits of the value */
/* the setup() method runs once, when the sketch starts */
void setup()
{
/* Initialize 4-Digit Display */
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);
/* declare the LED pin as an OUTPUT */
pinMode(LED, OUTPUT);
}
/* the loop() method runs over and over again */
void loop()
{
analog_value = analogRead(ROTARY_ANGLE_P); /* read the value from the sensor */
blink_interval = analog_value; /* store the rotary analog value */
digitalWrite(LED, HIGH); /* turn on LED */
memset(bits, 0, 4); /* reset array before we use it */
for(int i = 3; i >= 0; i--)
{
/* Convert the value to individual decimal digits for display */
bits[i] = analog_value % 10;
analog_value = analog_value / 10;
tm1637.display(i, bits[i]); /* display on 4-Digit Display */
}
/*
The amount of time the LED will be on and off depends on
the value obtained by analogRead().
*/
delay(blink_interval);
digitalWrite(LED, LOW);
delay(blink_interval);
}
实物照: