aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2011-11-14 08:32:52 +0000
committerDimitri Sokolyuk <demon@dim13.org>2011-11-14 08:32:52 +0000
commit761cfcacd7cacbe1e290e8422ae99bc51398954d (patch)
tree1e36c4cca1e620226c314f8c96d603361465cc64
parentde97cb96726b26c5ae065b3f9d0a6638ab3075d5 (diff)
remove maxval, bump duty cycle
-rw-r--r--kernel/dmx.c8
-rw-r--r--kernel/rgb.c30
-rw-r--r--kernel/tasks.h2
3 files changed, 15 insertions, 25 deletions
diff --git a/kernel/dmx.c b/kernel/dmx.c
index 8a27fd3..1a6297a 100644
--- a/kernel/dmx.c
+++ b/kernel/dmx.c
@@ -29,12 +29,12 @@ struct lcdarg lcdarg;
struct clockarg clockarg = { &lcdarg, &adcarg };
-struct rgbarg rgbargs = { 0, 0, 0, 0, &adcarg.value[0] };
+struct rgbarg rgbargs = { 0, 0, 0, &adcarg.value[0] };
struct pwmarg pwmargs[] = {
- { &rgbargs.r, PB2, &rgbargs.m },
- { &rgbargs.g, PB3, &rgbargs.m },
- { &rgbargs.b, PB4, &rgbargs.m }
+ { &rgbargs.r, PB2 },
+ { &rgbargs.g, PB3 },
+ { &rgbargs.b, PB4 }
};
int
diff --git a/kernel/rgb.c b/kernel/rgb.c
index 79b52f6..87b1772 100644
--- a/kernel/rgb.c
+++ b/kernel/rgb.c
@@ -28,13 +28,7 @@ rgb(void *arg)
{
struct rgbarg *a = (struct rgbarg *)arg;
uint16_t i = 0;
- uint8_t r, g, b, v = 255;
-
-#define SCALE 1
-
- cli();
- a->m = 255 >> SCALE;
- sei();
+ uint8_t r, g, b, v = 0;
update(0, MSEC(50));
@@ -43,9 +37,9 @@ rgb(void *arg)
hsv(&r, &g, &b, i, v, v);
cli();
- a->r = r >> SCALE;
- a->g = g >> SCALE;
- a->b = b >> SCALE;
+ a->r = r;
+ a->g = g;
+ a->b = b;
v = *a->v >> 2; /* 10bit to 8bit */
sei();
@@ -57,32 +51,30 @@ void
pwm(void *arg)
{
struct pwmarg *a = (struct pwmarg *)arg;
- uint16_t maxval, on, off;
+ uint32_t on, off;
DDRB |= _BV(a->pin);
PORTB &= ~_BV(a->pin);
-#define DL SEC4(5)
+#define DL SEC3(1)
- cli();
- maxval = *a->mval;
- sei();
update(0, DL);
for (;;) {
cli();
- on = *a->value;
+ on = SEC0(*a->value) / UINT8_MAX;
sei();
if (on) {
PORTB |= _BV(a->pin);
- update(SEC4(on), DL);
+ update(on, DL);
}
- off = maxval - on;
+ off = SEC0(UINT8_MAX - on) / UINT8_MAX;
+
if (off) {
PORTB &= ~_BV(a->pin);
- update(SEC4(off), DL);
+ update(off, DL);
}
}
}
diff --git a/kernel/tasks.h b/kernel/tasks.h
index 7787552..d89a8c3 100644
--- a/kernel/tasks.h
+++ b/kernel/tasks.h
@@ -45,14 +45,12 @@ struct rgbarg {
uint8_t r;
uint8_t g;
uint8_t b;
- uint8_t m;
uint16_t *v;
};
struct pwmarg {
uint8_t *value;
uint8_t pin;
- uint8_t *mval;
};
struct adcarg {