Forum: Compiler & IDEs schon wieder mal Taster


von gast (Gast)


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

von Ronny (Gast)


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.

von Stefan (Gast)


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.

von remote1 (Gast)


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

von Ronny (Gast)


Lesenswert?

Verzeihung,ich hab die '3' übersehen: PIND3.So sollte es nun doch 
funktionieren.

Trotzdem wäre schonmal interessant,wie du deine Taster&LED verschaltet 
hast.

von remote1 (Gast)


Lesenswert?

also das mit der led stimmt schon mal, hab grad mal die sache mit dem 
taster raus gemacht und probiert

von remote1 (Gast)


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

von Ronny (Gast)


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.

von Stefan (Gast)


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?

von remote1 (Gast)


Lesenswert?

hab mal eben den schaltplan angeschaut, da is es Pin => LED => 
Vorwiderstand => GND

taster is vcc => taster => pin
                        => widerstand//kondensator => masse
also entprellen schon dabei

von Andreas H. (asmhesse)


Lesenswert?

Hi,

ist das das Pollin -Board?


Dann solltest Du den PULL-UP nicht aktivieren.


 DDRD = (1 << PD5);
PORTD = 0x00;


Gruss
Andreas

von remote1 (Gast)


Lesenswert?

danke Andreas, hab das pollin board 2.0 und und jetzt klappts wunderbar 
freu

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.