This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
朋友们、您好!
ADS1292R 传感器有问题、在对该器件进行几个月的工作后、我终于在通道末端看到一个小灯。
我已经创建了所有 SPI 驱动程序和器件寄存器、我开始创建 main、但现在我已经死了。有人可以帮助我?!e2e.ti.com/.../ADS1292_5F00_R.ce2e.ti.com/.../ADS1292_5F00_R.he2e.ti.com/.../2260.main.ce2e.ti.com/.../0243.main.h
是的、最后一个问题是不同功率级别的问题、我的电源电压为5V、然后使用 LaunchPad 连接项目、
我必须连接到电路板的接地端、即必须将所有接地端连接到一个点上。
现在,问题是我喜欢使用 ads1292r 获取读数,我已经测试了 SPI 通信,使用逻辑分析仪,该部件的设计和功能都很好。
现在的问题是调用可以执行转换的例程,甚至创建允许转换的软件包... 我认为这部分远远超出了我的知识范围。
#include //#include #include #include "main.h" #include "ADS1292_R.h" extern unsigned char ADS1292R_REG_Value[16]; extern unsigned char SPI_Rx_BUF[]; extern unsigned char ECG_DATA_RDY; extern long ADS1292R_ECG_DATA_BUF[6]; extern unsigned char ECG_STATE (exvoid)、ADS12256_t RECORTE_STAT_LEADDRESR、void [256 volatile unsigned short i、j; WATCHDOGHOLD(); init_Start_up(); ADS1292R_POWER_ON_INIT (); start_read_data_continuous (); 对于(i = 0;i < 10000;i++); 对于(i = 0;i < 10000;i++); 对于(i = 0;i < 10000;i++); ADS1292R_disable_start (); ADS1292R_ENABLE_START (); 对于(i = 0;i < 10000;i++); 对于(i = 0;i < 10000;i++); 对于(i = 0;i < 10000;i++); ecgState.state = IDLE_STATE; ecgState.command = 0; while (1){ if ((ecgState.state = idle_State)){ /**/ ADS1292R_disable_start (); ADS1292R_ENABLE_START (); ADS1292R_disable_start (); ADS1292R_CHIP_ENABLE(); CLEAR_ADS1292R_CHIP_ENABLE(); ADS1292R_CHIP_ENABLE(); start_read_data_continuous (); ENABLE_ADS1292R_DRDY_INTERRUPT (); ADS1292R_ENABLE_START (); ecgState.state = ECG_recording_State; }否则(((ecgState.state = ECG_recording_State)){ ecgState.state = IDLE_STATE; disable_ADS1292R_DRDY_INTERRUPT (); stop_read_data_continuous (); } switch (ecgState.state){ IDLE_STATE 情况: if (ecgState.command!= 0){ ecgState.command = 0; } 中断; 案例 DATA_STREGUSE_STATE: 中断; 案例 ACK_DATA_STATE: 中断; 案例 ECG_recording_State: if (reconer_head!= reconer_tail){ RECORDER TAIL++; if ((recore_tail % 4)==0){ /*每8个样本后,将心电图数据存储到内存中*/ if (RECORDER TAIL == 32) /*32个采样后重置尾数*/ RECORDER TAIL = 0; } } 中断; 默认值: 中断; } }/*while */ }/*main*/ void init_Start_Up (void){ _disable_interrupt (); //init_Clock (); __ENABLE_INTERRUPT (); } void WATCHDOGHOLD (void){ WDTCTL = WDTPW + WDTHOLD; /*停止看门狗计时器*/ }
您好、Alexander、
我在我的应用程序中做了一些更改、但存在一些问题、我想私下与您分享我的所有代码、为了给我一些反馈、我已经尝试了所有操作、但这是非常困难的
/*include*/ #include #include #include "main.h"#include #include "ads1292r.h" #define LOW_STATE 0x00 unsigned short numPackets、samplesRequired; unsigned char numFrame; extern unsigned char ECG_REACK_DATA_bu[512]、headRecorder、tailRecorder; extern unsigned char SPI_TX_BUF[]; unsigned char ECG_TX_packet[64]、ECG_TX_packet[64]、ECG_Q_TX_packet 、ECT_TX_packet、RQ_COUNT_Q_64] dummy; extern long ECG_DATA_buff [6]; unsigned char ECG_record_buff [256]; unsigned char * ECGPacketAcqPrt; unsigned char ECGR_head; struct ads1292R_status recorer_status; /* static*/ extern unsigned char ads1292R_Adress [11]; extern uint8_t ads1292R_Regval[11]; static volatile uint8_t SPI_RXCOUNT = 0; volatile bool ads1292data8=0_unsigned t_unsigned ve8 ;unsigned quotr_t degaturs=0=uint8;unsigned uint8 uints=uint8 uints=uint8;unsigned uintuint8 uints=uint8 uints=uint8 uintuintuints=uint8;unsigned uintuintuintuints=uint8 uintuints= /*main 例程*/ void main (void){ volatile unsigned short i、j; unsigned char regInit; P2->DIR |= BIT0 | BIT1; 看门狗狗犬; /*功能看门狗定时器*/ ads1292R_Init_Resources(); ads1292r_Reset(); /**/ ads1292R_Start_DS (); /*禁用启动 PIN*/ delayADS1292R (20); /*稳定的小延迟*/ ads1292R_Start_EN (); /*启用启动 PIN*/ delayADS1292R (20); /*稳定的小延迟*/ ads1292R_Start_DS (); /*禁用启动 PIN*/ ads1292R_SPI_CMD_DATA (start_); /*发送命令数据开始*/ ads1292R_SPI_CMD_DATA (STOP_); /*发送命令数据停止*/ delayADS1292R (50); /*稳定的小延迟*/ ads1292R_SPI_CMD_DATA (S_DATA_C);/*发送命令数据连续读取*/ delayADS1292R (300); /*稳定的小延迟*/ for (regInit = 0;regInit < sizeof (ads1292R_RegVal);regInit++){ ads1292R_REG_WRITE (ads1292R_Adress [regInit]、ads1292R_RegVal[regInit]); delayADS1292R (10); } ads1292R_SPI_CMD_DATA (R_DATA_C);/*命令停止连续读取数据*/ delayADS1292R (20); /*在 NVIC 模块中启用 ECCIB0中断*/ NVIC->ISER[0]= 1 <<((EUSCIB0_IRQn)& 31); NVIC->ISER[1]= 1 <<(port2_IRQn)& 31); clearPowerLosses(); /*启用全局中断*/ _enable_interrupt (); while (1){ if ((P2->IN & BIT3)=true){ P2->OUT |= BIT0; P2->OUT &=~(BIT1); }否则{ P2->OUT |= BIT1; P2->OUT &=~(BIT0); read1292R = true; } /**/ if (ads1292dataReceived == true){ J=0; //通过 USB 传输数据 for (i=0;i<6;i+=3){//数据输出为(24个状态位+ 24位呼吸数据+ 24位 ECG 数据) uecgtemp =(unsigned long)(((unsigned long) SPI_RX_BUF[i+3]<< 16)| ((无符号长整型) SPI_RX_BUF[I+4]<< 8)| (无符号长整型) SPI_RX_BUF[I+5]); uecgtemp =(unsigned long)(uecgtemp << 8); secgtemp =(带符号长整型)(uecgtemp); secgtemp =(带符号长整型)(secgtemp >> 8); s32DaqVals[j++]=secgtemp; } DataPacketHeader[0]= CES_CMDIF_PKT_START_1;//数据包头1:0x0A DataPacketHeader[1]= CES_CMDIF_PKT_START_2;//数据包头2:0xFA DataPacketHeader[2]=(uint8_t)(data_len); //数据长度 DataPacketHeader[3]=(uint8_t)(data_len>8); DataPacketHeader[4]= CES_CMDIF_TYPE_DATA; //数据包类型:0x02 -数据0x01 -命令 DataPacketHeader[5]= s32DaqVals[1]; // 4字节 ECG 数据 DataPacketHeader[6]= s32DaqVals[1]>> 8; DataPacketHeader[7]= s32DaqVals[1]>> 16; DataPacketHeader[8]= s32DaqVals[1]>> 24; DataPacketHeader[9]= s32DaqVals[0]; // 4字节呼吸数据 DataPacketHeader[10]= s32DaqVals[0]>> 8; DataPacketHeader[11]= s32DaqVals[0]>> 16; DataPacketHeader[12]= s32DaqVals[0]>> 24; DataPacketHeader[13]= CES_CMDIF_TYPE_DATA;//数据包 footer1:0x00 DataPacketHeader[14]= CES_CMDIF_PKT_STOP;//数据包 footer2:0x0B for (i=0;i<15;i++){ // printf ("value:%c\n"、DataPacketHeader[i]); //通过 USB 发送数据 } ads1292dataReceived = false; SPI_RXCOUNT = 0; } } 空看门狗狗狗(空){ WDTCTL = WDTPW | WDTHOLD; /*stop watchdog timer*/ } void clearPowerLosses (void){ printf ("端口引脚低电平:%s\n"、"确定"); P2->DIR |= 0xFF;P2->OUT = 0; P3->DIR |= 0xFF;P3->OUT = 0; P4->DIR |= 0xFF;P4->OUT = 0; P5->DIR |= 0xFF;P5->OUT = 0; P6->DIR |= 0xFF;P6->OUT = 0; P7->DIR |= 0xFF;P7->OUT = 0; P8->DIR |= 0xFF;P8->OUT = 0; P9->DIR |= 0xFF;P9->OUT = 0; P10->DIR |= 0xFF;P10->OUT = 0; }