msg_pt100/board/ads1230.c

117 lines
1.8 KiB
C

#include "ads1230.h"
#include "events_init.h"
long ads1230_vol = 0;
void ads1230_gpio_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
/*
PA1---ADS1230 SCLK
PA6---ADS1230 DOUT
PB8---ADS1230 PDWN
*/
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
}
uint8_t ads1230_init(void)
{
ads1230_gpio_init();
int i = 0;
ADS1230_PDWN_HIGH();
ADS1230_SCLK_LOW();
do{
i++;
if(i == 60000)
return 0;
}while(ADS1230_READ);
ADS1230_PDWN_LOW();
delay_tick(30);
ADS1230_PDWN_HIGH();
delay_tick(10);
for(i=0;i<26;i++)
{
ADS1230_SCLK_HIGH();
ADS1230_SCLK_LOW();
}
return 1;
}
long ads1230_read(void)
{
long dat=0;
int i = 0;
do{
i++;
if(i == 60000)
return 0;
}while(ADS1230_READ);
for(i=0;i<20;i++)
{
dat<<=1;
ADS1230_SCLK_HIGH();
ADS1230_SCLK_LOW();
if(ADS1230_READ)
dat|=0x01;
}
for(i=0;i<4;i++)
{
ADS1230_SCLK_HIGH();
ADS1230_SCLK_LOW();
}
if((dat&0x80000) != 0) //数据为负数
{
dat -= 0xfffff;
}
return dat;
}
void get_ads1230_vol(void)
{
ads1230_vol = ads1230_read() * 3300.0 / 524288.0;
//测试过程中确定采样电压的极值和对应位置
if(test_status == 2)
{
if(maxv < ads1230_vol)
{
max_point_cnt = point_data.cnt;
maxv = ads1230_vol;
maxv_loca = ((CaptureNumber - 30000) / 720.0) * 254.0;
}
if(minv > ads1230_vol)
{
min_point_cnt = point_data.cnt;
minv = ads1230_vol;
minv_loca = ((CaptureNumber - 30000) / 720.0) * 254.0;
}
}
}