Main.c
1 | //#define F_CPU 16000000UL
| 2 | #include <avr/io.h>
| 3 | #include <avr/interrupt.h>
| 4 | #include <util/delay.h>
| 5 | #include <math.h>
| 6 |
| 7 | volatile uint8_t Leds[16][8] =
| 8 | {
| 9 | {2,2,2,2,2,2,2,2},
| 10 | {2,20,20,20,20,20,20,2},
| 11 | {2,20,27,27,27,27,20,2},
| 12 | {2,20,27,34,32,27,20,2},
| 13 | {2,20,27,32,34,27,20,2},
| 14 | {2,20,27,34,32,27,20,2},
| 15 | {2,20,27,32,34,27,20,2},
| 16 | {2,20,27,34,32,27,20,2},
| 17 | {2,20,27,32,34,27,20,2},
| 18 | {2,20,27,34,32,27,20,2},
| 19 | {2,20,27,32,34,27,20,2},
| 20 | {2,20,27,34,32,27,20,2},
| 21 | {2,20,27,32,34,27,20,2},
| 22 | {2,20,27,27,27,27,20,2},
| 23 | {2,20,20,20,20,20,20,2},
| 24 | {2,2,2,2,2,2,2,2}
| 25 | };
| 26 |
| 27 | uint8_t FrameCount;
| 28 |
| 29 | ISR( TIMER0_OVF_vect ) //Overflow
| 30 | {
| 31 |
| 32 | FrameCount++;
| 33 |
| 34 |
| 35 | // Komplette Matrix einmal ausgeben, wobei nur die LED eingeschaltet
| 36 | // werden, deren Helligkeitswert kleiner/gleich dem 'FrameCount' sind
| 37 | for(int y = 0; y < 16; y++ )
| 38 | {
| 39 | int value = 0;
| 40 | for(int x = 0; x < 8; x++ )
| 41 | {
| 42 | if( (Leds[y][x]) < FrameCount )
| 43 | {
| 44 | switch(x)
| 45 | {
| 46 | case 0: value = value + 1; break;
| 47 | case 1: value = value + 2; break;
| 48 | case 2: value = value + 4; break;
| 49 | case 3: value = value + 8; break;
| 50 | case 4: value = value + 16; break;
| 51 | case 5: value = value + 32; break;
| 52 | case 6: value = value + 64; break;
| 53 | case 7: value = value + 128; break;
| 54 | default: value = value + 0; break;
| 55 | }
| 56 | }
| 57 |
| 58 | }
| 59 | SPDR = value; // Schreibe Daten...
| 60 | while(!(SPSR & 0b10000000)); //...bis fertig.
| 61 | }
| 62 | PORTB = 0b00000100; // Schreibe Daten...
| 63 | PORTB = 0b00000000; // ...raus.
| 64 | if(FrameCount == 35)
| 65 | {
| 66 | FrameCount = 0;
| 67 | }
| 68 |
| 69 | }
| 70 |
| 71 | int main()
| 72 | {
| 73 |
| 74 | DDRB = 0xFF; // B-Pins als Ausgang definieren (Shift)
| 75 | SPCR = 0b01010000; // Interrupt des SPI freigegeben (Shift)
| 76 |
| 77 | TIMSK = 0b00000001; // Loese Interrupt aus (PWM)
| 78 | TCCR0 = 0b00000001; // Vorteiler auf 1 setzten (PWM)
| 79 | sei(); // Schalte Interrupts ein (PWM)
| 80 |
| 81 | while(1)
| 82 | {
| 83 | };
| 84 | }
|
|