基于AD7190的精密电子称 4.8KHZ超低声24位∑-Δ ADC,内置PGA

芯片制造商ADI。

下载资料,论坛讨论网址:http://www.analog.com/cn/index.html



一:话不多说,先看看一下资料















二、代码如下:


void AD7190_delay (int len)
{
while(len--);

}

void AD7190_Read(u8 len)
{
u8 ar_i,ar_j,ar_temp;

SCLK_HIGH();
AD7190_delay(2);
CS_OFF();
AD7190_delay(2);
CS_ON();
AD7190_delay(2);

if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)==Bit_RESET)
{
//
for(ar_i=len;ar_i>0;ar_i--)
{
ar_temp = 0;

for(ar_j=0;ar_j<8;ar_j++)
{
SCLK_LOW();
ar_temp <<=1;
AD7190_delay(5);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)>0)
{
ar_temp |= 1;
}
else  
{
ar_temp |= 0;
}
SCLK_HIGH();
AD7190_delay(5);
}
ADReadBuf[ar_i-1] = ar_temp;
}
}
CS_OFF(); 
}


void AD7190_Write(u8 len,u8 *buf)
{
u8 aw_i,aw_j,aw_temp;

SCLK_HIGH();
AD7190_delay(1);
CS_OFF();
AD7190_delay(1);
CS_ON();
AD7190_delay(1);

for(aw_i=len;aw_i>0;aw_i--)
{
aw_temp=*(buf+aw_i-1);
for(aw_j=0;aw_j<8;aw_j++)
{
if(aw_temp&0x80) MOSI_HIGH();
else             MOSI_LOW();

AD7190_delay(1);
SCLK_LOW();
AD7190_delay(1);
SCLK_HIGH();
aw_temp <<= 1;
}
}
CS_OFF();


}


void AD7190_Reset(void)
{
// u8 buf[3];

buf[0]=0xff;
buf[1]=0xff;
buf[2]=0xff;

AD7190_Write(3,buf);
AD7190_Write(3,buf);
AD7190_Write(3,buf);

}


//void AD7190_Configuration(void)
{
// u8 buf[3];

buf[0] = 0x10;
AD7190_Write(1,buf);//写0x10到通讯寄存器,控制下一操作是写配置寄存器

buf[2]=0x00;
buf[1]=0x00;
buf[0]=0x00;
AD7190_Write(3,buf);//写入配置寄存器
// while (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==Bit_SET);

buf[0]=0x08;
AD7190_Write(1,buf);//写0x08到通讯寄存器,控制下一操作为写模式寄存器

buf[2]=0x08;
buf[1]=0x00;
buf[0]=0x00;
AD7190_Write(3,buf);//写入模式寄存器
// while (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==Bit_SET);

buf[0]=0x5C;
AD7190_Write(1,buf);//写0x5C到通讯寄存器,控制下一操作为读数据寄存器
}


亲测有数据漂动,具体是温漂、电源等引起有待测试。





欢迎交流学习!

QQ:905420278

E-mail:jianming.tan@foxmail.com

STM32单片机读写24ADC_AD7190称重模块带液晶显示例程DEMO源码文件,可做为你的学习设计参考。 int main(void) { uint32_t lcdid; float data_temp; int32_t weight_count; uint8_t cali_flag=0; char str[50]; /* 复所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); KEY_GPIO_Init(); /* 初始化3.5寸TFT液晶模组,一般优先于调试串口初始化 */ lcdid=BSP_LCD_Init(); /* 调用格式化输出函数打印输出数据 */ printf("LCD ID=0x%08X\n",lcdid); LCD_Clear(0,0,LCD_DEFAULT_WIDTH,LCD_DEFAULT_HEIGTH,BLACK); HAL_Delay(1000); /* 开背光 */ LCD_BK_ON(); if(AD7190_Init()==0) { printf("获取不到 AD7190 !\n"); while(1) { HAL_Delay(1000); if(AD7190_Init()) break; } } printf("检测到 AD7190 !\n"); weight_ad7190_conf(); HAL_Delay(500); weight_Zero_Data = weight_ad7190_ReadAvg(6); printf("zero:%d\n",weight_Zero_Data); /* 无限循环 */ while (1) { weight_count=weight_ad7190_ReadAvg(6); data_temp=weight_count-weight_Zero_Data; weight=data_temp*1000/weight_proportion; printf("重量:0x%5X->%f\n",weight_count,weight); sprintf(str,"0x%5X",weight_count); LCD_DispString_EN(190,80,str,BLACK,RED,USE_FONT_24); sprintf(str,"%0.2fg",weight); LCD_Clear(140,100,300,64,BLACK); LCD_DispString_EN(140,100,str,BLACK,YELLOW,USE_FONT_64); HAL_Delay(100); if(KEY1_StateRead()==KEY_DOWN) // 清零 { weight_Zero_Data = weight_ad7190_ReadAvg(6); printf("zero:%d\n",weight_Zero_Data); cali_flag=1; } if(KEY2_StateRead()==KEY_DOWN) // 校准:必须先按“清零”键,然后把20g砝码放在称上,按下校准键 { if(cali_flag) { weight_count = weight_ad7190_ReadAvg(6); weight_proportion=(weight_count-weight_Zero_Data)*1000/100; printf("weight_proportion:%d\n",weight_proportion); } cali_flag=0; } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值