31 #define F_CPU 12000000UL
42 #define F_SOFT_TWI 100000UL
45 #ifndef TWI_SOFT_CLOCK_PULSE_US
53 #define TWI_SOFT_CLOCK_PULSE_US (float)(1000000.0/(F_SOFT_TWI<<1))
56 #ifndef TWI_SOFT_PULLUP_ENABLE
67 #define TWI_SOFT_PULLUP_ENABLE
79 #define TWI_SOFT_DDR DDRB
90 #define TWI_SOFT_PORT PORTB
101 #define TWI_SOFT_PIN PINB
112 #define TWI_SOFT_SCL PINB0
123 #define TWI_SOFT_SDA PINB1
139 #ifndef TWI_SOFT_STATUS
140 #define TWI_SOFT_STATUS_BUS_INIT_COMPLETE 0x00
141 #define TWI_SOFT_STATUS_TRANSMIT 0x01
142 #define TWI_SOFT_STATUS_RECEIVE 0x02
143 #define TWI_SOFT_STATUS_BUS_ERROR 0xFF
147 #ifndef TWI_SOFT_BLOCK_IE
161 #define TWI_SOFT_BLOCK_IE
167 #include <util/delay.h>
169 #ifdef TWI_SOFT_BLOCK_IE
170 #include <avr/interrupt.h>
187 #ifdef TWI_SOFT_PULLUP_ENABLE
188 #define SCL_LOW() { TWI_SOFT_PORT &= ~(1<<TWI_SOFT_SCL); TWI_SOFT_DDR |= (1<<TWI_SOFT_SCL); }
189 #define SDA_LOW() { TWI_SOFT_PORT &= ~(1<<TWI_SOFT_SDA); TWI_SOFT_DDR |= (1<<TWI_SOFT_SDA); }
190 #define SCL_HIGH() { TWI_SOFT_DDR &= ~(1<<TWI_SOFT_SCL); TWI_SOFT_PORT |= (1<<TWI_SOFT_SCL); }
191 #define SDA_HIGH() { TWI_SOFT_DDR &= ~(1<<TWI_SOFT_SDA); TWI_SOFT_PORT |= (1<<TWI_SOFT_SDA); }
193 #define SCL_LOW() { TWI_SOFT_PORT &= ~(1<<TWI_SOFT_SCL); TWI_SOFT_DDR |= (1<<TWI_SOFT_SCL); }
194 #define SDA_LOW() { TWI_SOFT_PORT &= ~(1<<TWI_SOFT_SCL); TWI_SOFT_DDR |= (1<<TWI_SOFT_SDA); }
195 #define SDA_HIGH() { TWI_SOFT_DDR &= ~(1<<TWI_SOFT_SDA); TWI_SOFT_PORT &= ~(1<<TWI_SOFT_SCL); }
196 #define SCL_HIGH() { TWI_SOFT_DDR &= ~(1<<TWI_SOFT_SCL); TWI_SOFT_PORT &= ~(1<<TWI_SOFT_SCL); }
Macro definitions for TWI/I2C communication flags and operations.
Enumerations for TWI/I2C interface modes, operations, acknowledgment, and error codes.
enum TWI_Acknowledge_t TWI_Acknowledge
Alias for enum TWI_Acknowledge_t representing TWI acknowledge mode.
Definition TWI_enums.h:66
enum TWI_Operation_t TWI_Operation
Alias for enum TWI_Operation_t representing TWI operation modes.
Definition TWI_enums.h:48
enum TWI_Error_t TWI_Error
Alias for enum TWI_Error_t representing TWI error status.
Definition TWI_enums.h:89
void twi_soft_stop(void)
Stop the TWI (I2C) transmission.
Definition twi_soft.c:116
TWI_Error twi_soft_address(unsigned char address, TWI_Operation operation)
Sends the slave address with the read/write operation on the TWI bus.
Definition twi_soft.c:140
TWI_Error twi_soft_get(unsigned char *data, TWI_Acknowledge acknowledge)
Reads a byte of data from the TWI bus and sends an ACK or NACK.
Definition twi_soft.c:216
TWI_Error twi_soft_set(unsigned char data)
Transmit a byte of data on the TWI bus.
Definition twi_soft.c:156
void twi_soft_disable(void)
Disable the software TWI (I2C) interface.
Definition twi_soft.c:56
unsigned char twi_soft_status(void)
Get the current status of the software TWI bus.
Definition twi_soft.c:70
unsigned char twi_soft_init(void)
Initialize the software TWI (I2C) bus.
Definition twi_soft.c:32
TWI_Error twi_soft_start(void)
Generate a TWI start or repeated start condition.
Definition twi_soft.c:87