搜索
bottom↓
回复: 12

求ATT7022CU的读写程序

[复制链接]

出0入0汤圆

发表于 2013-2-28 11:27:25 | 显示全部楼层 |阅读模式
本帖最后由 fangjikun 于 2013-2-28 11:30 编辑

     PIC18F4520控制ATT7022CU,IO模拟SPI,现在7022的工作状态没有问题是正常的
    (复位后随意写7022里的一个寄存器,SIG信号变为高,另外11脚REFOUT电压2.33V,也正常)
    ABC输入端短接后加AC电(可调),在三个电压输入管脚测电压有65mv(随意加的),但读出全是0

   以下是程序:

#define Att7022cu_Cs          LATC0
#define Att7022cu_Rst         LATA6
#define Att7022cu_Sig         RA7
#define Att7022cu_Rf_Sclk           LATC3
#define Att7022cu_Rf_Data_Out   LATC5
#define Att7022cu_Rf_Data_In     RC4

unsigned long Read7022(unsigned char Addr)
{
        unsigned char i;
        unsigned long Out_Data=0;

        Addr &= 0x7f;//bit7=0:读命令,bit7=1:写命令
                           //bit6--0:地址
        Att7022cu_Cs=1;
        Att7022cu_Rf_Sclk=0;
        Att7022cu_Cs=0;delay();
        for(i=8; i>0; i--)
           {
                Att7022cu_Rf_Sclk=1;
                delay();
            if(Addr&0x80)
                {Att7022cu_Rf_Data_Out=1;}
            else
                {Att7022cu_Rf_Data_Out=0;}
            Att7022cu_Rf_Sclk=0;
            delay();
            Addr<<=1;
           }
        delay();//
        for(i=24; i>0; i--)
                {
             Att7022cu_Rf_Sclk=1;
             delay();
             Out_Data<<=1;
             Out_Data |= Att7022cu_Rf_Data_In;
             Att7022cu_Rf_Sclk=0;
             delay();
              
                }
        Att7022cu_Cs=1;
      //  Out_Data=0x12345678;  //等于此值在串口调试助手里能看到低8位的“78”值
        return Out_Data;//若直接返回就是全零了
}

void Write7022(unsigned char Addr, unsigned long Out_Data)
{
        unsigned char i;
        
                Addr=(Addr&0xbf)|0x80;   //bit7=0:读命令,bit7=1:写命令
        //即Addr=0b10 000000;        低6位为地址                                     
       
        Att7022cu_Cs=1;
        Att7022cu_Rf_Sclk=0;
        Att7022cu_Cs=0;
        
         for(i=8; i>0; i--)
           {Att7022cu_Rf_Sclk=1;
            if(Addr&0x80)
                {Att7022cu_Rf_Data_Out=1;}
                else
                 {Att7022cu_Rf_Data_Out=0;}
            Addr<<=1;
            Att7022cu_Rf_Sclk=0;
           }
        delay();
        for(i=24; i>0; i--)
           {Att7022cu_Rf_Sclk=1;
            if(Out_Data&0x80)
                {Att7022cu_Rf_Data_Out=1;}
                else
                 {Att7022cu_Rf_Data_Out=0;}
                Out_Data<<=1;
                Att7022cu_Rf_Sclk=0;
           }
        delay();
        Att7022cu_Cs=1;
        
}




void tx_data(void)
{   unsigned char i;
    txbuff[0]=Read7022(0x01);
    txbuff[1]=Read7022(0x0d);
    txbuff[2]=Read7022(0x0e);
    txbuff[3]=Read7022(0x0f);
    txbuff[4]=Read7022(0x28)
        txbuff[5]=Read7022(0x2d);
        txbuff[6]=Read7022(0x2e);
    txbuff[7] =Read7022(0x3c);
    txbuff[8]=Read7022(0x3d);
    EN485=1;delay();//发送状态     
        for(i=0;i<9;i++)
       {
                TXREG=txbuff;//发送
                while(!TRMT);//asm("nop");//delay();
                }          
        EN485=0;delay();//转为接收状态
       
}

出0入0汤圆

 楼主| 发表于 2013-2-28 11:33:17 | 显示全部楼层
是不是还要设置工作状态什么的?麻烦赐教了!!!!!

出0入0汤圆

发表于 2013-3-3 08:57:50 | 显示全部楼层
初始化啊,芯片手册里边都有代码,不过是51的,你移植一下就行了,看7022b的

出0入0汤圆

 楼主| 发表于 2013-3-3 15:38:04 | 显示全部楼层
geminisongyemin 发表于 2013-3-3 08:57
初始化啊,芯片手册里边都有代码,不过是51的,你移植一下就行了,看7022b的 ...


没看见有初始化的介绍呀  (想添加7022B手册,附件添加不了)

出0入0汤圆

 楼主| 发表于 2013-3-5 09:24:57 | 显示全部楼层
昨天打电话给炬全,让读0x3e,0x5f校验和寄存器,呵呵,读出来还是全零,怎么啦?我的程序不对吗?
但是,SIG信号的动作却正常,复位过程为高,复位完成后为低,然后我随意写一个寄存器,SIG变为高。
到底怎么回事?懵了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-3-5 11:35:56 | 显示全部楼层
原来是与7022SPI数据输出端相连的24l01将MISO拉低了,现在可以读出7022里的数据,高兴,硬件、底层驱动没有问题了,
下一步要仔细研究数据了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-4-22 00:06:13 | 显示全部楼层
是一个叫“ATT7022B应用笔记”的资料,那时候还叫珠海炬力呢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-8-29 11:32:47 | 显示全部楼层
哪位大侠有没有遇到过这种情况:校表时,SIG信号正确,但是校表之后读取的数据还是不正确

出0入0汤圆

发表于 2014-2-7 13:47:01 | 显示全部楼层
现在进展的如何了,我弄的仪表总是有偶尔跳字情况,你的有吗?7022C里提到的各种安全机制都做了,还是无济于事!我用的是星龙的源。安捷伦测试输入信号很稳定,5V交流含量(3.8mV)
我之前也是用模拟IO做的SPI,数据更不稳定,后来改成硬件SPI好多了,时钟速率1M,还有这个东西的SPI硬件接口加那个低通会不会反到不好了,我用个是10ohm,15p.
技穷了,难道这个熊芯片就这德行吗,测试响应时间也是大于400ms,已经高于变送器标准了。最离谱的就是频率不稳。也可能我做的软件和硬件不过关,
有没有高人也遇到同样的问题,找到了解决方法了,麻烦回复一下,谢谢!!!

出0入0汤圆

发表于 2014-4-16 15:12:23 | 显示全部楼层
   顶一下

出0入0汤圆

发表于 2014-6-11 15:25:55 | 显示全部楼层
表示用stm32的GPIO模拟SPI与att7022通讯问题很多

出0入0汤圆

发表于 2014-8-25 16:28:32 | 显示全部楼层
mark,学习中

出0入8汤圆

发表于 2015-9-24 09:43:38 | 显示全部楼层
geminisongyemin 发表于 2013-4-22 00:06
是一个叫“ATT7022B应用笔记”的资料,那时候还叫珠海炬力呢

为啥这个文档下  下来是 乱码,,,,,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 12:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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