From 919626437f4bcd08cac2696be5a74eaa92ddb704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Sun, 8 Nov 2020 08:56:31 +0100 Subject: [PATCH] Create I2C/TWI library and enable it --- i2c.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ i2c.h | 16 ++++++++++++++++ main.c | 4 ++++ 3 files changed, 80 insertions(+) create mode 100644 i2c.c create mode 100644 i2c.h diff --git a/i2c.c b/i2c.c new file mode 100644 index 0000000..30cc81a --- /dev/null +++ b/i2c.c @@ -0,0 +1,60 @@ +#include +#include "i2c.h" + +void i2c_init(uint32_t bitrate) +{ + uint8_t prescaler_options[] = {1, 4, 16, 64}; + uint8_t prescaler_value = prescaler_options[TWSR & 0x03]; // 0x03 (hex) = 0b00000011 (bin) + TWBR = (uint8_t)((F_CPU / bitrate - 16) / (2 * prescaler_value)); +} + +void i2c_start(void) +{ + TWCR = (1< #include +#include "i2c.h" #include "led.h" +#define I2C_BITRATE 100000UL // 100kHz + int main() { + i2c_init(I2C_BITRATE); led_init(); sei();