1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
#include "ads1256.h" #define ADS1256_GPIO GPIOA #define ADS1256_DRDY GPIO_PIN_3 #define ADS1256_CS GPIO_PIN_1
extern SPI_HandleTypeDef hspi1;
unsigned char SPI_WriteByte(unsigned char TxData) { unsigned char RxData=0; HAL_SPI_TransmitReceive(&hspi1, &TxData, &RxData, 1, 10); return RxData; }
void ADS1256WREG(unsigned char regaddr,unsigned char databyte) { HAL_GPIO_WritePin(ADS1256_GPIO, ADS1256_CS, GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin (ADS1256_GPIO,ADS1256_DRDY)==1) {} SPI_WriteByte(ADS1256_CMD_WREG | (regaddr & 0x0F)); SPI_WriteByte(0x00); SPI_WriteByte(databyte); HAL_GPIO_WritePin(ADS1256_GPIO, ADS1256_CS, GPIO_PIN_SET); }
float ADS1256_GAIN = 1.0f; void ADS1256_Init(uint8_t gain) {
ADS1256WREG(ADS1256_STATUS,0x04);
ADS1256WREG(ADS1256_MUX,0x08); if(gain == ADS1256_GAIN_1) ADS1256_GAIN = 1.0f; if(gain == ADS1256_GAIN_2) ADS1256_GAIN = 2.0f; if(gain == ADS1256_GAIN_4) ADS1256_GAIN = 4.0f; if(gain == ADS1256_GAIN_8) ADS1256_GAIN = 8.0f; if(gain == ADS1256_GAIN_16) ADS1256_GAIN = 16.0f; if(gain == ADS1256_GAIN_32) ADS1256_GAIN = 32.0f; if(gain == ADS1256_GAIN_64) ADS1256_GAIN = 64.0f; ADS1256WREG(ADS1256_ADCON, gain);
ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_1000SPS); ADS1256WREG(ADS1256_IO,0x00);
while(HAL_GPIO_ReadPin (ADS1256_GPIO,ADS1256_DRDY)==1); HAL_GPIO_WritePin(ADS1256_GPIO, ADS1256_CS, GPIO_PIN_RESET); SPI_WriteByte(ADS1256_CMD_SELFCAL); while(HAL_GPIO_ReadPin (ADS1256_GPIO,ADS1256_DRDY)==1); HAL_GPIO_WritePin(ADS1256_GPIO, ADS1256_CS, GPIO_PIN_SET); }
void delay_us(uint32_t us) { us *= 40; while (us--) { __asm__ volatile ("nop"); } }
void delay_ms(uint32_t ms) { while (ms--) { delay_us(1000); } }
unsigned char pre_channel = 0; int ADS1256ReadData(unsigned char channel) { unsigned int sum=0; while(HAL_GPIO_ReadPin(ADS1256_GPIO,ADS1256_DRDY)==1); if (pre_channel != channel) { pre_channel = channel; HAL_GPIO_WritePin(ADS1256_GPIO, ADS1256_CS, GPIO_PIN_RESET); ADS1256WREG(ADS1256_MUX,channel); HAL_GPIO_WritePin(ADS1256_GPIO, ADS1256_CS, GPIO_PIN_SET);
HAL_GPIO_WritePin(ADS1256_GPIO, ADS1256_CS, GPIO_PIN_RESET); SPI_WriteByte(ADS1256_CMD_SYNC); SPI_WriteByte(ADS1256_CMD_WAKEUP); HAL_GPIO_WritePin(ADS1256_GPIO, ADS1256_CS, GPIO_PIN_SET); while (HAL_GPIO_ReadPin(ADS1256_GPIO, ADS1256_DRDY) == 1); }
HAL_GPIO_WritePin(ADS1256_GPIO, ADS1256_CS, GPIO_PIN_RESET); SPI_WriteByte(ADS1256_CMD_RDATA);
delay_us(10); sum |= (SPI_WriteByte(0xff) << 16); sum |= (SPI_WriteByte(0xff) << 8); sum |= SPI_WriteByte(0xff); HAL_GPIO_WritePin(ADS1256_GPIO, ADS1256_CS, GPIO_PIN_SET);
if (sum>0x7FFFFF) { sum -= 0x1000000;
} return sum; }
double ADS1256ReadVoltage(unsigned char channel) { double voltage = ADS1256ReadData(channel)*(double)0.000000598; voltage /= ADS1256_GAIN; return voltage; }
|