mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIN Eingang Problem (Anfänger)


Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe am PORTA meines µC einen Schalter. Wenn dieser jetzt betätigt wurde
liegen 5V an PINA.4 an. Sobald 5V anliegen soll er in eine IF-Abfrage
springen.  Das macht er auch

If (PINA.4)
{
  //mach etwas
}

Wenn ich jetzt wieder an diese Stelle komme springt er immer wieder in
die IF-Abfrage ohne dass die 5V anliegen.
Wie kann ich das verhindern. Er soll nur in die IF-Abfrage springen,
wenn auch wirklich die 5V anliegen

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Toni,

wie ist der Pin denn definiert, wenn keine 5V anliegen? wird er dann
auf Masse gezogen?

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PORTA=0x00;
DDRA=0x00;

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Toni,
ich spreche nicht von Soft- sondern von Hardware. Wenn keine 5V am Pin
anliegen, wie ist er dann definiert? oder lässt du ihn einfach offen?

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
5V kommen an dem PIN an wenn der Taster gedrückt ist.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, das wir an dem Pin 5V haben, hattest du ja in deinem ersten Text
schon geschrieben, aber was liegt an dem Pin an, wenn der Taster NICHT
gedrückt ist?

Autor: Andreas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Toni: Am besten den internen Pull-Up anschalten und den Pin mit dem
Taster gegen Masse ziehen.

DDRA=0x00;
PORTA=(1<<PB4); //pullup für PINA.4 an

if(!PINA.4)
{
  //mach etwas
}

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nichts, habe einfach ein Kabel das 5V liefert. Wenn dieses an den PIN
gehalten wird soll es in die IF-Abfrage ansonsten nicht.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK Toni, da liegt dein Problem!
Wenn der Draht nicht an dem Pin liegt, weisst du nicht in welchem
Zustand er ist.
Probiere den Vorschlag von Andreas, das ist eine recht einfache Lösung

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Toni,


vieleicht nimmst Du einfach einen 10K Widerstand mit dem Du den Pin auf
Masse ziehst ...

Lg


Christian

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur genaueren Erläuterung:

High-Pegel sind die 5V, Low-Pegel sind 0V, was nicht etwa heißt, daß
der Pin offen hängen bleiben darf. 0V heißt nach Masse gezogen. Wenn
ohne Taster der Pin offen hängt, gibt es keinen definierten Pegel.

Die genannten Lösungen:

Der interne pull-up-Widerstand, den man per Software aktivieren kann,
zieht den Pin auf 5V hoch, wenn nichts am Eingang hängt. Wenn du den
Taster nun nach Masse schalten lässt und diesen pull-up-Widerstand
einschaltest, ist das Signal zwar umgekehrt (low = gedrückt, high =
nicht gedrückt), aber du hast ohne weiteren Bauteileaufwand sowohl bei
gedrücktem als auch bei nicht gedrücktem Taster einen definierten Pegel
am Pin hängen.

Die andere Variante (Widerstand nach Masse) macht das Umgekehrte
(pull-down). Der Pin wird über den Widerstand runtergezogen, falls der
Taster nicht gedrückt wird. Du brauchst aber halt den zusätzlichen
Widerstand, da es intern nur pull-up und kein pull-down gibt.

Und das nächste Problem, auf das du bald stoßen wirst, das Prellen,
wird dir hoffentlich ein Anderer erklären.

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe es jetzt so. Wenn der Taster gedrückt ist liegen 5V am Pin an,
ansonsten liegen 0V an.

PORTA=0x00;
DDRA=0x00;

Meine Abfrage lautet immern noch:
If (PINA.4)
{
  //mach etwas
}

Es funktioniert aber immer noch nicht.

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs jetzt hinbekommen mein Fehler war noch hier:
DDRA=0x10;

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.