schon wieder mal Taster

Gast #520285
Lesenswert?

ich hab nen problem mit folgendem code:
1
int main(void)
2
{
3

4
   DDRD &= ~( 1 << PD3 );               // PIN PD2 auf Eingang (Taster)
5
   PORTD |= ( 1 << PD3 );               // Pullup-Widerstand aktivieren
6

7
   DDRD = (1 << PD5);          // PIN PD5 als Ausgang
8

9
   PORTD &= ~(1<<PD5);          // Diode aus
10

11
   while(1)
12
   {
13
    if ( PIND & (1<<PIND3) ) { PORTD |= (1 << PD5); }  // Diode an wenn Taster gedrückt
14
    
15
   }  
16

17
   return 0;
18
}
ich hoffe es liegt nur am späten abend

im prinzip soll nur bei tastendruck die led angehn
eigentlich simpel
Gast #520290
Lesenswert?

Bei deinem 2.Zugriff auf DDRD überschreibst du hart das,was du vorher 
gesetzt hast.Zufällig bleibt alles ausser PD5 Eingang,allerdings ist das 
nur ein glücklicher Zufall.

 if ( PIND & (1<<PIND3) ) { PORTD |= (1 << PD5); }

Nimmt das den überhaupt der Compiler?Sollte zumindest eine Warnung 
ergeben,wenn (1<<PIND) ausgewertet wird.
Gast #520296
Lesenswert?

Wie hast du denn LED und Taster angeschlossen?

Bei der Schaltung wie im Tutorial (Vcc => R => LED => Pin) ist

PORTD &= ~(1<<PD5);     // LED AN
PORTD |= (1 << PD5);    // LED AUS

und bei einem Taster (Pin => Taster => GND und interne Pullups benutzt) 
wäre

!(PIND & (1<<PD3))      // Verbindung geschlossen
 (PIND & (1<<PD3))      // Verbindung offen

Also alle Aktionen genau umgekehrt wie bei dir.
Gast #520299
Lesenswert?

moment, wo ist jetz der fehler, beim
    DDRD = (1 << PD5);          // PIN PD5 als Ausgang
oder bei
    if ( PIND & (1<<PIND3) ) { PORTD |= (1 << PD5); }

ich versteh das doch richtig, dass der fehler bei DDRD = (1 << PD5); 
ist!?!?

eine warnung bekomme ich nicht vom compiler
Gast #520309
Lesenswert?

bei mir is das gleich aufm board mit drauf, die led hängt halt auf PD5 
und der taster auf PD3
wollts eigentlich nur mal probieren, aber bei den kleinesten sachen 
kommen die größten probleme
Gast #520314
Lesenswert?

Dann gibt´s doch bestimmt Beispielcode zu deinem Board,wo sowas schonmal 
gemacht wurde,oder?

Wie Stefan schon angemerkt hat,ist es entscheidend ob deine Taster und 
LEDs Low- oder High-Aktiv angeschlossen sind.Das lässt sich am 
einfachsten am Schaltplan des Boards sehen.Da kann man erkennen,ob eine 
logische '1' am Portpin die LED leuchten lässt oder ob man den Pin auf 
'0' setzen muss,damit die LED leuchtet.
Gast #520315
Lesenswert?

Du machst es dir unnötig kompliziert, wenn du so spärlich und ungenau 
antwortest. Nochmal: Wie hast du denn LED und Taster angeschlossen?

Man kann eine LED auf zwei Arten anschliessen.

1/ Vcc => Vorwiderstand => LED => Pin (=> GND im µC)
Hier leuchtet die LED bei LOW am Pin, d.h.
   DDRD  |= (1 << PD5);  // PIN PD5 als Ausgang
   PORTD &= ~(1 << PD5); // PIN PD5 LOW

2/ (Vcc im µC =>) Pin => LED => Vorwiderstand => GND
Hier leuchtet die LED bei HIGH am Pin, d.h.
   DDRD  |= (1 << PD5);  // PIN PD5 als Ausgang
   PORTD |= (1 << PD5);  // PIN PD5 HIGH

Wenn du es selbst nicht herausfinden kannst und wenn es ein fertiges 
Board ist - gibt es ein Schaltbild zum Nachsehen oder hast du ein Foto, 
wo man was erkennen kann oder hat das Board wenigstens einen Namen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren