//**********************************************************************************
//**************************** I2C MASTER CONTROL **********************************
void I2C_start(unsigned char slave_adress){
		
		TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
		while(!(TWCR & (1<<TWINT)));		// Send START condition

		TWDR = slave_adress;				// Send slave adress + R/W
		TWCR = (1<<TWINT)|(1<<TWEN);
		while(!(TWCR & (1<<TWINT)));
}

//**********************************************************************************
void I2C_stop(){

		TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
}

//**********************************************************************************
void I2C_TX(unsigned char data){

		TWDR = data;
		TWCR = (1<<TWINT)|(1<<TWEN);
		while(!(TWCR & (1<<TWINT)));
}

//**********************************************************************************
unsigned char I2C_RX_ACK(){

		TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA);
		while(!(TWCR & (1<<TWINT)));
		return TWDR;
}

//**********************************************************************************
unsigned char I2C_RX_NACK(){

		TWCR = (1<<TWINT)|(1<<TWEN);
		while(!(TWCR & (1<<TWINT)));
		return TWDR;
}