OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4073|回复: 1

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

[复制链接]

2

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
477
金钱
477
注册时间
2016-10-21
在线时间
88 小时
发表于 2017-3-30 11:06:09 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 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);//               
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
477
金钱
477
注册时间
2016-10-21
在线时间
88 小时
 楼主| 发表于 2017-3-30 13:01:52 | 显示全部楼层
yklstudent 发表于 2017-3-30 12:48
看的云里雾里,信号直接处理下送到定时器输入引脚口就可以了吧,周期方和CCP捕捉基本。。。。

采集精度问题。。。
你说的这种实现要是能达到要求,我干嘛弄这么复杂的。。。。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 18:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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