#include sbit iic_clk = P3^3; sbit iic_data = P3^5; sbit ack_test = P4^0; unsigned char daten_bits = 8; unsigned char sensor_adr_read = 0x29 ; unsigned char sensor_adr_write = 0x29 ; void zeit (void) { ; } void iic_start (void) { iic_data = 1; iic_clk = 1; iic_data = 0; iic_clk = 0; } void iic_stop (void) { iic_data = 0; iic_clk = 1; iic_data = 1; } bit transmit_data (unsigned char daten) { unsigned char i; for ( i = 0 ; i < daten_bits ; i++) { daten = daten << 1; if ( CY == 1 ) { iic_data = 1; } else { iic_data = 0; } iic_clk = 1; iic_clk = 0; } iic_data = 1; iic_clk = 1; i = iic_data; iic_clk = 0; return i; } unsigned char receive_data (bit ack) { unsigned char i,daten=0; i = iic_data; for ( i=0 ; i < daten_bits ; i++) { if ( iic_data == 1) { daten = daten | 0x01; } iic_clk = 1; daten = daten << 1; iic_clk = 0; } if (ack) { iic_data = 0; } else { iic_data = 1; } iic_clk = 1; iic_clk = 0; iic_data = 0; return daten ; } void startup_sensor(void) { iic_start(); // i2c Start transmit_data(sensor_adr_write); // Schreibanforderung an Adresse 0x29h transmit_data(0xD0); // Command Reg -> CMD=1;CLEAR=1;BLOCK=1;Reg Adresse 0h = Control Reg // transmit_data(0x00); // Count N Byte -> wird benötigt aber nicht gewertet transmit_data(0x03); // Control Reg auf 0x03 setzten -> POWER UP iic_stop(); // i2c Stop zeit(); zeit(); iic_start(); // i2c Start transmit_data(sensor_adr_write); // Schreibanforderung an Adresse 0x29h transmit_data(0xD1); // Command Reg -> CMD=1;CLEAR=1;BLOCK=1;Reg Adresse 1h = Timing Reg // transmit_data(0x00); // Count N Byte -> wird benötigt aber nicht gewertet transmit_data(0x02); // Timing Reg auf 0x10 setzten -> GAIN 16x, Int Time 13,7ms iic_stop(); // i2c Stop } main() { unsigned int i=0; unsigned char daten_high = 0; unsigned char daten_low = 0; unsigned long ad_0 = 0; while (1) { startup_sensor(); iic_start(); // i2c Start transmit_data(sensor_adr_write); // Schreibanforderung an Adresse 0x28h transmit_data(0xDC); // Command Reg -> CMD=1;CLEAR=1;BLOCK=1;Reg Adresse Ch = ADC CH0 low iic_start(); transmit_data(sensor_adr_read); receive_data(1); daten_low = receive_data(0); iic_stop(); //i2c Stop iic_start(); // i2c Start transmit_data(sensor_adr_write); // Schreibanforderung an Adresse 0x28h transmit_data(0xDD); // Command Reg -> CMD=1;CLEAR=1;BLOCK=1;Reg Adresse Ch = ADC CH0 high iic_start(); transmit_data(sensor_adr_read); receive_data(1); daten_high = receive_data(0); iic_stop(); //i2c Stop ad_0 = daten_high << 8|daten_low ; P5 = daten_low; } }