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

【CuriosityNano测评报告】+定时器Timer1测评

[复制链接]
673|3
手机看帖
扫描二维码
随时随地手机跟帖
mxkw0514|  楼主 | 2020-12-31 10:47 | 显示全部楼层 |阅读模式
本帖最后由 mxkw0514 于 2021-1-1 19:37 编辑

                                                        定时器定时点亮LED灯


本测评报告主要包含以下三个方面:
1、实物展示
2、项目开发
3、测评心得

1、实物展示
      
收到PIC16F15244Curiosity Nano评估工具包后,发现这款评估工具包有点不一样,主控芯片的封装变成了VQFN,评估版的尺寸少了一半,主要是主控芯片的引脚少了。评估板上的插针引脚连了一排半孔,这种半孔究竟有什么用呢?我有一次打样的PCB有半孔,是有实际用途的,结果价格加了好几倍,难道半孔对生产工艺要求很高吗?PIC16F15244Curiosity Nano评估工具包的实物图如下:
411385fed3b6ac32de.png

206905fed3b93c9987.png
2、项目开发
     改项目利用pic16f15244中的Timer1实现每1秒切换一次LED0。pic16f15244有三个定时器,分别为Timer0、Timer1和Timer3,其中Timer0为 8/16-Bit,Timer1为16Bit,Timer3为8Bit,时钟频率最大能达到32MHz,速度应该还算可以的。Timer1的寄存器结构图如下所示:

823745fed406503a0e.png             
     根据上面这张图,直接利用MCC配置好相关寄存器,就可以添加自己的程序了。这个项目比较简单,主程序main不用写程序。接下来说具体的项目程序
      既然是定时器,那就免不了中断。该项目中关于定时器的核心程序如下(具体程序见附件):
      void TMR1_ISR(void)
      {                    PIR1bits.TMR1IF = 0;                   //清楚定时器中断标志位   
         TMR1_WriteTimer(timer1ReloadVal);   
          if(TMR1_InterruptHandler)   
          {              
             TMR1_InterruptHandler();   
           }
        }
      void TMR1_DefaultInterruptHandler(void)
       {
          if(LED0_TRIS == 1)  
          {     
             LED0_SetDigitalOutput();            // 打开灯LED0
          }
          else  
          {   
             LED0_SetDigitalInput();             // 关闭灯LED0  
          }
      总共分两步就可以看到该定时器的核心函数。按住Ctrl+鼠标左键点击SYSTEM_Initialize()函数,进入该函数所在的文件;按住Ctrl+鼠标左键TMR1_Initialize(),进入该函数所在的文件。定时每隔1S使灯LED0的状态翻转一次,那么这一秒的定时是如何做到的呢?这一段代码如下(对上面核心代码起到解释的作用,MCC自动生成,主要包括定时器的初值和时钟频率的设置):

void TMR1_Initialize(void)
{
    T1GCON = 0x00;                                                              // T1GE disabled; T1GTM disabled; T1GSPM disabled;
    T1GATE = 0x00;
    T1CLK = 0x06;                                                               // CS MFINTOSC_500kHz;
    TMR1H = 0x0B;
    TMR1L = 0xDC;

    PIR1bits.TMR1IF = 0;                                                        // Clear IF flag before enabling the interrupt.
    timer1ReloadVal=(uint16_t)((TMR1H << 8) | TMR1L);                           // Load the TMR value to reload variable
    PIE1bits.TMR1IE = 1;                                                        // Enabling TMR1 interrupt.

    TMR1_SetInterruptHandler(TMR1_DefaultInterruptHandler);                     // Set Default Interrupt Handler

    T1CON = 0x31;                                                               // CKPS 1:8; NOT_SYNC synchronize; TMR1ON enabled; T1RD16 disabled;
}

void TMR1_WriteTimer(uint16_t timerVal)
{
    if (T1CONbits.NOT_SYNC == 1)
    {
        T1CONbits.TMR1ON = 0;                                                   // Stop the Timer by writing to TMRxON bit
        TMR1H = (timerVal >> 8);                                                // Write to the Timer1 register
        TMR1L = timerVal;
        T1CONbits.TMR1ON = 1;                                                   // Start the Timer after writing to the register
    }
    else                                                                        // Write to the Timer1 register
    {
        TMR1H = (timerVal >> 8);
        TMR1L = timerVal;
    }
}
      实验结果如**末尾所示(灯LED0每隔1S钟闪烁一次,与上述既定的功能一致):

3、测评心得
      这款PIC16F15244Curiosity Nano评估工具包,我在官网没有找到它的相关的设计文件。总体来说利用MCC配置比较方便,MCC只是一个工具,简化工作量,还是要对底层的嵌入式硬件要熟悉,不然换一款不同公司的单片机后,习惯了MCC后将很难进行下一步工作。PIC单片机是以稳定出名的,听说很多年前广受欢迎,不知道最近几年怎么样了,恕我孤陋寡闻,我还是个单片机的新手。总之,能用最简单的方法,绝不用复杂的方法,低配的8位单片机能实现的功能就不用高配的单片机,这样节省成本。PIC16F15244应该算是中配的单片机吧,这次测试还是比较让人满意。




LED.gif

PIC16f15244-Timer1-LED0.rar

538.64 KB

使用特权

评论回复
评论
MianQi 2020-12-31 18:51 回复TA
“这种半孔究竟有什么用呢?”—— 根据MicroChip自己的资料解释,这种半孔的目的是方便扩展板的使用,这里所说的扩展板类似于Arduino中的盾(shield)。它的用法是这样:不用焊接,将两排半孔直接卡在下边的扩展板的两排排针之间。不过,说明书也接着又说道,为了稳固,建议还是焊接。 
hu9jj| | 2020-12-31 10:51 | 显示全部楼层
本帖最后由 hu9jj 于 2020-12-31 12:21 编辑

评估板的长短也许与芯片引脚数量有关吧,Microchip的评估板多数都是边上有半孔的,也许是方便直接焊接在扩展的PCB板上吧。

使用特权

评论回复
mxkw0514|  楼主 | 2020-12-31 11:50 | 显示全部楼层
hu9jj 发表于 2020-12-31 10:51
评估板的长短也许与炭疽热引脚数量有关吧,Microchip的评估板多数都是边上有半孔的,也许是方便直接焊接在 ...

可能是的

使用特权

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

本版积分规则

32

主题

549

帖子

5

粉丝