Hallo,
ich steige gerade wieder neu in die Programmierung von µCen ein und
wollte einfach mal eine einfache Anwendung testen. Leider komme ich
nicht darauf, was ich falsch mache - wahrscheinlich seh ich nur den Wald
vor lauter Bäumen nicht - vielleicht kann mir jemand von euch kurz
helfen.
Ich benutze das aTeVal Board von eHajo mit einem ATmega8A mit folgender
Pin-Belegung: PD2, PD3, PD4 Taster, die auf Ground schalten, PD5, PD6
LEDs
Was jetzt will ich einfach nur realisieren, dass die LED1 leuchtet, wenn
ich den Taster1 drücke und die LED2 leuchtet, wenn ich den Taster2
drücke.
Mein LED Test funktioniert ohne Probleme, ein anderes Beispiel mit den
Tastern hat auch funktioniert. Nur dieses mal leuchten nach meinem LED
Test beide LEDs dauerhaft.
Vielen Dank für euere Hilfe!
Vg Dane
1 |
|
2 | #define F_CPU 8000000UL /* 8MHz */
|
3 |
|
4 | #include <avr/io.h>
|
5 | #include <util/delay.h>
|
6 |
|
7 | // Prototypen
|
8 | void long_delay(uint16_t);
|
9 |
|
10 | // Defines:
|
11 | #define LED1 (1<<PD6)
|
12 | #define LED2 (1<<PD5)
|
13 |
|
14 | #define Tas1 (1<<PD2)
|
15 | #define Tas2 (1<<PD3)
|
16 | #define Tas3 (1<<PD4)
|
17 |
|
18 | void long_delay(uint16_t ms)
|
19 | {
|
20 | for(; ms>0; ms--)
|
21 | _delay_ms(1);
|
22 | }
|
23 |
|
24 | void main()
|
25 | {
|
26 |
|
27 |
|
28 | // LED-Pins als Ausgang definieren
|
29 | DDRD |= LED1 | LED2;
|
30 | // Taster-Pins als Eingänge definieren (Pullups-Zuschalten)
|
31 | DDRD |= Tas1 | Tas2 | Tas3;
|
32 |
|
33 | //LED Test
|
34 | PORTD |= LED1;
|
35 | long_delay(100);
|
36 | PORTD &= ~LED1;
|
37 |
|
38 | PORTD |= LED2;
|
39 | long_delay(100);
|
40 | PORTD &= ~LED2;
|
41 |
|
42 |
|
43 | while(1)
|
44 | {
|
45 |
|
46 |
|
47 | if (!(PIND & Tas1))
|
48 | {
|
49 | PORTD |= LED1;
|
50 | }
|
51 | else
|
52 | {
|
53 | PORTD &= ~LED1;
|
54 | }
|
55 |
|
56 |
|
57 | if (!(PIND & Tas2))
|
58 | {
|
59 | PORTD |= LED2;
|
60 | }
|
61 | else
|
62 | {
|
63 | PORTD &= ~LED2;
|
64 | }
|
65 |
|
66 |
|
67 | }
|
68 | }
|