在线情况
楼主
  • 头像
  • 级别
    • 积分11
    • 经验332
    • 文章8
    • 注册2011-07-28
    关于捕获频率并显示出来的问题
    [P]设置了一个unsigned int变量temp 用来测量周期 也就等于两个上升沿之间的差 然后设置 d= 1/(temp/32768)就是我用信号发生器发出来的波的频率 经计算 也确实这样 其中32768 是我计数用的频率 但是我在数码管上却不能显示出来 数码管设置全没问题 主要是 我计数出来的d就是频率 但是通过watch窗口看却总是65535  我上个图 就清楚了 图中temp 就是我捕获的值 这个是我用信号发生器发的500hz的波 用d= 1/(temp/32768) 应该等于500 才对 但是他却一直显示65535 我猜想是小数点他也算进去了 所以一直是65535[/P][P]DC老师 求指教啊![/P]
    [upload=2071,0]360安全浏览器截图16679296.jpg[/upload]
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    [P][EM14] 嘿嘿~~[/P][P]65535正是0xFFFF呢,也就是说你的d一直为0xffff。有种可能你的“d= 1/(temp/32768)”公式中,计算出来的d值已超出了int型号。这个问题分两部分,超出了16位了的结果是到低你的真正计算值超出了16位,还是你的公式中有误才导至这个错误呢?[/P][P]我们来一起分析一下吧[EM15]
    如果是500HZ,则周期为2mS,2/(1/326768)=65.536
    这65.536算出来是浮点的,在你的算法函数中是否有采用浮点运算做法进行计算?
    如果有,最后得将这个浮点转换成整型值然后再将其值显示出来。[/P][P]这步你做到了吗?
    嘿嘿...估计你这么算,也不算啥新手了,有基础的。显示,一看就知道没问题,但算法和转换数值上可能这步出问题了。[/P][P]我罗嗦说句,我猜,我猜猜...估计问题就出在法算和数值....[EM48][/P]
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    3
    • 头像
    • 级别
      • 积分11
      • 经验332
      • 文章8
      • 注册2011-07-28
      [P]蒽  是的 我想到了小数点方面的问题 但无从下手 这样的话 我等下用c语言里面的强制转换试一下   谢谢老师[/P]
      微控网感谢您的参与
      在线情况
      4
      • 头像
      • 级别
        • 积分11
        • 经验332
        • 文章8
        • 注册2011-07-28
        ok了 本来其实没错了 只是不知道怎么回事 d= 1/(temp/32768) 它就显示 65535 但是我把这个算式简化成327168/temp就能显示正确数值了  擦!
        微控网感谢您的参与
        在线情况
        5
        • 头像
        • 级别
        • 门派
        • 职务总版主
        • 声望+9
        • 财富5
        • 积分3065
        • 经验390701
        • 文章6744
        • 注册2006-03-07
        我觉得楼主你描述有不妥,你说公式中的“d= 1/(temp/32768)”,“式简化成327168/temp”这两个完全不同的,为啥说“其实没错”。[EM05]
        [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
        Powered by LeadBBS 9.2 .
        Page created in 0.2344 seconds with 5 queries.