打印
[AVR单片机]

求atmega128单片机的SPI功能与AD7490(串行AD)的程序

[复制链接]
2993|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
有那位大侠用过atmega128单片机的SPI功能与AD7490(串行AD)进行通讯过。做过的请我帮帮我。我的QQ是:125955156

相关帖子

沙发
huangxz| | 2013-9-9 16:32 | 只看该作者
这个还需要啥程序啊,spi读写而已啊

使用特权

评论回复
板凳
zhongzhong|  楼主 | 2013-9-9 17:47 | 只看该作者
我没有用过SPI的AD,是第一次用,也是第一次接触SPI通讯。你做过吗?

使用特权

评论回复
地板
huangxz| | 2013-9-9 18:38 | 只看该作者
zhongzhong 发表于 2013-9-9 17:47
我没有用过SPI的AD,是第一次用,也是第一次接触SPI通讯。你做过吗? ...

数据手册上面都有例子


很简单的啊:lol

使用特权

评论回复
5
zhongzhong|  楼主 | 2013-9-9 21:07 | 只看该作者
这个当然简单了,我要的是和AD7490相关的程序。你能把你的QQ告诉我吗,我在QQ上和你交流

使用特权

评论回复
6
qin552011373| | 2013-9-10 13:30 | 只看该作者
伸手党  你就不能先自己写一下?有问题拿过来帮你改么?

使用特权

评论回复
7
zhongzhong|  楼主 | 2013-9-10 17:59 | 只看该作者
老大,我不是什么伸手党哈,我在网上找的相关的资料,再结合自己的硬件改的,弄了好几天,还是调不通。这才上网找你们这些大侠求救。

------------------------------------------------------------------------------*/
#include <DPT.H>
#include <Intrins.h>
/************************************************************
AD7490数据转换  //Full Shutdown mode
*************************************************************/  
uint ad7490_convert(uint channel)
{
          uchar i,tmp;
          uint config_data, get_data;
       
        //WRITE SEQ ADD3 ADD2 ADD1 ADD0 PM1 PM0 SHADOW WEAK/TRI RANGE CODING
        config_data = 0x0831;
        config_data = config_data|(channel<<6);
        SPI_Init();
        //CS下降沿启动上一次转化和配置下一次转换的通道
        SS=0;
        SCK=1;
        _nop_();
        _nop_();       
        //配置下一次转换的通道
        for (i=0; i<16; i++)       
        {       
                if (i < 12)
                {
                        if ((config_data&0x0800) == 0)
                                MOSI=0;
                        else
                                MOSI=1;
                }
                SCK=0;
                config_data = config_data << 1;
                _nop_();
                _nop_();
                SCK=1;               
        }
        //设置AD为Full Shutdown mode
        config_data = 0x0821;
        config_data = config_data|(channel<<6);
        get_data = 0;
        SS=1;
        //唤醒保持时间
        Delay1ms(1);
        SS=0;
        _nop_();
        _nop_();
        //CS下降沿读取ADD3
        tmp = MISO;
        if (tmp == 0)
                get_data &= 0xFFFE;
        else
                get_data |= 0x0001;       
        get_data = get_data << 1;
        //读取转换结果其他位
        for (i=0; i<16; i++)       
        {       
                if (i < 12)//
                {
                        if ((config_data&0x0800) == 0)
                                MOSI=0;
                        else
                                MOSI=1;
                }          
                SCK=0;
                _nop_();
                _nop_();
                config_data = config_data << 1;
               
                if (i < 15)
                {
                        tmp = MISO;
                        if (tmp == 0)
                                get_data &= 0xFFFE;
                        else
                                get_data |= 0x0001;
                        if (i < 14)
                                get_data = get_data << 1;
                }
                SCK=1;               
        }
        SS=1;
        return get_data&0x0FFF;
}
void vaule(void)
{   
        unsigned int result,channel=16;
        while(1)
        {      
                result=ad7490_convert(1);
        }
}

使用特权

评论回复
8
qin552011373| | 2013-9-10 19:32 | 只看该作者
不是伸手党又是什么   你干嘛不自己用硬件SPI写底层驱动   非要用网上的

使用特权

评论回复
9
stupidboy456| | 2013-9-10 20:27 | 只看该作者
其实伸手不伸手,,并不是很重要,,重要的是 东西,得自己会,,就算是抄别人的,,也得把他抄会,抄懂,内化到自己的知识体系中,这才是最重要的,

PS:个人觉得,参考别人的,可以使自己快速成长,前提是,你得抄会,抄懂

使用特权

评论回复
10
zhongzhong|  楼主 | 2013-9-10 20:31 | 只看该作者
我如果自己能完全按照自己的硬件能把程序写出来的话,我还上网干嘛?

使用特权

评论回复
11
huangxz| | 2013-9-10 22:23 | 只看该作者
zhongzhong 发表于 2013-9-10 20:31
我如果自己能完全按照自己的硬件能把程序写出来的话,我还上网干嘛?

其实你就看下你的spi时序跟ADC数据手册上的是不是一样就可以了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝