我使用ADS1232接2mv/v的称重传感器,使用通道2,增益128,速递10次每秒,关闭温度传感器功能,可读出来的数不管怎么按压传感器都不怎么变,这个传感器是没有问题的,在HX711芯片上用四线制测试吹气都能有变化。可在用六线的ADS1232上数值就不怎么变化了。希望大家给予指点。
第一次做实际项目,如果设计中有其他不合理的地方希望大家批评指出,谢谢。
测试环境如下,呵呵,蜗居,只有一个床当桌子了。
5.png (1.04 MB, 下载次数: 5)
下载附件
2013-3-24 23:18 上传
- #include "ADS1232.H"
- #include "port.h"
- /*
- sbit ADS1232_DOUT = P2^0;
- sbit ADS1232_SCLK = P2^1;
- sbit ADS1232_PWDN = P2^2;
- sbit ADS1232_SPEED = P2^3;
- sbit ADS1232_GAIN1 = P2^4;
- sbit ADS1232_GAIN0 = P2^5;
- sbit ADS1232_A0 = P2^6;
- sbit ADS1232_TEMP = P2^7;
- */
- #define ADS1232_SCLK_HIGH do{ADS1232_SCLK=1;}while(0);
- #define ADS1232_SCLK_LOW do{ADS1232_SCLK=0;}while(0);
- #define ADS1232_PWDN_HIGH do{ADS1232_PWDN=1;}while(0);
- #define ADS1232_PWDN_LOW do{ADS1232_PWDN=0;}while(0);
- #define ADS1232_SPEED_HIGH do{ADS1232_SPEED=1;}while(0);
- #define ADS1232_SPEED_LOW do{ADS1232_SPEED=0;}while(0);
- #define ADS1232_GAIN1_HIGH do{ADS1232_GAIN1=1;}while(0);
- #define ADS1232_GAIN1_LOW do{ADS1232_GAIN1=0;}while(0);
- #define ADS1232_GAIN0_HIGH do{ADS1232_GAIN0=1;}while(0);
- #define ADS1232_GAIN0_LOW do{ADS1232_GAIN0=0;}while(0);
- #define ADS1232_A0_HIGH do{ADS1232_A0=1;}while(0);
- #define ADS1232_A0_LOW do{ADS1232_A0=0;}while(0);
- #define ADS1232_TEMP_HIGH do{ADS1232_TEMP=1;}while(0);
- #define ADS1232_TEMP_LOW do{ADS1232_TEMP=0;}while(0);
- void ADS1232_init(unsigned char channel, unsigned char gain, unsigned char speed, unsigned char temp)
- {
- ADS1232_SCLK = 0;
- ADS1232_PWDN_LOW;
- if(channel==CHANNEL1)
- {
- ADS1232_A0_LOW;
- }
- else if(channel==CHANNEL2)
- {
- ADS1232_A0_HIGH;
- }
-
- if(GAIN_1==gain)
- {
- ADS1232_GAIN1_LOW;
- ADS1232_GAIN0_LOW;
- }
- else if(GAIN_2==gain)
- {
- ADS1232_GAIN1_LOW;
- ADS1232_GAIN0_HIGH;
- }
- else if(GAIN_64==gain)
- {
- ADS1232_GAIN1_HIGH;
- ADS1232_GAIN0_LOW;
- }
- else if(GAIN_128==gain)
- {
- ADS1232_GAIN1_HIGH;
- ADS1232_GAIN0_HIGH;
- }
-
- if(SPEED_10==speed)
- {
- ADS1232_SPEED_LOW;
- }
- else if(SPEED_80==speed)
- {
- ADS1232_SPEED_HIGH;
- }
-
- if(TEMP_ON==temp)
- {
- ADS1232_TEMP_HIGH;
- }
- else if(TEMP_OFF==temp)
- {
- ADS1232_TEMP_LOW;
- }
-
- ADS1232_PWDN_HIGH;
- }
- char ADS1232_read_value(long int *value)
- {
- long int temp=0;
- unsigned char i=0;
-
- if(ADS1232_READY==ADS1232_DOUT)
- {
- ADS1232_SCLK_LOW;
- for(i=0; i<24; i++)
- {
- ADS1232_SCLK_HIGH;
- temp <<= 1;
- if(1==ADS1232_DOUT)
- {
- temp |= 0x01;
- }
- ADS1232_SCLK_LOW;
- }
- ADS1232_SCLK_HIGH; // The 25th SCLK to force DOUT high
- ADS1232_SCLK_LOW;
- if((temp&0x800000)==0x800000)
- {
- temp ^= 0Xffffff;
- temp = -(temp+1);
- }
- *value = temp;
- return ADS1232_READ_FINISH;
- }
- else
- {
- return ADS1232_BUSY;
- }
- }
复制代码下面是ADS1232的驱动代码- int main(void)
- {
- signed char brightness=8;
- long int num = 0;
- int i=-20;
- char temp=0;
- TM1638_init();
- TM1638_set_brightness(4);
- uart_init(9600);
- timer_init();
- ADS1232_init(CHANNEL2, GAIN_128, SPEED_10, TEMP_OFF);
- EA = 1;
- while(1)
- {
- communicate_with_HMI();
- TM1638_display_num(i++);
- timer0_main_loop();
- key_main_loop();
- if(key1_on)
- {
- LED1 = ~LED1;
- }
- temp = ADS1232_read_value(&num);
- if(temp==ADS1232_READ_FINISH)
- {
- printf("%8ld
", num);
- }
- if(f_1s)
- {
- LED2 = ~LED2;
- }
- }
- }
复制代码一周热门 更多>