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