/* * I2C.c * k4be 2022 * License: BSD */ #include #include #include "I2C.h" #include "main.h" #define I2C_FREQ 400000 #define PRESCALER 1 /* possible values: 1, 4, 16, 64 */ void I2C_init(void){ TWBR = (F_CPU/I2C_FREQ - 16.0)/2.0/PRESCALER; #if PRESCALER == 1 TWSR |= 0; #elif PRESCALER == 4 TWSR |= _BV(TWPS0); #elif PRESCALER == 16 TWSR |= _BV(TWPS1); #elif PRESCALER == 64 TWSR |= _BV(TWPS1) | _BV(TWPS0); #else #error Invalid prescaler #endif } /* two byte command (or command + value) */ unsigned int I2C_SendCommand(unsigned char address, unsigned char command, unsigned char data_byte) { unsigned int error = ERROR_I2C; for(int index = 0 ; (index < MAX_REPEAT_I2C) && (error != ERROR_NO); index++) { error = 0; TWCR = (1<