啃了两天数据手册,加上看了别人的例程有些问题不是很明白
命令字节
C2 | C1 | C0 | MUL | A3 | A2 | A1 | A0 |
---|
位C [2:0] – 命令位
C [2:0] | 描述 | 注释 |
---|
000 | 通道数据直接读取(无命令) | 在发送命令之前切换CS或允许SPI超时 |
001 | 通道数据读取命令(寄存器格式) | 设MUL = 1; 状态字节始终包含在数据中 |
010 | 寄存器读命令 |
一共有三种读命令
通道数据格为3个字节
1 STATUS 状态字节 2 MSB 数据字节高 3 LSB 数据字节低
以下是我看的例程,采用的是000第一种读法,连续读三字节
for (r=0;r<3;r++) //读取16位数据 前8位是通道信息,后16位是转换数据结果
{
a=ads_senddata(0x00); //发送读取数据命令,读取数据,先高位,后低位
sum|=a;
sum=sum<<8;
}
sum=sum>>8; 这里得到了sum为32位的数,低24位为我们需要的
unsigned char ads_senddata(unsigned char data) //SPI发送数据,要在外部保证SS = 0
{
SPDR = data; //启动数据传输
while((SPSR & 0x80) == 0); // 等待传输结束
data = SPDR;
return data;
}
想请教一下,其他两种读数据,得到的数据格式是什么样的啊?
Zhong JianFu:
010寄存器读命令
假设读下这个寄存器
MUXDIF:多路复用器差分输入选择寄存器(地址= 03h) Default = 0X00. 这里是8位数的寄存器 DIFF7 DIFF6 DIFF5 DIFF4 DIFF3 DIFF2 DIFF1 DIFF0
那是不是读,只会读到一个字节