Forum: Mikrocontroller und Digitale Elektronik Fehlersuche im Code für ATmega 8


von Dane (Gast)


Lesenswert?

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
}

von Karl H. (kbuchegg)


Lesenswert?

Der erste:

>  // Taster-Pins als Eingänge definieren (Pullups-Zuschalten)
>  DDRD |= Tas1 | Tas2 | Tas3;

Nö.
Du schaltest die Pins auf Ausgang.
Pullups werden bei Eingangspins über PORTD zugeschaltet.

von Oliver (Gast)


Lesenswert?

Dane schrieb:
> // Taster-Pins als Eingänge definieren (Pullups-Zuschalten)
>   DDRD |= Tas1 | Tas2 | Tas3;

Über die Zeile solltest du nochmals nachdenken.

Oliver

von Dane (Gast)


Lesenswert?

Ohmann, ich Honk...

Vielen Dank, da hätte ich noch ewig gesucht - dummes Copy&Paste.

Dankeschön!

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
Noch kein Account? Hier anmelden.