梁工
发表于 2024-1-12 09:15:02
xxkj2010 发表于 2024-1-12 08:25
有呀,发现IO可能有问题,就用STC-ISP中的IO测试程序直接烧到芯片中进行测试,但是结果还是不太稳定,P33 ...
这样情况,IO没有问题的。如果IO有问题,会一直有问题,不会“有时”出问题的。
xxkj2010
发表于 2024-1-12 10:11:40
梁工 发表于 2024-1-12 09:15
这样情况,IO没有问题的。如果IO有问题,会一直有问题,不会“有时”出问题的。 ...
大佬,很惭愧,我还是弄不出频率计
TR1 = 0; //定时器1停止计时
AUXR |=(1<<6);// 1T
//TMOD= (TMOD & ~0x30) | 0x10; // 16位
TMOD |=(1<<6); // 定时器1用做计数器
//TMOD |=(1<<7); // 定时器1由外部INT1高电平允许定时计数
TL1 = 0; //设置定时初始值
TH1 = 0; //设置定时初始值
//TF1 = 0; //清除TF1标志
ET1 = 1 ; // 允许Timer1中断
TR1 = 1; //定时器1开始计时
EA=1;//
void Timer1_Isr(void) interrupt 3
{
freq_H++;
}
void INT1_Isr() interrupt 2
{
frequency = ((u32)freq_H << 16) + ((u32)TH1 << 8) + (u32)TL1;
freq_H = 0; TH1 = 0; TL1 = 0;
B_FrequencyOk = 1;
}串口打印结果:
梁工
发表于 2024-1-12 10:55:43
xxkj2010 发表于 2024-1-12 10:11
大佬,很惭愧,我还是弄不出频率计
串口打印结果:
测频(频率计)是非常简单的操作,请重新说明你的要求,我写一个给你:
主频多少?那个IO输入?秒定时怎么来?哪个串口哪对IO返回?
xxkj2010
发表于 2024-1-12 11:15:42
本帖最后由 xxkj2010 于 2024-1-12 11:17 编辑
直接在PWMB中断的时候对定时器1接收到的脉冲进行累计,省了用外部中断1,这样会产生多大的误差?
xxkj2010
发表于 2024-1-12 11:18:52
梁工 发表于 2024-1-12 10:55
测频(频率计)是非常简单的操作,请重新说明你的要求,我写一个给你:
主频多少?那个IO输入?秒定时怎 ...
现在可以实现了,但是不知道我现在采用的方式会产生多大的误差。谢谢你的帮助!
xxkj2010
发表于 2024-1-12 11:23:42
本帖最后由 xxkj2010 于 2024-1-12 11:29 编辑
梁工 发表于 2024-1-12 10:55
测频(频率计)是非常简单的操作,请重新说明你的要求,我写一个给你:
主频多少?那个IO输入?秒定时怎 ...
请问PWMB进行计数时,它的计数器寄存器是不是PWMB_CNTR?我想在产生PWMB中断时把它清零一下。
另外,单片机主频率24MHz,一般最大可以测多大频率的脉冲?
梁工
发表于 2024-1-12 13:12:58
xxkj2010 发表于 2024-1-12 11:23
请问PWMB进行计数时,它的计数器寄存器是不是PWMB_CNTR?我想在产生PWMB中断时把它清零一下。
另外,单片 ...
PWMB的计数器是PWMB_CNTR。
你要清除的话,要注意时刻。设置周期后,计数值等于周期值,就会自动归0,不需要清除的,否则会出现误差。
梁工
发表于 2024-1-12 13:15:24
xxkj2010 发表于 2024-1-12 11:18
现在可以实现了,但是不知道我现在采用的方式会产生多大的误差。谢谢你的帮助! ...
误差是你的时钟误差+1LSB,计数器本身不会引入误差。
比如我使用一个很精确的时钟(压控调整+恒温+北斗模块校准),测频率就可以做到0.01PPM+1个字。
xxkj2010
发表于 2024-1-12 13:28:32
梁工 发表于 2024-1-12 13:12
PWMB的计数器是PWMB_CNTR。
你要清除的话,要注意时刻。设置周期后,计数值等于周期值,就会自动归0,不 ...
我以为在PWM中断中运行下面代码的时候,PWM会自动再次计数,从而产生误差
frequency = ((u32)freq_H << 16) + ((u32)TH1 << 8) + (u32)TL1;
freq_H = 0; TH1 = 0; TL1 = 0;
B_FrequencyOk = 1;
xxkj2010
发表于 2024-1-12 13:31:11
本帖最后由 xxkj2010 于 2024-1-12 21:02 编辑
梁工 发表于 2024-1-12 13:15
误差是你的时钟误差+1LSB,计数器本身不会引入误差。
比如我使用一个很精确的时钟(压控调整+恒温+北斗模 ...
我有空弄个普通晶振上去,看它测得的数据是否相对稳定些,现在测RX8025的32.768KHz信号 都有20Hz左右的波动。