mikrocontroller.net

Forum: Compiler & IDEs schon wieder mal Taster


Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab nen problem mit folgendem code:
int main(void)
{

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

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

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

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

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

im prinzip soll nur bei tastendruck die led angehn
eigentlich simpel

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: remote1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: remote1 (Gast)
Datum:

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

Autor: remote1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: remote1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Hesse (asmhesse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ist das das Pollin -Board?


Dann solltest Du den PULL-UP nicht aktivieren.


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


Gruss
Andreas

Autor: remote1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke Andreas, hab das pollin board 2.0 und und jetzt klappts wunderbar 
freu

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.