PIC16F1933应用笔记
(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模块,精度如何?测试是否能够
PIC16F1933应用笔 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)