ArduboyI2C Library
Loading...
Searching...
No Matches
ArduboyI2C.h File Reference

An I2C library for Arduboy multiplayer games. More...

#include <avr/interrupt.h>
#include <avr/power.h>
#include <util/twi.h>
#include <stdint.h>

Go to the source code of this file.

Classes

class  I2C
 

Macros

#define I2C_FREQUENCY   100000
 The initial I2C frequency.
 
#define I2C_BUFFER_SIZE   32
 The size of the buffer used for writes/target (slave) operations.
 
#define I2C_BUS_BUSY_CHECKS   16
 The amount of times the bus is checked before continuing with a read/write operation.
 
#define I2C_SCL_PIN   PIND
 The pin on which the SCL line is connected.
 
#define I2C_SCL_BIT   PIND0
 The bit of the pin on which the SCL line is connected.
 
#define I2C_SDA_PIN   PIND
 The pin on which the SDA line is connected.
 
#define I2C_SDA_BIT   PIND1
 The bit of the pin on which the sda line is connected.
 
#define I2C_MAX_PLAYERS
 The maxmimum number of players in the handshake/lobby.
 
#define TW_SUCCESS   0xFF
 Error code used to mean success, returned by I2C::getTWError().
 
#define I2C_HANDSHAKE_FAILED   0xFE
 Error code RETURNED by I2C::handshake, meaning the handshake has already been completed.
 
#define I2C_MAX_ADDRESSES   112
 The maximum amount of addresses available to a device.
 
#define I2C_LIB_VER   20000
 I2C library version.

 

Detailed Description

An I2C library for Arduboy multiplayer games.

Macro Definition Documentation

◆ I2C_BUFFER_SIZE

#define I2C_BUFFER_SIZE   32

The size of the buffer used for writes/target (slave) operations.

Defaults to 32. If more than 32 bytes are needed for writes/target (slave) operations, increase. If more RAM is needed, decrease.

◆ I2C_BUS_BUSY_CHECKS

#define I2C_BUS_BUSY_CHECKS   16

The amount of times the bus is checked before continuing with a read/write operation.

Defaults to 16. Fixes design flaw where TWI hardware does not check if the bus has become busy during a stop interrupt, so if multiple targets (slaves) receive the stop interrupt right before they become the controller (master) and send a start, they all will think the bus is free and clobber each other. Can be set to 0 when there is only one controller (master). Increase if the game ever freezes. More information: https://www.robotroom.com/Atmel-AVR-TWI-I2C-Multi-Master-Problem.html

◆ I2C_FREQUENCY

#define I2C_FREQUENCY   100000

The initial I2C frequency.

Defaults to 100000 Hz.
Standard frequencies:
100000 Hz - Standard Mode
400000 Hz - Fast Mode

◆ I2C_LIB_VER

#define I2C_LIB_VER   20000

I2C library version.

For a given version x.y.z, the library version will be in the form xxxyyzz with no leading zeros on x.

◆ I2C_MAX_ADDRESSES

#define I2C_MAX_ADDRESSES   112

The maximum amount of addresses available to a device.

I2C uses a 7-bit addressing scheme with 127 available unique addresses. However, addresses 0-7 and 120-127 are reserved by the standard and should not be used. This leaves 112 addresses for devices to use.

◆ I2C_MAX_PLAYERS

#define I2C_MAX_PLAYERS

The maxmimum number of players in the handshake/lobby.

Cannot be more than I2C_MAX_ADDRESSES.

◆ I2C_SCL_BIT

#define I2C_SCL_BIT   PIND0

The bit of the pin on which the SCL line is connected.

Defaults to PIND0.

◆ I2C_SCL_PIN

#define I2C_SCL_PIN   PIND

The pin on which the SCL line is connected.

Defaults to PIND.

◆ I2C_SDA_BIT

#define I2C_SDA_BIT   PIND1

The bit of the pin on which the sda line is connected.

Defaults to PIND1.

◆ I2C_SDA_PIN

#define I2C_SDA_PIN   PIND

The pin on which the SDA line is connected.

Defaults to PIND.