ADC芯片是CS5513,线路连接如下:
CS5513 ATMEGA16
SCLK<--------------->SCK(PB7)
SDO <--------------->MISO(PB6)
CS <--------------->SS(PB4)
ATMEGA16 MOSI(PB6)悬空
这几天一直在写这个读取程序,写了很多个,也试过模拟SPI,但一直读不出结果。我的编程思路是,首先PB4输出低电平,使能CS5513,然后SPI随便写一个数据,最后读出收到的数据。
有两个疑惑1.MOSI引脚悬空是否影响程序功能
2.时钟同步信号的频率该如何确定
这是代码:
void SPI_init()
{
DDRB|=0XB0; //SCK MOSI SS->OUT MISO->IN
SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); //使能SPI、主机模式、16分频
//SPSR=(1<<SPI2X);
}
uchar SPI_read()
{
uchar i,data;
PORTB&=~BIT(PB4); //使能CS5513
//while(!((PINB&0X40)==0)); //SDO是否为0
for(i=0;i<3;i++) //ADC转换结果为24位,连续写3次
{
SPDR = 0x99; //任意写一个字节,启动SCLK
while(!(SPSR&(1<<SPIF))); //发送是否完成
ad_buf=SPDR;
SPSR=0;
}
PORTB|=BIT(PB4); //cs 高电平
}
|