PIN Eingang Problem (Anfänger)

Gast #212922
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
Gast #212925
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?
Gast #212927
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?
Gast #212928
@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
}
Gast #212930
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
Gast #212932
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.
Gast #212933
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.