微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC16F1933应用笔记

PIC16F1933应用笔记

时间:11-25 来源:互联网 点击:
1. 关于编译器的9.8版本的使用。

(1) 按照专业软件文件夹9.8版本软件及使用方法安装即可。(记得OFF-LINE打勾)

(2)需要在mplab ide中选择HI-TECH Universal Toolsuite 然后路径一样指向picc.exe,这个时候编译的图标将变化为黑色和红色。

2. 关于配置位设置方法:如果是第一次操作的话,建议看着数据手册进行在mplab ide菜单里面进行设置,配置完后,系统会根据你配置的,自动给出配置位的具体数据。记下然后,在程序里面最开始添加这样两行:

__CONFIG(0x0FA4);

__CONFIG(0x3AFF);

这样的好处是新建工程的时候,将这个源码添加进去的话,就不用再次设置了,编译器会根据这两行程序进行自动设置。

3. 关于16F1933的使用内部振荡的系统时钟设置

除了32MHz的系统时钟,都可以按照这样的步骤:

1)禁用4倍频(SPLLEN = 0),设置使用8MHz内部振荡IRCF<3:0>=1110,系统时钟选择位SCS<1:0>=1X或00

2)等待高频内部振荡器就绪 HFIOFR = 1

3)确定高频内部振荡器稳定 HFIOFS = 1 (精度至少为0.5%)

例程:

OSCCON = 0B01110000; // 8MHz,INTOSC

while(!HFIOFR);

while(!HFIOFS);

4)如果需要设置32MHz,系统时钟选择为SCS<1:0>=1X,这里不能够=00;

例程:

OSCCON = 0B11110000; // 32MHz,INTOSC

while(!HFIOFR);

while(!HFIOFS);

4. 在定时器2,4,6中,有TMRX与PRX有区别,作用分别是什么?后预分频有什么作用?

只使用TMRX的时候,可以用来装载一个初值来计数,直到溢出。

只使用PRX的时候,可以装载一个具体计数到次数,因为这里是当TMRX=PRX时,触发定时器X中断。使用PRX的好处是,可以在中断中省掉一条重新装载初值的语句,也就是实现了所谓的“自动重新装载计数器初值”。

后预分频的作用为,当你定时进入中断的周期为1ms,而后预分频设置为1/X的话,那么你实际进入中断的周期变为了Xms。由于定时器2,4,6不后预分频输出主要应用于CCP模块,它用作CCP模块在PWM模式下工作时的时基。

5. 由于我的应用中需要高的pwm分辨率,所以将使用32MHz的系统时钟

如果周期相同,是否可以使用相同的定时器?是否周期不同则需使用不同的定时器?

如果周期相同,则可以使用同一个定时器来产生PWM,周期不同的话必须使用不同的定时器。

6. 关于I/O口初始化,初始化不正确的话相应的功能不能正常使用。

是否一定要初始化ANSELA,ANSELB,APFCON这些关于I/O口相关的寄存器,他们各有什么用?

在关于备份管脚datasheet中说明有冲突,引脚图看上面CCP2可以配置到RC1或RB3,但是在具体说明寄存器作用的时候却说RC0和RB5,到底哪个是正确的?

ANSELA,ANSELB不配置对PWM产生没有影响,但是建议配置。APFCON一定需要正确配置。

当CCP2SEL =0时,PWM在RC1上面产生。

当CCP2SEL =1时,PWM在RB3上面产生。

当配置增强型PWM时,这个时候会用到P2BSEL,用来选择P2B输出管脚,CCP2/P2A可以配置到RC1或RB3,CCP2/P2B可以配置RC0和RB5。

7. 试试占空比两个极限值0%,100%的情况

当采用PRX=0xFF的时候,设置占空比100%会出现毛刺的情况.因为这个时候4*(255+1)=1024=0x400,数据已经溢出.是不是当分辨率达到10bit的时候,就不能完全按照占空比100%输出.

问题?

在使用PIC16F1933的时候,发现在采用10bit的PWM输出占空比为100%的时候,会有很多毛刺产生,而不采用10bit的PWM输出则没有毛刺。

个人分析了一下,我是采用定时器4来作为CCP1输出PWM的时基,需要采用10bit的PWM则PR4=0xFF,按照数据手册上面计算占空比的公式:100%=(CCPR4L:CCP4CON<5:4>)/(4*(PR4+1))

CCPR4L:CCP4CON<5:4> = 4*(PR4+1) = 4*(0xFF+1)=0x400=0B100 0000 0000

上面的寄存器是12bit的,而后面的计算结果为13bit的,是否这个原因造成输出占空比100%的10bit PWM而产生很多毛刺,故在实际项目的时候如果需要达到满占空比的话不能选择PRX=0xFF,选择PRX=0xFE。

8. 在调试串口的时候发现,当上电或者下电的时候会出现串口发送几个乱码的情况,可能是由于复位端口没有作为复位使用的原因,有待验证。

通过实验表明上电和下电的时候有可能发生乱码的原因是,在上电或者下电的过程中,可能在芯片确认上电电压附近抖动,造成芯片误判上电的情况出现而发生乱码。在配置位中有个PWRTE的寄存器,为使能上电延时定时器的,将这个寄存器配置为1,这种情况消失。另出现这个情况跟复位端口作为输入管脚没有关系。

9. 需要确认一个100us的函数,在非常短的延时上面可能用到。

32MHz的情况下 i=255,11.0592MHz的情况下i=89;

Void delay100us(void)

{

Uint8 i = 255;

While(i--);

}

10. 关于DAC模块,精度如何?测试是否能够

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top