请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
线程中讨论的其他部件:PGA281, ADS1259
您好,
我正在为我的项目使用ADS1259 A/D转换器来转换从PGA281接收到的数据。 用于与ADS1259进行SPI通信的微控制器是ATxmega128a3u。 在过去的两周里,我一直在尝试配置ADS1259寄存器,以便将默认采样率从10SPS切为3600 SPS,并进行一些其它设置,但似乎没有正确写入寄存器。 /DRDY引脚在10SPS时始终保持高和低。 我还尝试通过检测RREG命令来读取寄存器值,但始终获得0x00值。 我知道人们也在早些时候提出了类似的问题,但是,即使在尝试了这些解决方案(例如,将SPI模式更改为模式1,首先发送SDATA命令以停止"读取连续数据"模式)之后,我也没有成功。 我在下面附上了我的代码和原理图。
/* SPI_test.c * 创建时间:2017年10月02日 11:55:43 AM *作者:Amit Srivastava */ #define F_CPU 3200万UL #include <AVR/IO.h> #include <util/delay.h> void setUp32Mhz InternalOsc() { OSC.CTRL || OSC_RC32MEN_OBM_OS32MHz/ EN_OS32AX_OS32Z_OS32Z_OSSC_OS32Hz/启用内部振荡 器 /*等待32kHz振荡器稳定*/ while (!(OSC状态和OSC _RC32MRDY_BM)); /*等待32MHz振荡器稳定*/ DFLLRC32M.CTRL = DFLL_ENable_BM; /*启用DFLL -默认校准内部32kHz时钟*/ CCP = CCP_IOREG_GC; /*禁用时钟更新的寄存器安全性*/ CLK.CTRL = CLK_SCLKSEL_RC32M_GC; /*切换到32MHz时钟*/ OSC.CTRL并且=~OSC RC2MEN_BM; /*禁用2MHz振荡器*/ } void setUpSPI() { // PE7= SCK,PE6=Miso,PE5=MOSI,PE5=CS。 PORT_DIR = 0b1011.1011万; /*双时钟=0,SPI启用= 1,深光源= 0 (先选择重要位),主中继器= 1 (主中继器模式),传输模式= 01 (模式1),SCK频率=11 (CLK_PE/128 (b因为 最大值= f_clk_ADS1259/TC100 1.8))*/ SPIE_0TRL_1.0101万 被禁用 ;中断= SPIE_0TC1.0101万 UINT8_t SPI_READ() { SPIE_DATA = 0x00; //正在发送虚拟数据 ,同时(!(SPIE_STATUS &(1<7)); 返回SPIE_DATA; } void setUpADS1259() { PORTF_DIR =(PORTF_DIR | 0b0.0011万);//起始引脚(PF0)输出和重置引脚(PF1)输出。 PORTB_DIR &=~(0b1000万); // DRDY引脚(PB7)输入 PORTF.OUT |= 0x02;//重置引脚高。 _delay_us (100); PORTF.OUT &=~(0b0.0001万);//起始引脚低。 _delay_us (100); //PORTF.OUT ||(0b0.0001万);//起始引脚高。 _delay_us (100); Porte输出|=0b1万;//!CS pin high _delay_us (100); Porte输出&=~0b1万;//!CS pin low _delay_us (100); //发送SDATA命令 spie_data = 0x11; _delay_us ;spie_0000_100字节;spie_data = 0x11;s000s;s1b_100;s000byte_cb ;s0000_100;se_delay 栅极转换模式,3600SPS ([2:0]--> 110) SPIE_DATA = 0b0.011万; _DELAY _US(100); PORTF.OUT |=(0b0.0001万);//起始引脚高。 _delay_us(100); } int main(void) { setUp32Mhz InternalOsc(); setUpSPI(); _Delay_ms(100); setUpADS1259(); uint8_t data = 0x00; 同时(1) {_delay_us(1000);//data = SPI_READ();} }


