Raw Text Content QR
snail-jaguar-bat



#include "I2C.h"

void TWI_start(void) {
    TWCR = (1 << TWEN) | (1 << TWSTA) | (1 << TWINT);
    while (!(TWCR & (1 << TWINT)));
    _delay_ms(10);
}

void TWI_address_transmit(void) {
    TWDR = 0b01001000; // Write address
    TWCR = (1 << TWEN) | (1 << TWINT);
    while (!(TWCR & (1 << TWINT)));
    _delay_ms(10);
}

void TWI_address_receive(void) {
    TWDR = 0b01001001; // Read address
    TWCR = (1 << TWEN) | (1 << TWINT);
    while (!(TWCR & (1 << TWINT)));
    _delay_ms(10);
}

uint8_t TWI_receive_ACK(void) {
    TWCR = (1 << TWEN) | (1 << TWINT) | (1 << TWEA);  // ACK
    while (!(TWCR & (1 << TWINT)));
    return TWDR;
}

uint8_t TWI_receive_NACK(void) {
    TWCR = (1 << TWEN) | (1 << TWINT);  // NACK
    while (!(TWCR & (1 << TWINT)));
    return TWDR;
}

void TWI_stop(void) {
    TWCR = (1 << TWEN) | (1 << TWSTO) | (1 << TWINT);
    _delay_ms(10);
}

Read 5 times, last 27 hours ago