有没有大神用429做过频率量采集的

2019-07-20 15:47发布

本帖最后由 Crime毛豆 于 2017-3-30 11:15 编辑

简单说一下,做了6个通道,接入频率信号。每秒读一次每个通道采集的信号个数。

计数采用的是4040,然后用4021将并行数据转成串行数据。
总结来说就是信号进来--4040计数---4021并转串----每一秒读取一次4021锁存的数值。
现在问题来了:只接入单个信号,显示计数值稳定,(比如都是50),无论换那个通道,只接入该信号,计数值都稳定为50.
但是,接入两个和两个以上信号,频率较低的信号计数值错误。。。
比如:单独接入1k 技术值稳定为50,
         单独接入2k 计数值稳定为100,
        1k和2k一起接入(1k接入通道1,2k接入通道2),1k的计数值变为80(总之就是远远偏大,但小于比它频率高的信号计数值)。2k计数值不变,仍旧为100.。。

不贴代码的不是好求助。。。代码主要只操作4021读数,所以只贴一个通道。。其他通道都是复制粘贴。。改变对应引脚就行。。。
主要问题是,在硬件和软件上都没有6个通道交叉的部分。。。不知道为什么会造成这个问题?。。。
小白一枚。。。
u8 CD4021_Read4(void)
{
        u16 temp=0;
        temp=CD4021_DAT4;
  CD4021_CLK4=1;        
  CD4021_CLK4=1;
  CD4021_CLK4=1;  
  CD4021_CLK4=1;                     
  CD4021_CLK4=0;            
        return temp;        
}
u8 CD4021_Receive4(void)
{
u16 key=0;
u16 SSF=0;
int SSFc=0;
u8 i=0;
  for(i=0;i<12;i++)
        {
                key=CD4021_Read4();
                SSF=key+SSF*2;
        }                  

/*-----------------output original data-------------*/
SSFc=SSF-pre_SSF4;
pre_SSF4=SSF;
return SSFc;
}
4021锁存用了一个特定信号,作为外部中断,中断一来就锁存数据,开始读。。。
void EXTI0_IRQHandler(void)
{
  EXTI->IMR|=0X00000000;        //???????? this statement do nothing
        Ns=CD4021_Receive4();
        EXTI_ClearITPendingBit(EXTI_Line0);//               
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。