Guten Morgen alle miteinander :)
Ich habe ein kleines Projekt vor mir. Das Ziel ist es ein Mini Tetris
Spiel über meinen ATMega16 auf zwei LED Matrizen laufen zu lassen.
Da ich noch recht neu in der uC Programmierung bin stoße ich leider auf
ein paar Probleme (trotz Lesen des AVR Tutorials).
Zunächst probiere ich nur komplette Reihen auf einer der beiden
Matritzen "runterfallen" zu lassen, am Besten im Sekundentakt. Jedoch
bekomme ich nur einen binären Zähler hin, also die Reihen der Matrix
stellen die gezählte Zahl dar. Ich habe schon überlegt mit if
Bedingungen zu arbeiten, jedoch wird das dann nicht mit einem
Sekundentakt funktionieren und wäre auch auf keinen Fall eine schöne
Lösung, wie ich annehme :)
Hier also mein bisheriger Code (ohne den Versuch der if Bedingungen):
1 | #define F_CPU 16000000
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | //2D Array für spätere zweite Dot-Matrix
|
6 | // uint8_t LookUpLED[5][2]={
|
7 | // {1,0},
|
8 | // {0,0},
|
9 | // {0,0},
|
10 | // {0,0},
|
11 | // {0,1},
|
12 | // };
|
13 |
|
14 | uint8_t Test[5]={1,0,0,0,0};
|
15 |
|
16 | int var;
|
17 | int x=0;
|
18 |
|
19 | void Init();
|
20 | void InitPorts();
|
21 | void InitTimer();
|
22 | void LEDAusgabe();
|
23 |
|
24 | int main(void)
|
25 | {
|
26 | Init();
|
27 |
|
28 | while (1)
|
29 | {
|
30 | }
|
31 | }
|
32 |
|
33 | void Init()
|
34 | {
|
35 | InitPorts();
|
36 | InitTimer();
|
37 | }
|
38 |
|
39 | void InitPorts()
|
40 | {
|
41 | DDRA= 0xFF;
|
42 | DDRB= 0xFF;
|
43 | DDRC= 0xFF;
|
44 | DDRD= 0xFF;
|
45 | }
|
46 |
|
47 | void InitTimer()
|
48 | {
|
49 | //Timer 0
|
50 | TCCR0 |= (1<<CS00) | (1<<CS01);
|
51 | TIMSK |= (1<<TOIE0);
|
52 |
|
53 | //Timer1
|
54 | TCCR1B |= (1<<CS10) | (1<<CS11);
|
55 | TIMSK |= (1<<TOIE1);
|
56 |
|
57 | sei();
|
58 | }
|
59 |
|
60 | void LEDAusgabe()
|
61 | {
|
62 | Test[0]=x;
|
63 | PORTA = Test[0];
|
64 | }
|
65 |
|
66 | ISR(TIMER1_OVF_vect)
|
67 | {
|
68 | //Hochzählen der Reihen
|
69 | x++;
|
70 | LEDAusgabe();
|
71 |
|
72 | //Debug LED
|
73 | PORTA |= (1<<PA7);
|
74 | }
|
75 |
|
76 | ISR(TIMER0_OVF_vect)
|
77 | {
|
78 | //Multiplexen der Transistoren
|
79 | for (int i=0; i<5; i++)
|
80 | {
|
81 | PORTB |= ~0xFF;
|
82 |
|
83 | //Debug LED
|
84 | PORTC |= (1<<PC7);
|
85 | }
|
86 | };
|
Ich vermute, dass ich den Timer wahrscheinlich nicht richtig verwende,
jedoch entzieht es sich meiner Kenntniss, wie ich mein Problem lösen
kann.
Vielen Dank schonmal!
Tomato