找回密码
 立即注册
楼主: ah***

STC8H8K64U的P2.0脚可以用PWM捕获功能做频率计吗

[复制链接]

该用户从未签到

46

主题

2997

回帖

6757

积分

超级版主

积分
6757
发表于 2024-1-12 09:15:02 | 显示全部楼层
xxkj2010 发表于 2024-1-12 08:25
有呀,发现IO可能有问题,就用STC-ISP中的IO测试程序直接烧到芯片中进行测试,但是结果还是不太稳定,P33 ...

这样情况,IO没有问题的。如果IO有问题,会一直有问题,不会“有时”出问题的。
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 168 天

    [LV.7]常住居民III

    67

    主题

    848

    回帖

    2844

    积分

    金牌会员

    积分
    2844
    发表于 2024-1-12 10:11:40 | 显示全部楼层
    梁工 发表于 2024-1-12 09:15
    这样情况,IO没有问题的。如果IO有问题,会一直有问题,不会“有时”出问题的。 ...

    大佬,很惭愧,我还是弄不出频率计
    1. TR1 = 0;                                //定时器1停止计时
    2. AUXR |=  (1<<6);// 1T
    3. //TMOD  = (TMOD & ~0x30) | 0x10;        // 16位
    4. TMOD |=  (1<<6);                // 定时器1用做计数器
    5. //TMOD |=  (1<<7);                // 定时器1由外部INT1高电平允许定时计数
    6. TL1 = 0;                                //设置定时初始值
    7. TH1 = 0;                                //设置定时初始值
    8. //TF1 = 0;                                //清除TF1标志
    9. ET1 = 1        ;                        // 允许Timer1中断
    10. TR1 = 1;                                //定时器1开始计时
    11. EA=1;//
    12. void Timer1_Isr(void) interrupt 3
    13. {
    14.         freq_H++;       
    15. }
    16. void INT1_Isr() interrupt 2
    17. {
    18.                 frequency = ((u32)freq_H << 16) + ((u32)TH1 << 8) + (u32)TL1;
    19.         freq_H = 0;        TH1 = 0;        TL1 = 0;
    20.         B_FrequencyOk = 1;
    21. }
    复制代码
    串口打印结果:
    01.jpg

    点评

    测频(频率计)是非常简单的操作,请重新说明你的要求,我写一个给你: 主频多少?那个IO输入?秒定时怎么来?哪个串口哪对IO返回?  详情 回复 发表于 2024-1-12 10:55
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2997

    回帖

    6757

    积分

    超级版主

    积分
    6757
    发表于 2024-1-12 10:55:43 | 显示全部楼层
    xxkj2010 发表于 2024-1-12 10:11
    大佬,很惭愧,我还是弄不出频率计
    串口打印结果:

    测频(频率计)是非常简单的操作,请重新说明你的要求,我写一个给你:
    主频多少?那个IO输入?秒定时怎么来?哪个串口哪对IO返回?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 168 天

    [LV.7]常住居民III

    67

    主题

    848

    回帖

    2844

    积分

    金牌会员

    积分
    2844
    发表于 2024-1-12 11:15:42 | 显示全部楼层
    本帖最后由 xxkj2010 于 2024-1-12 11:17 编辑

    直接在PWMB中断的时候对定时器1接收到的脉冲进行累计,省了用外部中断1,这样会产生多大的误差?



    01.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 168 天

    [LV.7]常住居民III

    67

    主题

    848

    回帖

    2844

    积分

    金牌会员

    积分
    2844
    发表于 2024-1-12 11:18:52 | 显示全部楼层
    梁工 发表于 2024-1-12 10:55
    测频(频率计)是非常简单的操作,请重新说明你的要求,我写一个给你:
    主频多少?那个IO输入?秒定时怎 ...

    现在可以实现了,但是不知道我现在采用的方式会产生多大的误差。谢谢你的帮助!

    点评

    误差是你的时钟误差+1LSB,计数器本身不会引入误差。 比如我使用一个很精确的时钟(压控调整+恒温+北斗模块校准),测频率就可以做到0.01PPM+1个字。  详情 回复 发表于 2024-1-12 13:15
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 168 天

    [LV.7]常住居民III

    67

    主题

    848

    回帖

    2844

    积分

    金牌会员

    积分
    2844
    发表于 2024-1-12 11:23:42 | 显示全部楼层
    本帖最后由 xxkj2010 于 2024-1-12 11:29 编辑
    梁工 发表于 2024-1-12 10:55
    测频(频率计)是非常简单的操作,请重新说明你的要求,我写一个给你:
    主频多少?那个IO输入?秒定时怎 ...

    请问PWMB进行计数时,它的计数器寄存器是不是PWMB_CNTR?我想在产生PWMB中断时把它清零一下。
    另外,单片机主频率24MHz,一般最大可以测多大频率的脉冲?

    点评

    PWMB的计数器是PWMB_CNTR。 你要清除的话,要注意时刻。设置周期后,计数值等于周期值,就会自动归0,不需要清除的,否则会出现误差。  详情 回复 发表于 2024-1-12 13:12
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2997

    回帖

    6757

    积分

    超级版主

    积分
    6757
    发表于 2024-1-12 13:12:58 | 显示全部楼层
    xxkj2010 发表于 2024-1-12 11:23
    请问PWMB进行计数时,它的计数器寄存器是不是PWMB_CNTR?我想在产生PWMB中断时把它清零一下。
    另外,单片 ...

    PWMB的计数器是PWMB_CNTR。
    你要清除的话,要注意时刻。设置周期后,计数值等于周期值,就会自动归0,不需要清除的,否则会出现误差。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2997

    回帖

    6757

    积分

    超级版主

    积分
    6757
    发表于 2024-1-12 13:15:24 | 显示全部楼层
    xxkj2010 发表于 2024-1-12 11:18
    现在可以实现了,但是不知道我现在采用的方式会产生多大的误差。谢谢你的帮助! ...

    误差是你的时钟误差+1LSB,计数器本身不会引入误差。
    比如我使用一个很精确的时钟(压控调整+恒温+北斗模块校准),测频率就可以做到0.01PPM+1个字。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 168 天

    [LV.7]常住居民III

    67

    主题

    848

    回帖

    2844

    积分

    金牌会员

    积分
    2844
    发表于 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;        
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 168 天

    [LV.7]常住居民III

    67

    主题

    848

    回帖

    2844

    积分

    金牌会员

    积分
    2844
    发表于 2024-1-12 13:31:11 | 显示全部楼层
    本帖最后由 xxkj2010 于 2024-1-12 21:02 编辑
    梁工 发表于 2024-1-12 13:15
    误差是你的时钟误差+1LSB,计数器本身不会引入误差。
    比如我使用一个很精确的时钟(压控调整+恒温+北斗模 ...

    我有空弄个普通晶振上去,看它测得的数据是否相对稳定些,现在测RX8025的32.768KHz信号 都有20Hz左右的波动。
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-13 12:32 , Processed in 0.075813 second(s), 71 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表