Skip to content
GitLab
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Jan Kasprzak
tinyboard
Commits
946b1461
Commit
946b1461
authored
Dec 22, 2013
by
Jan Kasprzak
Browse files
rgb-led-string: single-direction white stars
parent
0692e26c
Changes
4
Hide whitespace changes
Inline
Side-by-side
projects/rgb-led-string/Makefile
View file @
946b1461
PROGRAM
=
rgbstring
SRC
=
version.c main.c logging.c
SRC
=
version.c main.c logging.c
serial.c
OBJ
=
$(
SRC:.c
=
.o
)
...
...
@@ -8,7 +8,7 @@ MCU=attiny45
AVRDUDE_MCU
=
$(
MCU
)
AVRDUDE_PROGRAMMER
=
usbasp
CFLAGS
=
-Wall
-Os
-mmcu
=
$(
MCU
)
-DUSE_LOGGING
=
1
-DF_CPU
=
1
000000UL
-std
=
gnu99
CFLAGS
=
-Wall
-Os
-mmcu
=
$(
MCU
)
-DUSE_LOGGING
=
1
-DF_CPU
=
8
000000UL
-std
=
gnu99
LDFLAGS
=
AVRDUDE_FLAGS
=
-p
$(
AVRDUDE_MCU
)
-c
$(
AVRDUDE_PROGRAMMER
)
...
...
projects/rgb-led-string/main.c
View file @
946b1461
...
...
@@ -4,17 +4,86 @@
#include
"rgbstring.h"
unsigned
char
jiffies
;
typedef
struct
{
unsigned
char
type
:
4
;
unsigned
char
order
:
4
;
}
pixel_t
;
pixel_t
pixels
[
STRIP_SIZE
];
int
main
(
void
)
{
unsigned
char
i
,
start
,
rgb
,
jiffies
;
init_log
();
init_serial
();
_delay_ms
(
3000
/
8
);
CLKPR
=
_BV
(
CLKPCE
);
CLKPR
=
0
;
log_set_state
(
3
);
for
(
i
=
0
;
i
<
STRIP_SIZE
;
i
+=
23
)
pixels
[
i
].
type
=
2
;
DDRB
|=
_BV
(
PB2
);
while
(
1
)
{
PORTB
|=
_BV
(
PB2
);
_delay_ms
(
200
);
PORTB
&=~
_BV
(
PB2
);
_delay_ms
(
200
);
jiffies
++
;
if
((
jiffies
&
7
)
==
0
)
{
pixels
[
start
].
type
=
1
;
pixels
[
start
].
order
=
14
;
}
if
((
jiffies
&
7
)
==
3
)
{
pixels
[
start
].
type
=
2
;
pixels
[
start
].
order
=
0
;
start
+=
19
;
}
start
+=
63
;
if
(
start
>=
STRIP_SIZE
)
start
-=
STRIP_SIZE
;
for
(
i
=
0
;
i
<
STRIP_SIZE
;
i
++
)
{
unsigned
char
type
=
pixels
[
i
].
type
;
unsigned
char
order
=
pixels
[
i
].
order
;
switch
(
type
)
{
case
0
:
send_rgb
(
0
,
0
,
4
);
break
;
case
1
:
case
3
:
send_rgb
(
6
+
(
1
<<
(
order
/
2
)),
6
+
(
1
<<
(
order
/
2
)),
6
+
(
1
<<
(
order
/
2
))
);
pixels
[
i
].
type
=
type
==
3
?
2
:
0
;;
if
(
order
>
1
&&
i
)
{
pixels
[
i
-
1
].
type
=
pixels
[
i
-
1
].
type
==
2
?
3
:
1
;
pixels
[
i
-
1
].
order
=
order
-
1
;
}
break
;
case
2
:
if
(
order
>=
8
)
{
send_rgb
(
1
<<
((
15
-
order
)
/
2
),
0
,
0
);
}
else
{
send_rgb
(
1
<<
(
order
/
2
),
0
,
0
);
}
if
(
++
order
>=
15
)
pixels
[
i
].
type
=
0
;
pixels
[
i
].
order
=
order
;
break
;
}
}
end_frame
();
_delay_ms
(
50
);
#if 0
log_byte(0xFa);
log_flush();
#endif
}
}
projects/rgb-led-string/rgbstring.h
View file @
946b1461
...
...
@@ -18,70 +18,12 @@ void inline log_byte(unsigned char byte) { }
void
inline
log_word
(
uint16_t
word
)
{
}
#endif
/* adc.c */
#define PWMLED_ADC_SHIFT 1
/* 1<<1 measurements per single callback */
extern
volatile
unsigned
char
need_battery_adc
;
extern
volatile
unsigned
char
need_pwmled_adc
;
extern
volatile
unsigned
char
adc_enabled
;
void
init_adc
();
void
susp_adc
();
void
start_next_adc
();
/* pwm.c */
#define PWM_MAX 0xFF
extern
volatile
unsigned
char
pwm_enabled
;
void
init_pwm
();
void
susp_pwm
();
void
pwm_off
();
void
pwm_set
(
uint8_t
stride
);
/* pwmled.c */
void
init_pwmled
();
void
pwmled_adc
(
uint16_t
adcval
);
void
pwmled_set_target
(
unsigned
char
mode
);
void
pwmled_on_off
(
unsigned
char
on
);
/* pattern.c */
void
init_pattern
();
void
patterns_next_tick
();
void
led_set_pattern
(
unsigned
char
led
,
unsigned
char
bits_len
,
unsigned
char
bits_start
,
unsigned
char
*
data
);
void
led_set_number_pattern
(
unsigned
char
led
,
unsigned
char
num
,
unsigned
char
inv
);
void
pattern_reload
();
/* buttons.c */
void
init_buttons
();
void
susp_buttons
();
void
timer_check_buttons
();
unsigned
char
buttons_wait_for_release
();
void
status_led_on_off
(
unsigned
char
on
);
/* battery.c */
void
battery_adc
();
void
init_battery
();
unsigned
char
battery_gauge
();
/* control.c */
void
init_control
();
void
long_press_start
();
void
long_press
();
void
short_press
();
void
brake_on
();
void
brake_off
();
void
pwmled_pattern_select
(
unsigned
char
led
);
void
status_led_pattern_select
(
unsigned
char
led
);
#define ERR_BATTERY 1
#define ERR_PWMLED 2
void
set_error
(
unsigned
char
err
);
/* wdt.c */
extern
volatile
uint16_t
jiffies
;
void
init_wdt
();
void
susp_wdt
();
/* main.c */
void
power_down
();
/* serial.c */
#define STRIP_SIZE 160
void
init_serial
();
void
zero_frame
();
void
end_frame
();
void
send_rgb
(
unsigned
char
r
,
unsigned
char
g
,
unsigned
char
b
);
#endif
/* !LIGHTS_H__ */
projects/rgb-led-string/serial.c
0 → 100644
View file @
946b1461
#include
<avr/io.h>
#include
<util/delay.h>
#include
<avr/interrupt.h>
#include
"rgbstring.h"
void
init_serial
()
{
PORTB
&=
~
(
_BV
(
PB2
)
|
_BV
(
PB1
));
DDRB
|=
_BV
(
PB2
)
|
_BV
(
PB1
);
#if 0
TCCR0A = _BV(WGM01) | _BV(WGM00);
TCCR0B = _BV(WGM02) | _BV(CS00);
OCR0A = 2;
#endif
zero_frame
();
}
static
void
send_byte
(
unsigned
char
b
)
{
unsigned
char
i
,
mask
;
#if 0
USIDR = b;
USISR = _BV(USIOIF);
USICR = _BV(USIWM0) | _BV(USICS0);
while (!(USISR & _BV(USIOIF)))
;
#endif
#if 1
USIDR
=
b
;
USISR
=
_BV
(
USIOIF
);
while
(
(
USISR
&
_BV
(
USIOIF
))
==
0
)
{
USICR
=
_BV
(
USIWM0
)
|
_BV
(
USICS1
)
|
_BV
(
USICLK
);
USICR
=
_BV
(
USIWM0
)
|
_BV
(
USICS1
)
|
_BV
(
USICLK
)
|
_BV
(
USITC
);
}
#endif
#if 0
for (i = 0; i < 8; i++) {
USICR = _BV(USIWM0) | _BV(USITC);
USICR = _BV(USIWM0) | _BV(USITC) | _BV(USICLK);
}
#endif
#if 0
for (i = 0; i < 8; i++) {
PORTB &= ~_BV(PB2); // clock low
if (b & 0x80) // data bit on or off
PORTB |= _BV(PB1);
else
PORTB &= ~_BV(PB1);
b <<= 1;
PORTB |= _BV(PB2); // clock high
}
#endif
}
void
end_frame
()
{
PORTB
&=
~
_BV
(
PB2
);
// clock low
_delay_us
(
1000
);
}
void
send_rgb
(
unsigned
char
r
,
unsigned
char
g
,
unsigned
char
b
)
{
send_byte
(
r
);
send_byte
(
g
);
send_byte
(
b
);
}
void
zero_frame
()
{
unsigned
char
i
;
for
(
i
=
0
;
i
<
STRIP_SIZE
;
i
++
)
{
send_rgb
(
0
,
0
,
0
);
}
end_frame
();
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment