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

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

[复制链接]
  • TA的每日心情
    开心
    昨天 07:22
  • 签到天数: 188 天

    [LV.7]常住居民III

    67

    主题

    884

    回帖

    2996

    积分

    金牌会员

    积分
    2996
    发表于 2024-1-4 11:46:08 | 显示全部楼层
    梁工 发表于 2024-1-4 11:32
    不是,频率计的计数是纯硬件完成的,中断不会导致误差。
    造成误差的原因是使用的是内部时钟,秒级的间隔 ...

    同一时刻同一环境,芯片内部的IRC振荡频率会漂移吗?

    点评

    秒级的间隔,抖动在0.1%~0.2%左右。  详情 回复 发表于 2024-1-4 12:10
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3124

    回帖

    7049

    积分

    超级版主

    积分
    7049
    发表于 2024-1-4 12:09:38 | 显示全部楼层
    本帖最后由 梁工 于 2024-1-4 12:15 编辑
    xxkj2010 发表于 2024-1-4 11:44
    恒温晶振一个近100元,那不如买个二手的频率计呢。频率计应该都用上恒温晶振吧? ...

    便宜的频率计一般都是10ppm级别的精度。那些国外大牌子的不知道。

    那不如买个二手的频率计呢”,这让我想起了一句话:造不如买,买不如租!这可就是当前光刻机、高端芯片等等的困境。
    我这样提示,是想让人多学学技术。如果什么都去买,那没必要学电子技术了,因为对一般的玩电子的人来说,你想要的,这个世界基本都有了,某宝搜搜基本都能买到。比如一个红外遥控器,5毛钱就可以买一本,为什么要自己做?  所以,我觉得好多人红外遥控器、接收程序都做不好。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3124

    回帖

    7049

    积分

    超级版主

    积分
    7049
    发表于 2024-1-4 12:10:12 | 显示全部楼层
    xxkj2010 发表于 2024-1-4 11:46
    同一时刻同一环境,芯片内部的IRC振荡频率会漂移吗?

    秒级的间隔,抖动在0.1%~0.2%左右。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:22
  • 签到天数: 188 天

    [LV.7]常住居民III

    67

    主题

    884

    回帖

    2996

    积分

    金牌会员

    积分
    2996
    发表于 2024-1-11 12:09:18 | 显示全部楼层
    本帖最后由 xxkj2010 于 2024-1-11 12:10 编辑
    梁工 发表于 2024-1-3 14:37
    做频率计,可以参考我的示波器的频率计:P3.5(T1)输入频率信号,P3.3是闸门信号。

    大佬,没有你的水平,现在参考你的示波器代码,还是无法实现外部中断1(无法等到中断)
    1. //PWMB 设置        
    2.         PWMB_ENO    = 0;        // IO输出禁止
    3.         PWMB_IER    = 0;        // 禁止中断
    4.         PWMB_SR1    = 0;        // 清除状态
    5.         PWMB_SR2    = 0;        // 清除状态
    6.         ccer1 = 0;
    7.         ccer2 = 0;
    8.         PWMB_ISR_En = 0;
    9.         
    10.         PWMB_PSCRH = (u8)((24000-1)/256);                // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
    11.         PWMB_PSCRL = (u8)((24000-1)%256);
    12.         PWMB_ARRH  = (u8)(1010/256);        // 自动重装载寄存器,  控制PWM周期
    13.         PWMB_ARRL  = (u8)(1010%256);
    14.         PWMB_CCMR3  = 0x68;                // 通道模式配置, PWM模式1, 预装载允许
    15.         PWMB_CCR3H  = (u8)(1000/256);        // 比较值, 控制占空比(高电平时钟数)
    16.         PWMB_CCR3L  = (u8)(1000%256);
    17.         ccer2 |= 0x05;                        // 开启比较输出, 高电平有效
    18. //        PWMB_ISR_En|= 0x08;                // 使能中断
    19.         PWMB_CCER1  = ccer1;        // 捕获/比较使能寄存器1
    20.         PWMB_CCER2  = ccer2;        // 捕获/比较使能寄存器2
    21.         PWMB_PS     |= (1<<4);                // 选择IO, 0:选择P2.2, 1:选择P3.3, 2:选择P0.2, 3:选择P7.6,
    22.         PWMB_IER    = PWMB_ISR_En;        //设置允许通道1~4中断处理
    23.         PWMB_BKR    = 0x80;                // 主输出使能 相当于总开关
    24.         PWMB_CR1    = 0x81;                // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,  bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
    25.         PWMB_EGR    = 0x01;                //产生一次更新事件, 清除计数器和预分频计数器, 装载预分频寄存器的值
    26.         PWMB_ENO   |= 0x10;                        // IO输出允许,  bit6: ENO8P, bit4: ENO7P,  bit2: ENO6P,  bit0: ENO5P
    27. void INT1_Isr() interrupt 2
    28. {
    29.         LED = ~LED;                             //测试端口        
    30. }
    复制代码
    单片机是STC8H1K17T,IRC频率24MHz。

    是不是因为STC8与STC32的区别?

    点评

    外中断初始化就两行: EX1 = 1; //允许中断 IT1 = 1; //下降沿中断 EA = 1; /********************* INT0中断函数 *************************/ void INT1_ISR(void) interrupt INT1_VECTOR { frequency = ((u3  详情 回复 发表于 2024-1-11 15:24
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3124

    回帖

    7049

    积分

    超级版主

    积分
    7049
    发表于 2024-1-11 15:24:15 | 显示全部楼层
    xxkj2010 发表于 2024-1-11 12:09
    大佬,没有你的水平,现在参考你的示波器代码,还是无法实现外部中断1(无法等到中断)
    单片机是STC8H1K17 ...

    外中断初始化就两行:
            EX1 = 1;        //允许中断
            IT1 = 1;        //下降沿中断

    EA = 1;

    /********************* INT0中断函数 *************************/
    void INT1_ISR(void) interrupt INT1_VECTOR
    {
            frequency = ((u32)freq_H << 16) + ((u32)TH1 << 8) + (u32)TL1;
            freq_H = 0;        TH1 = 0;        TL1 = 0;
            B_FrequencyOk = 1;
    }
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:22
  • 签到天数: 188 天

    [LV.7]常住居民III

    67

    主题

    884

    回帖

    2996

    积分

    金牌会员

    积分
    2996
    发表于 2024-1-11 15:50:24 | 显示全部楼层
    梁工 发表于 2024-1-11 15:24
    外中断初始化就两行:
            EX1 = 1;        //允许中断
            IT1 = 1;        //下降沿中断

    有开外中断1:
    EX1 = 1;        //允许中断
    IT1 = 1;        //下降沿中断
    EA = 1;

    点评

    那肯定可以进入外中断INT1的。  详情 回复 发表于 2024-1-11 19:16
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3124

    回帖

    7049

    积分

    超级版主

    积分
    7049
    发表于 2024-1-11 19:16:17 | 显示全部楼层
    xxkj2010 发表于 2024-1-11 15:50
    有开外中断1:
    EX1 = 1;        //允许中断
    IT1 = 1;        //下降沿中断

    那肯定可以进入外中断INT1的。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:22
  • 签到天数: 188 天

    [LV.7]常住居民III

    67

    主题

    884

    回帖

    2996

    积分

    金牌会员

    积分
    2996
    发表于 2024-1-11 20:27:35 | 显示全部楼层
    梁工 发表于 2024-1-11 19:16
    那肯定可以进入外中断INT1的。

    这就怪了,今晚终于有一次测试可以让INT1中断了。
    而在这之前,多次测试的结果都不成,
    甚至当出现这情况的时候,单独测试P33=~P33;(当然有注意到IO模式的配置等问题)都无法让P33正常的翻转,
    我真怀疑这是IO口的问题了,反正觉得这IO口怪怪的。

    点评

    那你应该用STC官方的例子测试下。  详情 回复 发表于 2024-1-11 21:47
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3124

    回帖

    7049

    积分

    超级版主

    积分
    7049
    发表于 2024-1-11 21:47:03 | 显示全部楼层
    xxkj2010 发表于 2024-1-11 20:27
    这就怪了,今晚终于有一次测试可以让INT1中断了。
    而在这之前,多次测试的结果都不成,
    甚至当出现这情况 ...

    那你应该用STC官方的例子测试下。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:22
  • 签到天数: 188 天

    [LV.7]常住居民III

    67

    主题

    884

    回帖

    2996

    积分

    金牌会员

    积分
    2996
    发表于 2024-1-12 08:25:33 | 显示全部楼层
    梁工 发表于 2024-1-11 21:47
    那你应该用STC官方的例子测试下。

    有呀,发现IO可能有问题,就用STC-ISP中的IO测试程序直接烧到芯片中进行测试,但是结果还是不太稳定,P33口有时会翻转有时不会,所以才怀疑是P33端口有问题。

    点评

    这样情况,IO没有问题的。如果IO有问题,会一直有问题,不会“有时”出问题的。  详情 回复 发表于 2024-1-12 09:15
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-6-3 04:50 , Processed in 0.068472 second(s), 65 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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