====== AD7746 demo code ====== #include #include #include #include //I2C registers #include //wait delay loop for page write #define SCL 50000 //100KHz clock #define _AK_ (1<>8; //end of UART setup FILE mystdio = FDEV_SETUP_STREAM(put_char, get_char, _FDEV_SETUP_RW); stdout=&mystdio; unsigned char command_humidity[]={0x90,0x07,0x81,0x81,0x23,0x01,0xFF};//the humi channel and the temp sensor unsigned char command_level[]={0x90,0x07,0xC1,0x81,0x0B,0x01,0xFF};//the level sensor channel init_i2c(); //initialise the I2C unsigned char n,m,l; unsigned long int b; float humidity,temperature,level; printf("Hello world\n\r"); while(1) { for(m=0;m<100;m++) { i2cstart(); i2cwrite(0xBF); //reset the AD7746 i2cstop(); I2Cerr=0; i2cstart(); for(n=0;command_humidity[n]!=0xFF;n++) { i2cwrite(command_humidity[n]); } i2cwrite(255); //the capdac setting for humidity do{ //wait for the conversion i2cstop(); i2cstart(); i2cwrite(0x90); i2cwrite(0x00); i2cstart(); i2cwrite(0x91); }while(i2cread(_NAK_)&0x04); i2cstop(); i2cstart(); i2cwrite(0x90); i2cwrite(0x01); //set to first register i2cstart(); //restart i2cwrite(0x91); //read from slave b=0; for(n=3;n;n--) { b|=((unsigned long int)i2cread(_AK_))<<(8*(n-1)); } humidity+=((float)b)/1.67e8; b=0; for(n=2;n;n--) b|=((unsigned long int)i2cread(_AK_))<<(8*n); b|=(unsigned long int)i2cread(_NAK_); temperature+=((((float)b)/2048.0)-4096.0)/100.0; i2cstop(); i2cstart(); i2cwrite(0xBF); //reset the AD7746 i2cstop(); i2cstart(); for(n=0;command_level[n]!=0xFF;n++) i2cwrite(command_level[n]); i2cwrite(190); //the capdac setting do{ //wait for the conversion i2cstop(); i2cstart(); i2cwrite(0x90); i2cwrite(0x00); i2cstart(); i2cwrite(0x91); l=i2cread(_NAK_); }while(l&0x04); i2cstop(); i2cstart(); i2cwrite(0x90); i2cwrite(0x01); //set to first register i2cstart(); //restart i2cwrite(0x91); //read from slave b=0; for(n=2;n;n--) b|=((unsigned long int)i2cread(_AK_))<<(8*n); b|=(unsigned long int)i2cread(_NAK_); level+=((float)b)/1.67e8; i2cstop(); } putchar(12); printf("Temperature=%f\n\r Humidity=%f\n\r Level=%f\r\n",(double)temperature,(double)humidity,(double)level); printf("Status:%2X\n\r",l); temperature=0; humidity=0; level=0; } }