您好!
我在 ADS1256上工作了将近一个月。 我使用的是 AVR ATmega1284P 8位微控制器。 我所面临的问题是、当我对 ADS 进行编程时、它的工作时间不到5秒、并且不会再次工作、除非我断开电源并重新插回电源。 它工作几秒钟、然后输出再次消失。 请查看我的以下代码、我们非常感谢您的帮助。 fCLKIN 为8MHz、SCK 为2MHz。 我自己验证了中断功能是否正常工作。 所有内容都处于默认状态、我在默认状态下读取转换结果。 此外、请告诉我我的 T6计算结果是否正确。 我要提到的另一点是、每8个时钟周期后、SPI 时钟中就会有间隙。 这是否会影响输出?
谢谢。
* ADS1256.cpp
*
*创建时间:2018年6月13日下午3:47:12
作者:Ajay
*
#include
#define F_CPU 8000000UL
#include
void USART0_Init (void);
void 传输(无符号字符数据);
unsigned long ADC_val = 0;
{
如果(A ==0)
{
SPI_tranceiver (0x03);
_delay_us (25);
A = 1;
}
ADC_val = SPI_tranceiver (0);
ADC_val <<= 8;
ADC_val = SPI_tranceiver (0);
ADC_val <<= 8;
ADC_val = SPI_tranceiver (0);
}
{
DDRB |= 0b10110000;//将 MOSI、SS 和 SCK 设置为输出、将 MISO 设置为输入
SPCR |=(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(1<<CPHA)|(1<<SPR0)|(0< SPSR |=(1<<SPI2X);
EIMSK |=(1< EICRA |=(1<<ISC01)|(0<
SEI();//启用中断
while (1)
{
USART0_Init();
Transmit ((adc_val >>8));
传输((adc_val));
}
}
{
SPDR =数据;
while (!(SPSR &(1<<SPIF)));
return (SPDR);
}
{
UBRR0H =(无符号字符)(MYUBRR>>8);
UBRR0L =(无符号字符)(MYUBRR);
UCSR0B =(1<<RXEN0)|(1<<TXEN0);
UCSR0C =(0<<USBS0)|(1<<UCSZ00)|(1<<UCSZ01)|(0<<UCSZ02)|(0<<UMSEL00);
}
{
while (!(UCSR0A 和(<UDRE0)) );
UDR0 =数据;
}
