int main(void) { UART_INIT_STDIO(); // enable watchdog (pin 6 output) DDRD &= ~_BV(PIND6); blink(3); printf("\n"); i2c_init(I2C_SPEED_400KHZ); for (uint8_t i = 0x00; i < 0x3a; i++) { uint8_t value = i2c_read_reg(0x6b, i); printf("REG(0x%02x) = ", i); print_bits(sizeof value, &value); printf(" 0x%02x\n", value); } i2c_write_reg(0x6b, 0x39, 0b00000000); uint8_t ctrl1 = i2c_read_reg(0x6b, 0x20); i2c_write_reg(0x6b, 0x20, ctrl1 | 0b1010); // do some low level blinking until the watchdog hits while (1) { uint8_t status = i2c_read_reg(0x6b, 0x27); print_bits(sizeof status, &status); printf(" X(%d) Y(%d) Z(%d), REF(%02x) TEMP(%02dºC)\r", i2c_read_reg16(0x6b, 0x28), i2c_read_reg16(0x6b, 0x2A), i2c_read_reg16(0x6b, 0x3C), i2c_read_reg(0x6b, 0x25), i2c_read_reg(0x6b, 0x26) ); PORTB ^= _BV(PORTB5); _delay_ms(50); }; }
int apds9190_read_prox(struct td_device *dev) { return i2c_read_reg16(dev, REG_PDATA); }