首页 > 评测 > 简约而不简单的好奇心——Microchip Curiosity开发板评测

简约而不简单的好奇心——Microchip Curiosity开发板评测

Microchip   Curiosity   PIC   DIP   
  • 作者:邵子杨
  • 来源:21ic
  • [导读]
  • 现在不少人都认为,8位和16位MCU即将消亡,32位MCU性价比和功耗方面更具有优势。然而Mcicrochip并没有放弃和削减8位PIC的市场,相反地,在去年年中,Microchip推出了一款全新的Curiosity开发板。

使用MCC进行程序开发

前面介绍了在MPLAB X IDE中可以使用MCC(MPLAB Code ConConfigurator)进行软件快速开发,下面我们就重点来试试这个功能,并用MCC快速实现一个呼吸灯程序。

要使用MCC(MPLAB Code ConConfigurator),首先需要安装这个它。MCC不是一个独立的软件,它是做为MPLAB X IDE的插件使用的。在安装MPLAB X IDE时,是没有附带这个插件的,它需要我们自己安装它。

安装时,先从MPLAB X IDE的Tool菜单下,找到Plugins(插件)子菜单,进去后选择Available Plugins(可用插件),就可以看到MPLAB Code Configurator了。选中它前面的选择框,然后点击左下角的Install,就可以自动下载并安装MCC了。

11.jpg

安装后,需要重新启动一次MPLAB X IDE,才能正常使用MCC。在Tools菜单下的Embedded菜单下,我们就能够看到MPLAB Code Configurator。

12.jpg

下面我们就用MCC创建一个呼吸灯程序(LED逐渐变亮,在逐渐变暗),体验一下MCC的强大功能。首先需要创建一个MPLAB X IDE项目,创建过程和其他项目没有什么区别。

13.jpg

只是在仿真器这里,我们需要选择Curiosity开发板带有的Starter Kits(PR08)。

14.jpg 

创建后,先从Tools菜单下运行MCC(MPLAB Code Configurator)。进入MCC后,我们首先就要选择需要用到的硬件模块(Modules)。它在MPLAB X IDE软件的左边中间位置,鼠标双击就可以将需要使用的模块加入到项目。

15.jpg

为了实现呼吸灯功能,我们需要使用到PWM功能,改变PWM的占空比来调整LED的亮度。PIC16F1619有两个PWM模块:PWM3和PWM4,我们先添加PWM3模块到项目中(如果添加PWM4就可以实现两个呼吸灯)。

16.jpg

添加PWM3时,会自动添加TMR2模块,因为PWM功能需要使用到定时器,PIC16F1619有六个定时器,但是只有TMR2/TMR4/TMR6支持PWM功能,默认是TMR2,也可以改用其他两个定时器。

然后是分配PWM3使用的单片机GPIO。在MPLAB X IDE软件的右上角,我们可以看到引脚管理功能。每个单片机功能模块是一行,而每个GPIO是一列。如果一个GPIO支持某个单片机的功能,就会在对应的交叉位置显示一个锁的图标,没有上锁代表引脚可以分配,锁住就代表已经分配了。

17.jpg

Curiosity开发板的原理图上,我们可以看到LED使用了RA1、RA2、RA5、RC5这4个引脚。在引脚管理功能中,可以看到PWM3支持这几个GPIO,我们先选择RA1,用鼠标点击PWM3和RA1交叉对应的分配引脚后,就变为下图所示,这就代表将RA1分配给了PWM3。

18.jpg

在MPLAB X IDE软件的中间,按下Grenrate Code按钮,自动产生代码。因为前面我们还没有创建主程序,所以MCC还会提示是否需要创建main.c。

19.jpg

使用了PWM3,所以MCC会自动创建PWM3.c和PWM3.h文件。PWM3.h中包含了PWM3模块相关的接口函数,我们可以看到有两个:

 void PWM3_Initialize(void);

 void PWM3_LoadDutyValue(uint16_t dutyValue);

一个是PWM3初始化,它会在MCC初始化函数中自动调用。另外一个函数是PWM3_LoadDutyValue,它就是用来控制PWM3占空比的。

20.jpg

然后在main.c的主程序中,添加下面的代码,实现呼吸灯的功能。

while (1) {

// Add your application code

duty = 0;

while(duty <= ( 1024-16))

{

__delay_ms(20);

duty += 16;

PWM3_LoadDutyValue(duty);

}

duty = 1024;

while(duty >= 16)

  • 本文系21ic原创,未经许可禁止转载!

网友评论