Hallo,
bin jetzt nach längerer Überlegung doch von Basic auf C umgestiegen.
Nun, meiner Meinung nach ist es recht ähnlich bis auf die Formatierungen
und die vielen Klammern ;). Nun.. mal zum eigentlichen Problem. Da ich
ja nicht gleich großartig etwas machen kann, wollte ich mal klein
anfangen und ein Lauflicht programmieren. Jedoch (wie man gleich am
Quellcode sieht) eines, das nicht nur ständig am "Hochzählen" ist,
sondern auch mal von einer Variable einen Wert abziehen soll.
Leider funktioniert das Programm dann nur noch bis zur zweiten LED.
Jetzt dachte ich, dass es vielleicht mit dem Hard-, Softwarestack
zusammenhängen könnte. Jedoch weiß ich nicht, wie ich diesen
initialisiere und festlege.
Bin jedoch gerne bereit mich bei einem Fehler im Programm berichtigen zu
lassen ;)
Hier mal der Code (hab ihn jetzt mal nicht als Datei angehängt, da er
mir nicht allzulang erscheint):
1 | #include <avr/io.h> // (1)
|
2 | #ifndef F_CPU
|
3 | #warning "F_CPU war noch nicht definiert, wird nun mit 12MHz definiert"
|
4 | #endif
|
5 | #define F_CPU 12000000UL
|
6 | #include <util/delay.h>
|
7 | #include <stdint.h>
|
8 | const int8_t Zahl [7] = {
|
9 | 0b00000000,
|
10 | 0b00000001,
|
11 | 0b00000010,
|
12 | 0b00000100,
|
13 | 0b00001000,
|
14 | 0b00010000,
|
15 | 0b00100000,
|
16 | };
|
17 |
|
18 | void Hochzaehlen (uint8_t i) {
|
19 |
|
20 | PORTB |= i [Zahl];
|
21 | _delay_ms (200);
|
22 | }
|
23 |
|
24 | void Runterzaehlen (uint8_t i) {
|
25 |
|
26 | PORTB &= ~i [Zahl];
|
27 | _delay_ms (200);
|
28 | }
|
29 |
|
30 | int main (void) {
|
31 | DDRB = 0xff;
|
32 | DDRD |= (1<<DDD0) | (1<<DDD1);
|
33 | uint8_t i;
|
34 | i = 0;
|
35 | while( 1 ) { // Endlosschleife
|
36 |
|
37 | if (PIND & (1<<PD0)){
|
38 | i ++;
|
39 | Hochzaehlen (i);
|
40 | if (i = 7) i=1;
|
41 | }
|
42 |
|
43 | if (PIND & (1<<PD1)){
|
44 | i --;
|
45 | Runterzaehlen (i);
|
46 | if (i = 0) i = 7;
|
47 | }
|
48 |
|
49 | }
|
50 | return 0;
|
51 | }
|
Nur noch so nebenbei. Wenn ich diesen "Abschnitt"
1 | if (PIND & (1<<PD1)){
|
2 | i --;
|
3 | Runterzaehlen (i);
|
4 | if (i = 0) i = 7;
|
5 | }
|
herausnehme, dann baut sich das Lauflicht wie gewünscht auf. --> Deshalb
meine Vermutung mit dem HW-Stack.
NACHTRAG:
Mittlerweile funktioniert es nicht einmal mehr, wenn ich besagten
Abschnitt entferne und sogar die void-Schleife mit "Runterzaehlen".
Mit besten Grüßen