<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pauljmac.com/projects/index.php?action=history&amp;feed=atom&amp;title=RGB_LED_Fader</id>
	<title>RGB LED Fader - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pauljmac.com/projects/index.php?action=history&amp;feed=atom&amp;title=RGB_LED_Fader"/>
	<link rel="alternate" type="text/html" href="https://pauljmac.com/projects/index.php?title=RGB_LED_Fader&amp;action=history"/>
	<updated>2026-04-21T13:58:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://pauljmac.com/projects/index.php?title=RGB_LED_Fader&amp;diff=6&amp;oldid=prev</id>
		<title>Paul: Created page with &quot;==Abstract== This is a neat little thing that will generate a very smooth fading RGB LED. I used these little [http://macetech.com/store/index.php?main_page=product_info&amp;cPath=1&amp;products_id=1&amp;zenid=88668e82703841817ce99ebaed27c970 ShiftBright] modules which have the A6281 already mounted along with an RGB LED. I don&#039;t have the ability to solder a 3mm x 3mm QFN myself. == Parts == *[http://www.atmel.com/dyn/products/product_card.asp?part_id=3828 ATtiny44] *[http://www.all...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pauljmac.com/projects/index.php?title=RGB_LED_Fader&amp;diff=6&amp;oldid=prev"/>
		<updated>2024-12-08T16:06:47Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Abstract== This is a neat little thing that will generate a very smooth fading RGB LED. I used these little [http://macetech.com/store/index.php?main_page=product_info&amp;amp;cPath=1&amp;amp;products_id=1&amp;amp;zenid=88668e82703841817ce99ebaed27c970 ShiftBright] modules which have the A6281 already mounted along with an RGB LED. I don&amp;#039;t have the ability to solder a 3mm x 3mm QFN myself. == Parts == *[http://www.atmel.com/dyn/products/product_card.asp?part_id=3828 ATtiny44] *[http://www.all...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Abstract==&lt;br /&gt;
This is a neat little thing that will generate a very smooth fading RGB LED. I used these little [http://macetech.com/store/index.php?main_page=product_info&amp;amp;cPath=1&amp;amp;products_id=1&amp;amp;zenid=88668e82703841817ce99ebaed27c970 ShiftBright] modules which have the A6281 already mounted along with an RGB LED. I don&amp;#039;t have the ability to solder a 3mm x 3mm QFN myself.&lt;br /&gt;
== Parts ==&lt;br /&gt;
*[http://www.atmel.com/dyn/products/product_card.asp?part_id=3828 ATtiny44]&lt;br /&gt;
*[http://www.allegromicro.com/en/Products/Part_Numbers/6281/ A6281] 3-Channel Constant Current LED Driver with Programmable PWM Control&lt;br /&gt;
== Code ==&lt;br /&gt;
main.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define bit_get(p,m) ((p) &amp;amp; (m))&lt;br /&gt;
#define bit_set(p,m) ((p) |= (m))&lt;br /&gt;
#define bit_clear(p,m) ((p) &amp;amp;= ~(m))&lt;br /&gt;
#define bit_flip(p,m) ((p) ^= (m))&lt;br /&gt;
#define bit_write(c,p,m) (c ? bit_set(p,m) : bit_clear(p,m))&lt;br /&gt;
#define BIT(x) (0x01 &amp;lt;&amp;lt; (x))&lt;br /&gt;
#define LONGBIT(x) ((unsigned long)0x00000001 &amp;lt;&amp;lt; (x))&lt;br /&gt;
#define NOP asm(&amp;quot;nop&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#define E_S bit_set(PORTA,BIT(0));&lt;br /&gt;
#define E_C bit_clear(PORTA,BIT(0)); //OE is active low, this turns lights on&lt;br /&gt;
&lt;br /&gt;
#define L_S bit_set(PORTA,BIT(1));&lt;br /&gt;
#define L_C bit_clear(PORTA,BIT(1));&lt;br /&gt;
&lt;br /&gt;
#define LED_OFF bit_clear(PORTA,BIT(7));&lt;br /&gt;
#define LED_ON bit_set(PORTA,BIT(7));&lt;br /&gt;
&lt;br /&gt;
#define shift USICR|=(1&amp;lt;&amp;lt;USICLK);	//generates a shift in the SPI register&lt;br /&gt;
#define clock USICR|=(1&amp;lt;&amp;lt;USITC);	//generates a clock on the SPI bus &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//PA1 is Latch inout&lt;br /&gt;
//PA0 is Enable output&lt;br /&gt;
&lt;br /&gt;
volatile uint8_t x=0;&lt;br /&gt;
&lt;br /&gt;
void Port_setup(void){&lt;br /&gt;
	DDRA|=(1&amp;lt;&amp;lt;PA7)|(0&amp;lt;&amp;lt;PA6)|(1&amp;lt;&amp;lt;PA5)|(1&amp;lt;&amp;lt;PA4)|(1&amp;lt;&amp;lt;PA1)|(1&amp;lt;&amp;lt;PA0); //seting up the apropriate SPI i/o&amp;#039;s&lt;br /&gt;
	USICR|=(0&amp;lt;&amp;lt;USIWM1)|(1&amp;lt;&amp;lt;USIWM0)|(0&amp;lt;&amp;lt;USICS1)|(0&amp;lt;&amp;lt;USICS0); //SPI mode&lt;br /&gt;
	DDRB|=(0&amp;lt;&amp;lt;PB1);&lt;br /&gt;
	PORTB|=(1&amp;lt;&amp;lt;PORTB0);&lt;br /&gt;
	LED_OFF;&lt;br /&gt;
	&lt;br /&gt;
	E_C;&lt;br /&gt;
	L_C;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void shft8bit(unsigned char val)&lt;br /&gt;
{&lt;br /&gt;
   USIDR = val;&lt;br /&gt;
   USISR = (1&amp;lt;&amp;lt;USIOIF);&lt;br /&gt;
   do {&lt;br /&gt;
      USICR = (1&amp;lt;&amp;lt;USIWM0)|(1&amp;lt;&amp;lt;USICS1)|(1&amp;lt;&amp;lt;USICLK)|(1&amp;lt;&amp;lt;USITC);&lt;br /&gt;
	  _delay_us(40);&lt;br /&gt;
   } while ((USISR &amp;amp; (1&amp;lt;&amp;lt;USIOIF)) == 0);&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void colors(uint16_t red, uint16_t green, uint16_t blue)&lt;br /&gt;
{&lt;br /&gt;
	volatile uint32_t packet=1;&lt;br /&gt;
&lt;br /&gt;
	packet = (packet &amp;lt;&amp;lt; 2)| (blue &amp;amp; 1023);&lt;br /&gt;
	packet = (packet &amp;lt;&amp;lt; 10)| (red &amp;amp; 1023);&lt;br /&gt;
	packet = (packet &amp;lt;&amp;lt; 10)| (green &amp;amp; 1023);&lt;br /&gt;
&lt;br /&gt;
	shft8bit((packet&amp;gt;&amp;gt;24) &amp;amp; 0xff);&lt;br /&gt;
	shft8bit((packet&amp;gt;&amp;gt;16) &amp;amp; 0xff);&lt;br /&gt;
	shft8bit((packet&amp;gt;&amp;gt;8) &amp;amp; 0xff);&lt;br /&gt;
	shft8bit((packet&amp;gt;&amp;gt;0) &amp;amp; 0xff);&lt;br /&gt;
	L_S;&lt;br /&gt;
	_delay_us(40);&lt;br /&gt;
	L_C;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void LED_setup(void)&lt;br /&gt;
{&lt;br /&gt;
	shft8bit(0b11111111);&lt;br /&gt;
	shft8bit(0b11111111);&lt;br /&gt;
	shft8bit(0b11111111);&lt;br /&gt;
	shft8bit(0b00111111);&lt;br /&gt;
	L_S;&lt;br /&gt;
	_delay_us(40);&lt;br /&gt;
	L_C;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Blue(void)&lt;br /&gt;
{&lt;br /&gt;
	// blue&lt;br /&gt;
	shft8bit(0b10111111);&lt;br /&gt;
	shft8bit(0b11110000);&lt;br /&gt;
	shft8bit(0b00000000);&lt;br /&gt;
	shft8bit(0b00000000);&lt;br /&gt;
	L_S;&lt;br /&gt;
	_delay_us(40);&lt;br /&gt;
	L_C;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Red(void)&lt;br /&gt;
{&lt;br /&gt;
	// red		&lt;br /&gt;
	shft8bit(0b10000000);&lt;br /&gt;
	shft8bit(0b00001111);&lt;br /&gt;
	shft8bit(0b11111100);&lt;br /&gt;
	shft8bit(0b00000000);&lt;br /&gt;
	L_S;&lt;br /&gt;
	_delay_us(40);&lt;br /&gt;
	L_C;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Green(void)&lt;br /&gt;
{&lt;br /&gt;
	// green&lt;br /&gt;
	shft8bit(0b10000000);&lt;br /&gt;
	shft8bit(0b00000000);&lt;br /&gt;
	shft8bit(0b00000011);&lt;br /&gt;
	shft8bit(0b11111111);&lt;br /&gt;
	L_S;&lt;br /&gt;
	_delay_us(40);&lt;br /&gt;
	L_C;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Clear(void)&lt;br /&gt;
{&lt;br /&gt;
	// green&lt;br /&gt;
	shft8bit(0b10000000);&lt;br /&gt;
	shft8bit(0b00000000);&lt;br /&gt;
	shft8bit(0b00000000);&lt;br /&gt;
	shft8bit(0b00000000);&lt;br /&gt;
	L_S;&lt;br /&gt;
	_delay_us(40);&lt;br /&gt;
	L_C;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Delay(void)&lt;br /&gt;
{&lt;br /&gt;
	_delay_ms(40);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main (void)&lt;br /&gt;
{&lt;br /&gt;
	E_S;&lt;br /&gt;
	Delay();&lt;br /&gt;
	Port_setup();&lt;br /&gt;
	LED_setup();&lt;br /&gt;
	Clear();&lt;br /&gt;
	Clear();&lt;br /&gt;
	E_C;&lt;br /&gt;
	LED_ON;&lt;br /&gt;
	for(;;)&lt;br /&gt;
	{	&lt;br /&gt;
		int y=0;&lt;br /&gt;
		for(int i=1023;i&amp;gt;0;i--)&lt;br /&gt;
		{&lt;br /&gt;
			y++;&lt;br /&gt;
			colors(i,y,0);&lt;br /&gt;
			Delay();&lt;br /&gt;
		}&lt;br /&gt;
		y=0;&lt;br /&gt;
		for(int i=1023;i&amp;gt;0;i--)&lt;br /&gt;
		{&lt;br /&gt;
			y++;&lt;br /&gt;
			colors(0,i,y);&lt;br /&gt;
			Delay();&lt;br /&gt;
		}&lt;br /&gt;
		y=0;&lt;br /&gt;
		for(int i=1023;i&amp;gt;0;i--)&lt;br /&gt;
		{&lt;br /&gt;
			y++;&lt;br /&gt;
			colors(y,0,i);&lt;br /&gt;
			Delay();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul</name></author>
	</entry>
</feed>