+#include <util/twi.h>
+#include <avr/interrupt.h>
+#include <stdio.h>
+#include "i2c.h"
+
+#define TWCR_ACK TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|(0<<TWWC);
+#define TWCR_NACK TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|(0<<TWWC);
+#define TWCR_RESET TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA)|(0<<TWSTA)|(1<<TWSTO)|(0<<TWWC);
+
+void i2c_init()
+{
+ TWAR = BMC_ADDR;
+ TWCR &= ~(1<<TWSTA)|(1<<TWSTO);
+ TWCR|= (1<<TWEA) | (1<<TWEN)|(1<<TWIE);
+}
+
+ISR (TWI_vect)
+{
+ printf("Interrupt, Status: %02x!\n", TW_STATUS);
+
+ switch (TW_STATUS) {
+ default:
+ TWCR_RESET;
+ break;
+ }
+}