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


von Toni (Gast)


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

von Patrick (Gast)


Lesenswert?

Hi Toni,

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

von Toni (Gast)


Lesenswert?

PORTA=0x00;
DDRA=0x00;

von Patrick (Gast)


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?

von Toni (Gast)


Lesenswert?

5V kommen an dem PIN an wenn der Taster gedrückt ist.

von Patrick (Gast)


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?

von Andreas W. (Gast)


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
}

von Toni (Gast)


Lesenswert?

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

von Patrick (Gast)


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

von Christian (Gast)


Lesenswert?

Hallo Toni,


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

Lg


Christian

von Rolf Magnus (Gast)


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.

von Toni (Gast)


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.

von Toni (Gast)


Lesenswert?

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

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.