summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2013-02-06 03:12:48 +0000
committerChristian Pointner <equinox@spreadspace.org>2013-02-06 03:12:48 +0000
commitb119a2454b2cfd1a9d7f98e3c438d7476c822f79 (patch)
tree2efb3e46263351ccb75be326106491f4a7f200ea
parentadded first version for ledmatrix driver (diff)
added blink targets for ledmatrix
git-svn-id: https://svn.spreadspace.org/avr/trunk@126 aa12f405-d877-488e-9caf-2d797e2a1cc7
-rw-r--r--usb-i2c-sl018/ledmatrix.c105
1 files changed, 87 insertions, 18 deletions
diff --git a/usb-i2c-sl018/ledmatrix.c b/usb-i2c-sl018/ledmatrix.c
index f0b4ba8..c5d729a 100644
--- a/usb-i2c-sl018/ledmatrix.c
+++ b/usb-i2c-sl018/ledmatrix.c
@@ -34,52 +34,106 @@
ledmatrix_mode_t mode = off;
-void ledmatrix_off(void)
+void ledmatrix_start_timer(void)
+{
+ TCCR3A = 0; // prescaler 1:1024, WGM = 4 (CTC)
+ TCCR3B = 1<<WGM32 | 1<<CS32 | 1<<CS30; //
+ OCR3A = 1561; // (1+1561)*1024 = 1599488 -> ~100 ms @ 16 MHz
+ TCNT3 = 0;
+ TIMSK3 = 1<<OCIE3A;
+}
+
+void ledmatrix_stop_timer(void)
+{
+ TCCR3B = 0;
+ TIMSK3 = 0;
+}
+
+void ledmatrix_off_init(void)
{
LEDMATRIX_PORT = LEDMATRIX_MASK;
LEDMATRIX_PORT |= 1<<LEDMATRIX_RED | 1<<LEDMATRIX_GREEN;
}
-void ledmatrix_red(void)
+
+void ledmatrix_red_init(void)
{
LEDMATRIX_PORT = LEDMATRIX_MASK | 1<<LEDMATRIX_GREEN;
LEDMATRIX_PORT &= ~(1<<LEDMATRIX_RED);
}
-void ledmatrix_red_moving(void)
+
+void ledmatrix_red_moving_init(void)
+{
+
+}
+
+void ledmatrix_red_moving_handle(void)
{
}
-void ledmatrix_red_blink(void)
+
+void ledmatrix_red_blink_init(void)
{
+ ledmatrix_red_init();
+ ledmatrix_start_timer();
+}
+void ledmatrix_red_blink_handle(void)
+{
+ LEDMATRIX_PORT ^= 1<<LEDMATRIX_RED;
}
-void ledmatrix_green(void)
+
+void ledmatrix_green_init(void)
{
LEDMATRIX_PORT = LEDMATRIX_MASK | 1<<LEDMATRIX_RED;
LEDMATRIX_PORT &= ~(1<<LEDMATRIX_GREEN);
}
-void ledmatrix_green_moving(void)
+
+void ledmatrix_green_moving_init(void)
+{
+
+}
+
+void ledmatrix_green_moving_handle(void)
{
}
-void ledmatrix_green_blink(void)
+
+void ledmatrix_green_blink_init(void)
{
+ ledmatrix_green_init();
+ ledmatrix_start_timer();
+}
+void ledmatrix_green_blink_handle(void)
+{
+ LEDMATRIX_PORT ^= 1<<LEDMATRIX_GREEN;
}
-void ledmatrix_rg_moving(void)
+
+void ledmatrix_rg_moving_init(void)
{
+}
+void ledmatrix_rg_moving_handle(void)
+{
}
-void ledmatrix_rg_blink(void)
+
+void ledmatrix_rg_blink_init(void)
{
+ ledmatrix_red_init();
+ ledmatrix_start_timer();
+}
+void ledmatrix_rg_blink_handle(void)
+{
+ LEDMATRIX_PORT ^= ~(LEDMATRIX_MASK);
}
@@ -92,17 +146,32 @@ void init_ledmatrix(void)
void ledmatrix(ledmatrix_mode_t m)
{
mode = m;
+ ledmatrix_stop_timer();
switch(mode)
{
- case off: ledmatrix_off(); break;
- case red: ledmatrix_red(); break;
- case red_moving: ledmatrix_red_moving(); break;
- case red_blink: ledmatrix_red_blink(); break;
- case green: ledmatrix_green(); break;
- case green_moving: ledmatrix_green_moving(); break;
- case green_blink: ledmatrix_green_blink(); break;
- case rg_moving: ledmatrix_rg_moving(); break;
- case rg_blink: ledmatrix_rg_blink(); break;
+ case off: ledmatrix_off_init(); break;
+ case red: ledmatrix_red_init(); break;
+ case red_moving: ledmatrix_red_moving_init(); break;
+ case red_blink: ledmatrix_red_blink_init(); break;
+ case green: ledmatrix_green_init(); break;
+ case green_moving: ledmatrix_green_moving_init(); break;
+ case green_blink: ledmatrix_green_blink_init(); break;
+ case rg_moving: ledmatrix_rg_moving_init(); break;
+ case rg_blink: ledmatrix_rg_blink_init(); break;
+ }
+}
+
+ISR(TIMER3_COMPA_vect)
+{
+ switch(mode)
+ {
+ case red_moving: ledmatrix_red_moving_handle(); break;
+ case red_blink: ledmatrix_red_blink_handle(); break;
+ case green_moving: ledmatrix_green_moving_handle(); break;
+ case green_blink: ledmatrix_green_blink_handle(); break;
+ case rg_moving: ledmatrix_rg_moving_handle(); break;
+ case rg_blink: ledmatrix_rg_blink_handle(); break;
+ default: break;
}
}