From 00d59704696130cdd39a29914c7081d65db44b77 Mon Sep 17 00:00:00 2001 From: jaseg Date: Mon, 10 Sep 2012 20:44:07 +0200 Subject: [PATCH] 16-bit pwm fading with hsv-rgb conversion working Todo: ART control --- 7seg.c => avr/7seg.c | 0 7seg.h => avr/7seg.h | 0 Makefile => avr/Makefile | 0 cerebrum_firmware.c => avr/cerebrum_firmware.c | 1 + dump.py => avr/dump.py | 2 +- foo.py => avr/foo.py | 0 input.c => avr/input.c | 1 + input.h => avr/input.h | 1 + led.c => avr/led.c | 0 led.h => avr/led.h | 0 pwm.c => avr/pwm.c | 53 ++++++++++++++++++++++++++ pwm.h => avr/pwm.h | 7 +--- r0ketbeam.c => avr/r0ketbeam.c | 0 r0ketbeam.h => avr/r0ketbeam.h | 0 spi.c => avr/spi.c | 0 spi.h => avr/spi.h | 0 todo => avr/todo | 0 uart.c => avr/uart.c | 0 uart.h => avr/uart.h | 0 util.c => avr/util.c | 0 util.h => avr/util.h | 0 21 files changed, 58 insertions(+), 7 deletions(-) rename 7seg.c => avr/7seg.c (100%) rename 7seg.h => avr/7seg.h (100%) rename Makefile => avr/Makefile (100%) rename cerebrum_firmware.c => avr/cerebrum_firmware.c (99%) rename dump.py => avr/dump.py (63%) rename foo.py => avr/foo.py (100%) rename input.c => avr/input.c (93%) rename input.h => avr/input.h (87%) rename led.c => avr/led.c (100%) rename led.h => avr/led.h (100%) rename pwm.c => avr/pwm.c (70%) rename pwm.h => avr/pwm.h (88%) rename r0ketbeam.c => avr/r0ketbeam.c (100%) rename r0ketbeam.h => avr/r0ketbeam.h (100%) rename spi.c => avr/spi.c (100%) rename spi.h => avr/spi.h (100%) rename todo => avr/todo (100%) rename uart.c => avr/uart.c (100%) rename uart.h => avr/uart.h (100%) rename util.c => avr/util.c (100%) rename util.h => avr/util.h (100%) diff --git a/7seg.c b/avr/7seg.c similarity index 100% rename from 7seg.c rename to avr/7seg.c diff --git a/7seg.h b/avr/7seg.h similarity index 100% rename from 7seg.h rename to avr/7seg.h diff --git a/Makefile b/avr/Makefile similarity index 100% rename from Makefile rename to avr/Makefile diff --git a/cerebrum_firmware.c b/avr/cerebrum_firmware.c similarity index 99% rename from cerebrum_firmware.c rename to avr/cerebrum_firmware.c index 7fa895a..f031bc1 100644 --- a/cerebrum_firmware.c +++ b/avr/cerebrum_firmware.c @@ -186,5 +186,6 @@ void loop(){ //one frame l7seg_loop(); input_loop(); pwm_loop(); + config_loop(); _delay_ms(1); } diff --git a/dump.py b/avr/dump.py similarity index 63% rename from dump.py rename to avr/dump.py index 394c412..a8503fc 100755 --- a/dump.py +++ b/avr/dump.py @@ -1,5 +1,5 @@ #!/usr/bin/env python import serial -ser = serial.Serial("/dev/ttyUSB0", 57600) +ser = serial.Serial("/dev/ttyACM0", 57600) while(True): print ser.readline(), diff --git a/foo.py b/avr/foo.py similarity index 100% rename from foo.py rename to avr/foo.py diff --git a/input.c b/avr/input.c similarity index 93% rename from input.c rename to avr/input.c index 1c540ca..05c67be 100644 --- a/input.c +++ b/avr/input.c @@ -15,6 +15,7 @@ void input_loop(void){ uart_puthex(i); uart_puthex(switch_states[i]&1); uart_putc('\n'); + input_callback(i, switch_states[i]&1); debounce_timeouts[i] = 0xF0; switch_states[i] = (switch_states[i]<<1)&3; } diff --git a/input.h b/avr/input.h similarity index 87% rename from input.h rename to avr/input.h index 8f608c7..748935f 100644 --- a/input.h +++ b/avr/input.h @@ -14,6 +14,7 @@ void input_loop(void); extern uint8_t debounce_timeouts[INPUT_COUNT]; extern uint8_t switch_states[INPUT_COUNT]; void input_scan_inputs(void); +void input_callback(uint8_t input, uint8_t state); #endif//HAS_INPUT_SUPPORT #endif//__INPUTS_H__ diff --git a/led.c b/avr/led.c similarity index 100% rename from led.c rename to avr/led.c diff --git a/led.h b/avr/led.h similarity index 100% rename from led.h rename to avr/led.h diff --git a/pwm.c b/avr/pwm.c similarity index 70% rename from pwm.c rename to avr/pwm.c index 493c92f..90a4051 100644 --- a/pwm.c +++ b/avr/pwm.c @@ -43,7 +43,59 @@ uint8_t pwm_cycle = 1; uint8_t pwm_val[8]; rgb_value_t hsv_to_rgb(hsv_value_t k){ + int f; + long p, q, t; + rgb_value_t ret = {0, 0, 0}; + + if(k.s==0){ + ret.r = ret.g = ret.b = k.v; + return ret; + } + + f = ((k.h%60)*255)/60; + k.h /= 60; + + p = (k.v * (256 - k.s))/256; + q = (k.v * ( 256 - (k.s * f)/256 ))/256; + t = (k.v * ( 256 - (k.s * ( 256 - f ))/256))/256; + + switch(k.h){ + case 0: + ret.r = k.v; + ret.g = t; + ret.b = p; + break; + case 1: + ret.r = q; + ret.g = k.v; + ret.b = p; + break; + case 2: + ret.r = p; + ret.g = k.v; + ret.b = t; + break; + case 3: + ret.r = p; + ret.g = q; + ret.b = k.v; + break; + case 4: + ret.r = t; + ret.g = p; + ret.b = k.v; + break; + default: + ret.r = k.v; + ret.g = p; + ret.b = q; + break; + } + return ret; +} +/* //The following algorithm is loosely based on http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB + //AND BROKEN uint16_t c_ = (uint16_t)k.v * (uint16_t)k.s; uint8_t c = c_>>8; uint8_t m = k.v - c; @@ -107,6 +159,7 @@ rgb_value_t hsv_to_rgb(hsv_value_t k){ } return ret; } +*/ #else//HAS_PWM_SUPPORT diff --git a/pwm.h b/avr/pwm.h similarity index 88% rename from pwm.h rename to avr/pwm.h index ac315d8..bc24a1f 100644 --- a/pwm.h +++ b/avr/pwm.h @@ -33,16 +33,11 @@ typedef union { } rgb_color_t; typedef struct { - uint8_t h; + uint16_t h; uint8_t s; uint8_t v; } hsv_value_t; -typedef union { - hsv_value_t hsv_value; - uint8_t components[3]; -} hsv_color_t; - rgb_value_t hsv_to_rgb(hsv_value_t k); #endif//HAS_PWM_SUPPORT diff --git a/r0ketbeam.c b/avr/r0ketbeam.c similarity index 100% rename from r0ketbeam.c rename to avr/r0ketbeam.c diff --git a/r0ketbeam.h b/avr/r0ketbeam.h similarity index 100% rename from r0ketbeam.h rename to avr/r0ketbeam.h diff --git a/spi.c b/avr/spi.c similarity index 100% rename from spi.c rename to avr/spi.c diff --git a/spi.h b/avr/spi.h similarity index 100% rename from spi.h rename to avr/spi.h diff --git a/todo b/avr/todo similarity index 100% rename from todo rename to avr/todo diff --git a/uart.c b/avr/uart.c similarity index 100% rename from uart.c rename to avr/uart.c diff --git a/uart.h b/avr/uart.h similarity index 100% rename from uart.h rename to avr/uart.h diff --git a/util.c b/avr/util.c similarity index 100% rename from util.c rename to avr/util.c diff --git a/util.h b/avr/util.h similarity index 100% rename from util.h rename to avr/util.h -- 2.11.4.GIT