您的位置 首页 基础

PIC16F1933使用笔记

1关于编译器的98版本的使用。(1)按照专业软件文件夹98版本软件及使用方法安装即可。(记得OFF-LINE打勾)(2)需要在mplabide中选择

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模块,精度怎么?测验是否能够输出外部电压参阅电压?

通过测验发现DAC输出的电压比理论值会小0.02V,ADC转化出来的值也会有相同的问题,阅览手册发现,固定电压输出的精度在±4%左右,因为这个计划对电压精度要求很高,不能够到达要求,需运用431作为外部参阅。

另能够依照手册中的办法检查内部参阅电压究竟是多少,也便是能够输出到外部作为参阅电压。

DACEN = 0;

DACLPS = 1; // 挑选DAC正参阅电压源

DACOE = 1; // DACOUT输出

DACPSS0 = 0; // 挑选FVR作为参阅电压,需设置FVRCON相应位

DACPSS1 = 1;

DACNSS = 0; // vss

DACCON1 = 31;

内部参阅电压设置为4.096时,实测值为4.089,这儿表现出来精度禁绝还不显着。

当我内部参阅电压设置为4.096,DACCON1 = 20,的时分,原本应该输出2.56V,实测2.543V,差了差不多0.02V

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/259683.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部