打印
[PIC®/AVR®/dsPIC®产品]

【Curiosity Nano测评报告】PIC16F13145通过PWM实现呼吸灯

[复制链接]
32|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
    PIC16F13145与传统的51和32的开发流程有些许的不同。首先是搭建环境,搭建环境可以参考之前写的文章[PIC®/AVR®/dsPIC®产品] 【Curiosity Nano测评报告】PIC16F13145 Curiosity Nano开发环境搭建。在搭建环境之后便是开始开发了。
一、新建工程
    软件的开发都是从新建工程开始,PIC16F13145也不例外。首先点击左上角的File,然后选择New Project,或者直接快捷键Ctrl+Shift+N。不过需要注意的是最好先将板卡通过Type-c线接上电脑。我之前忽略了这一点,就会导致工具选项不能选择正确的而是代码下载按钮一直是灰的不能使用的状态。

     接下来会出现如下界面,直接默认就可以


    然后是选择板卡型号,如下图


     如果插上板卡就会自动识别出工程对应的型号,在Tool的选项中一定要选择对应的板卡,否则下载代码按钮不能用。


    接下来是选择编译器,如果在环境搭建中搭建好了的话,就会出现对应的选项,否则无选项可以选,需要参考环境搭建文章。选择后点击Next会出现如下图


    这是选择工程保存位置和工程名。我这工程名和存放路径都是英文的且名称一样。至于能不能含有中文等问题有需求的可以尝试一下。

二、图形化编辑

     PIC提供图形化编辑软件MCC,相当于STM32CubeMax,感觉还挺好用的。打开MCC的方式点击如下图中的方框,启动时间可能有点慢,这个得看个人电脑性能


     在左侧的功能栏中选择PWM、TIM2和DELAY。在Device Resources栏中选择后会在Project Resources中会显示出来,说明选择成功。


    在右侧的设置栏中按照如下图的配置即可



     其他的配置都可以是默认的。这些配置也很简单,也可以按照其他的配置自由发挥。需要注意的是PWM使用TIM2定时器。

     接下来是配置对应的I/O口,在软件下面找到对应的PWM并选择RC2作为对应的输出口就行。因为原理图中LED接的是RC2上。



      点击Generate生产代码如下图所示


三、编写用户函数

      在Project栏中找到Source Files文件夹下打开main.c文件


      main.c文件非常简单,主要的是系统初始化函数SYSTEM_Initialize();。按住Ctrl键点击该函数可以查看函数的定义。

      修改main函数如下

int main(void)
{
    uint16_t Bright = 0;
    uint16_t Step = 3;           
    uint16_t DelayTime = 50;
            
    SYSTEM_Initialize();
    // If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
    // If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global and Peripheral Interrupts
    // Use the following macros to:

    // Enable the Global Interrupts
    //INTERRUPT_GlobalInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Enable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptEnable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

    while(1)
    {
        for(Bright = 0; Bright < 100; Bright += Step)
        {
            PWM1_LoadDutyValue(Bright);
            DELAY_milliseconds(DelayTime);
        }        
        DELAY_milliseconds(50);
        for(Bright = 100; Bright >= 10; Bright -= Step)
        {
            PWM1_LoadDutyValue(Bright);
            DELAY_milliseconds(DelayTime);      
        }
        DELAY_milliseconds(40);
    }   
}
三、下载验证

     点击下载按钮可以查看板卡的LED如视频所示



     因为效果,所以代码中的延时并不是一样的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝