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
Hi Toni, wie ist der Pin denn definiert, wenn keine 5V anliegen? wird er dann auf Masse gezogen?
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?
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?
@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 }
Nichts, habe einfach ein Kabel das 5V liefert. Wenn dieses an den PIN gehalten wird soll es in die IF-Abfrage ansonsten nicht.
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
Hallo Toni, vieleicht nimmst Du einfach einen 10K Widerstand mit dem Du den Pin auf Masse ziehst ... Lg Christian
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.