在使用ADS1251和ATMEGA128单片机通信时初始化接收寄存器数值为00,接收到的数据一直保持01状态。无论输入端电平如何变化一直保持不变。哪位大神能帮忙分析下为什么会是这种情况。
Wanda WANG:
没太明白问题,时序对了吗?
zhaopeng yang:
回复 Wanda WANG:
设计ADS1251电路的时候外接8MHz有源晶振和4.096V的参考电压,SCLK引脚接Atmega128的PA1,DOUT接PA0;然后通过串口接收数据。
下面是我写的时序程序按照手册的同步时序写的:
void AD_Init(void){ PORTA &= ~BIT(1); //sck=0; delay_nms(5); //延时1ms PORTA |= BIT(1); //sck=1 delay_n100us(5); PORTA &= ~BIT(1); //sck=0; while(PINA & 0x01);}
//—数据接收模式void AD_Conver(void){ uchar i; delay_1us(); delay_1us();
for(i=0;i<8;i++) { data_temp3 << 1; PORTA |= BIT(1); //sck=1 data_temp3 |= (uchar) (PINA & 0x01); //DI PORTA &= ~BIT(1); //sck=1; } USART_Tran_bit(data_temp3); for(i=0;i<8;i++) { data_temp2 << 1; PORTA |= BIT(1); //sck=0 data_temp2 |= (uchar) (PINA & 0x01); //DI PORTA &= ~BIT(1); //sck=1; } USART_Tran_bit(data_temp2); for(i=0;i<8;i++) { data_temp1 << 1; PORTA |= BIT(1); //sck=0 data_temp1 |= (uchar) (PINA & 0x01); //DI PORTA &= ~BIT(1); //sck=1; } USART_Tran_bit(data_temp1); while(!(PINA & 0x01)); delay_3us();}
//—————-主函数—————void main (void){ USART_Init(baud_set);//串口初始化 DDRA |= 0x00000010;//PA0为输入和PA1为输出 PORTA &= ~BIT(1); //sck=0 AD_Init(); USART_Tran_bit(data_temp1); USART_Tran_bit(data_temp2); USART_Tran_bit(data_temp3); USART_Tran_bit(0xff); while(1) { AD_Conver(); }}
然后得到了如下所示的串口程序。
请您帮看看这是哪的问题啊。
Haroad Chen:
回复 zhaopeng yang:
可以用示波器测一组波形看看吗? CLK,SCLK,DOUT?
TI中文支持网


