Hallo, ich habe einen 4x4x4 LED Cube, welcher mit 16 Pins für die Spalten und 2 Pins (DEMUX) für die 4 Ebenen angesteuert wird. Ich benutze einen ATMEGA 168. Die eigentliche Frage ist, wie ich am besten mein Programm dafür schreibe. Bisher habe ich einfach jede LED an und aus gemacht und die Ebenen im Multiplexing-Verfahren betrieben. Mein Programm ist viel zu lang und ich hätte es gern etwas komprimiert.. Welches Verfahren würde sich dafür eignen und wie gehe ich dann am besten vor?
M. W. schrieb: > Mein Programm ist viel zu lang So lang:
1 | struct
|
2 | {
|
3 | uint8_t lower; |
4 | uint8_t upper; |
5 | }
|
6 | leds[4]; |
7 | |
8 | while(1) |
9 | {
|
10 | PORTA=i; |
11 | PORTB=leds[i].lower; |
12 | PORTD=leds[i].upper; |
13 | i=(i+1)&3; |
14 | _delay_ms(1); |
15 | }
|
Das kann nicht das Problem sein. Viel fragewürdiger ist, wie man interessante Animationen hinbekommt, also den Inhalt von leds bestimmt. Und da fäällt den meisten auch nichts ein, weswegen die meisten LED Cubes langweilig in der Ecke verstauben. Man müsste mindestens Helligkeit, wenn nicht gar Farbe steuern können, das macht aber die LED Ansteuerung auch nicht komplizierter.
1 | struct
|
2 | {
|
3 | uint8_t lower[8]; |
4 | uint8_t upper[8]; |
5 | }
|
6 | leds[4]; |
7 | |
8 | while(1) |
9 | {
|
10 | for(n=0;n<7;n++) |
11 | {
|
12 | PORTA=i; |
13 | PORTB=leds[i].lower[n]; |
14 | PORTD=leds[i].upper[n]; |
15 | _delay_us(1<<n); |
16 | }
|
17 | i=(i+1)&3; |
18 | }
|
Bleibt also eher die Frage, woher das 3d-Video kommt, das angezeigt werden soll. Bei 4 x 4 x 4 wird es jedenfalls mit animiert schwimmenden Delphinen unter Wasser schwer.
@ M. W. (m_wu) >Die eigentliche Frage ist, wie ich am besten mein Programm dafür >schreibe. Mit einem Editor. > Bisher habe ich einfach jede LED an und aus gemacht und die >Ebenen im Multiplexing-Verfahren betrieben. So wie es der Rest der Welt auch macht. > Mein Programm ist viel zu >lang und ich hätte es gern etwas komprimiert.. Aha. Und wo ist dein Programm? Wo können WIR es sehen? >Welches Verfahren würde sich dafür eignen und wie gehe ich dann am >besten vor? Mit einem Timer und Interrutp.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.