Welcome to i2c2pwm rev.0.1 by Kadir Mueller in 2017. i2c2pwm is a 3-channel PWM controller firmware for your AVR controller. The PWMs individual duty cycles can be controlled via I2C. And yes, I know already that there are complete chips out there that are doing exactly this job. i2c2pwm makes an I2C-slave out of your AVR MCU. Its I2C-address defaults to 0x2a (customizable in Makefile). At this address you can access five registers: 0: PWM duty cycle of PB1. 1: PWM duty cycle of PB2. 2: PWM duty cycle of PB3. 4: When !=0: On every loop, set PB5 (Arduino internal LED) high for some ms. 5: When !=0: On every loop, dump the registers contents to serial. i2c2pwm uses the TWI-Slave code of uwegw from "http://rn-wissen.de". I've used both twislave.c and twislave.h from: http://rn-wissen.de/wiki/index.php?title=TWI_Slave_mit_avr-gcc Please see http://www.theflatnet.de/i2c2pwm/ for license and more information.