最近公司在生产一批产品,主控用的是PIC16F726 ssop28。内振8M,外振32.768K ,外围无匹配电容(前辈设计的电路)定时器使用的是TIM1。定时时间为1S,用的是PM3烧录器离线烧录。请教一下论坛的朋友有没有遇到这种问题并有解决方法的。供应商那边也在分析着。
问题:在测试 过程中出现50%以上指示灯常亮的问题。
1:怀疑是不起振,用示波器测量后,有起振。对比好的板子波形,判断不是晶体问题。
2:怀疑是板子问题?把好的板子和不正常的板子上的主控对调后,正常的板子变成不正常了。不正常的变成正常了。判断不是板子问题
3:怀疑是芯片问题,编写了一个用TIM1定时1S,LED 1s正反输出。烧录后发现LED不会1S闪烁,判断不是软件问题
4:怀疑是晶体没有匹配电容的问题,加上10p的匹配电容后,问题一样。
5:怀疑是外围电路有影响,把mcU换到另外一款板子上,发现LED正常闪烁。换了2个板子,也是这样。一脸懵,
6:当时想了一下,是不是mcu焊接过还留有温度的问题,把板子接电放在小风扇前吹,发现灯慢慢的就不闪烁了。用洛铁在IC上加热一下,又闪烁了,冷却后有不正常了。现在是真不知道什么问题了........
void Reg_TIMER1_Config(void)
{
T1CON=0xAC;//0x88; //TIMER1 控制寄存器 '在睡眠时timer1可以用'
//bit 7-6 TMR1CS<1:0>:Timer1 时钟源选择位 11 = Timer1 时钟源为容性传感振荡器(CAPOSC)
// 10 = Timer1 时钟源为引脚或振荡器:
// 如果T1OSCEN = 0:来自T1CKI 引脚的外部时钟(上升沿触发计数)
// 如果T1OSCEN = 1:T1OSI/T1OSO 引脚上的晶振
// 01 = Timer1 时钟源为系统时钟(FOSC)
// 00 = Timer1 时钟源为指令时钟(FOSC/4)
//bit 5-4 T1CKPS<1:0>:Timer1 输入时钟预分频比选择位 11 = 1:8 预分频比 10 = 1:4 预分频比 01 = 1:2 预分频比 00 = 1:1 预分频比
//bit 3 T1OSCEN:LP 振荡器使能控制位 1 = 使能专用的Timer1 振荡器电路 0 = 禁止专用的Timer1 振荡器电路
//bit 2 T1SYNC:Timer1 外部时钟输入同步控制位 TMR1CS<1:0> = 0X
// 1 = 不同步外部时钟输入
// 0 = 将外部时钟输入与系统时钟同步(FOSC)
// TMR1CS<1:0> = 1X
// 该位为无关位。当TMR1CS<1:0> = 1X 时, Timer1 使用内部时钟。
//bit 0 TMR1ON:Timer1 使能位 1 = 使能Timer1 0 = 停止Timer1 清除Timer1 门控触发器
// TMR1H = 0xFF;
// TMR1L = 0xdf;
TMR1H = 0xE0;
TMR1L = 0xBF;
T1GCON=0x00;
PIE1|=0x01;
PIR1&=~0x01;
T1CON|=0x01
INTCON|=0xc0
}
if(TMR1IF&TMR1IE)
{
//每次1S
TMR1ON = 0; //防写冲突先关再写
TMR1H = 0xE0;
TMR1L = 0xBF;
TMR1ON = 1;
timer1s_flag =1;
TMR1IF = 0;
}
|