OpenEdv-开源电子网

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

stm32F103+ATT7022e31次谐波测量

[复制链接]

3

主题

14

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-10-23
在线时间
7 小时
发表于 2017-3-30 21:52:21 | 显示全部楼层 |阅读模式
20金钱
有哪位大神用过stm32与ATT7022e开发智能电量表,小弟搞31次谐波遇到瓶颈,对同步缓存功能不太明白,不知道怎么写程序,有做过的大神提供一下相关程序参考一下!!!

最佳答案

查看完整内容[请看2#楼]

经过几天的查询和测试已经解决啦,同步缓存测试程序如下,希望对想学ATT7022E谐波分析有用/****************************************************************** 函数功能:7022E同步数据缓存 *****************************************************************/ void ATT7022E_tongbu() { int i; u8 a=0,b=0,c=0,d=0,e=0,f=0,g=0; WriteSpi(0xC9,0x00005A);//校表数据写使能 WriteSpi(0xC5,0x000000);//关闭同 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2016-10-23
在线时间
7 小时
 楼主| 发表于 2017-3-30 21:52:22 | 显示全部楼层
本帖最后由 ShuaiGuo 于 2017-4-6 10:06 编辑

经过几天的查询和测试已经解决啦,同步缓存测试程序如下,希望对想学ATT7022E谐波分析有用/******************************************************************
函数功能:7022E同步数据缓存
*****************************************************************/
void ATT7022E_tongbu()
{
         int i;
         u8 a=0,b=0,c=0,d=0,e=0,f=0,g=0;
                WriteSpi(0xC9,0x00005A);//校表数据写使能
                WriteSpi(0xC5,0x000000);//关闭同步数据缓存
                WriteSpi(0xC5,0x000002);//开启自动同步数据缓存  
         while(Ptr<=1021)
         {
                 delay_ms(50);
                 Ptr=ReadSpi(r_PtrWavebuff);//读缓存寄存器数据,读完一次数据自动加一
         }
         WriteSpi(0xC1,0x000000);//写入读取初始地址
         for(i=0;i<1022;i++)
         {
                 switch(i%7)
                 {
                         case 0:Ua[a++]=ReadSpi(r_WaveBuff);break;//读缓存寄存器中Ua数据
                         case 1:Ub[b++]=ReadSpi(r_WaveBuff);break;//读缓存寄存器中Ub数据
                         case 2:Uc[c++]=ReadSpi(r_WaveBuff);break;//读缓存寄存器中Uc数据
                         case 3:Ia[d++]=ReadSpi(r_WaveBuff);break;//读缓存寄存器中Ia数据
                         case 4:Ib[e++]=ReadSpi(r_WaveBuff);break;//读缓存寄存器中Ib数据
                         case 5:Ic[f++]=ReadSpi(r_WaveBuff);break;//读缓存寄存器中Ic数据
                         case 6:I0[g++]=ReadSpi(r_WaveBuff);break;//读缓存寄存器中I0数据
                         default:break;
                 }
         }
         
         WriteSpi(0xC9,0x000000);//校表数据关闭写使能
}

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-31 00:34:59 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2017-8-1
在线时间
15 小时
发表于 2017-8-10 08:06:06 | 显示全部楼层
楼主  可否借你例程学习学习  不胜感激
回复

使用道具 举报

3

主题

32

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1450
金钱
1450
注册时间
2016-9-22
在线时间
31 小时
发表于 2017-8-14 16:03:44 | 显示全部楼层
ShuaiGuo 发表于 2017-3-30 21:52
经过几天的查询和测试已经解决啦,同步缓存测试程序如下,希望对想学ATT7022E谐波分析有用/*************** ...

请问楼主,我最近在研究ATT7022芯片的谐波分析。看到您的程序。有一处不太懂
如下:
[mw_shl_code=c,true]while(Ptr<=1021)
         {
                 delay_ms(50);
                 Ptr=SPI_ATT_Read(r_PtrWavebuff);//读缓存寄存器数据,读完一次数据自动加一
         }[/mw_shl_code]

为什么要在这加延时,而且还要继续 读取缓存寄存器 中的数据?
还有 Ptr 指针是什么?
回复

使用道具 举报

0

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-3-17
在线时间
59 小时
发表于 2019-5-21 10:53:14 | 显示全部楼层
你好,我现在整ATT7022EU,碰到一些问题,能不能把你的例程发给我学习学习,963490622@qq.com
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2019-5-8
在线时间
43 小时
发表于 2019-7-8 10:39:16 | 显示全部楼层
ShuaiGuo 发表于 2017-3-30 21:52
经过几天的查询和测试已经解决啦,同步缓存测试程序如下,希望对想学ATT7022E谐波分析有用/*************** ...

         while(Ptr<=1021)
         {
                 delay_ms(50);
                 Ptr=ReadSpi(r_PtrWavebuff);//读缓存寄存器数据,读完一次数据自动加一
         }
这个while没用,读出的缓存长度0x7E一直都是1022,我看有人论坛说这个是个硬件bug,直接延时50ms就可以了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 12:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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