Wie steuert man AVR Ausgänge richtig an?

OP #1560919
Lesenswert?

Zum Grundverständniss würde ich gerne wissen wie man den Ausgang eines 
AVR richtig ansteuert.

Wenn ich zb. folgende Verdrahtung habe:
PortD.0 -> Taster
PortC.0 -> LED gegen HIGH (+5V) geschalten.

Will ich jetzt mittels deiesen taster die LED zum leuchten bringen gibt 
es jetzt nach meinem Verständnis 2 Varianten:

Variante 1:
===========

DDRC = 0x00 // Anschlüsse auf Eingang schalten
PORTC = 0x00 // Alle PortC auf LOW

Wird nun einen Tastendruck erkannt wird mittels:

DDRC = 0x01 // PortC.0 auf Ausgang schalten

LED leuchtet

Variante 2:
===========

DDRC = 0xFF // Anschlüsse auf Ausgang schalten
PORTC = 0xFF // Alle PortC auf HIGH

Wird nun einen Tastendruck erkannt wird mittels:

PORTC = 0x01 // PortC.0 auf LOW schalten

LED leuchtet

Welche ist nun die richtige Methode?
#1565573
Lesenswert?

Ich weiß nicht was die Kollegen hier so für ein Problem haben, beide 
Varianten funktionieren problemlos.
Sicherlich gibt es noch andere Methoden aber das Tutorial ist auch nicht 
DIE BIBEL ;-)

Ich weiß auch nicht was daran auszusetzen ist wie Du das machst...

Ausser das Du :
1
PORTC = 0x01; //machst?
und man besser
1
PORTC |=(1<<PC0);
nutzen sollte?

Ich würde z.B. die erste Variante bevorzugen und zwar aus folgenden 
Grund:

Stell Dir vor es ist ein Motor dran, Du schaltest den Port auf Ausgang 
und da die Last Low-Aktiv ist springt der Motor kurz an...erst wenn Du 
den Port auf High setzt ist Ruhe. Ist fiktiv da das alles für einen 
Motor viel zu schnell ist aber....zur Sicherheit...

Gruß Harry
Gast #1565579
Lesenswert?

Wenn du einen Push-Pull-Ausgang brauchst, setzt du DDR fest auf 1 und 
schaltest PORT. Wenn du einen Open-Collector-Ausgang simulieren willst, 
setzt du PORT fest auf 0 und schaltest DDR. Und wenn es egal ist (wie 
bei der gegen +5V geschalteten LED) ist es egal, wie du schon erkannt 
hast.
#1565588
Lesenswert?

Harry S. schrieb:
> Ich weiß nicht was die Kollegen hier so für ein Problem haben,

du kennst die Vorgeschichte nicht :-)
Und ausserdem ist hier wohl die Absicht, den TO zum Nachdenken anzuregen 
nachdem ihm das in seinem ursprünglichen Thread schon ein paar mal von 
unterschiedlichen Leuten vorgekaut wurde.

> beide
> Varianten funktionieren problemlos.

Wie du selbst weiter unten zeigst, hat die eine Reihenfolge einen 
klitzekleinen Nachteil. Du nimmst einen Motor an. In seiner Beschaltung 
und einer zusätzlichen Vorraussetzung ist das aber nicht so harmlos, 
sondern da gehts darum, dass er in dem einen Fall einen Kurzschluss 
erzeugt (wenn auch nur sehr kurz) und im anderen Fall nicht.
#1565638
Lesenswert?

KM schrieb:
> Wo ist denn da ein Kurzschluss?

In diesem Thread ist die Fragestellung sowieso komplett vermurkst.
Er hat Taster und LED an ein und demselben Pin

Seine Methode 1:
   Der Taster hat keinen Pullup Widerstand. Und damit ist die Taster-
   funktion ... fraglich
   Aktiviert er aber einen Pullup und schaltet einfach den DDR
   von Eingang auf Ausgang um .... dann treibt die 1 am Portpin
   gegen den noch gedrückten Taster, der nach GND geschaltet ist.

   So gehts also nicht

Seine Methode 2:
   Ist kompletter Unsinn. Wie will man mit einem auf Ausgang
   geschalteten Port einen Taster einlesen

Das ganze ist lösbar. Keine Frage. Wenn man verstanden hat, wie PORT, 
PIN und DDR zusammenspielen und sich die Reihenfolge am Papier einfach 
mal durchspielt, ist das überhaupt kein Problem. Nur
* man muss die Zusammenhänge verstanden haben
* sich die Zeit nehmen um das durchzuspielen

WIe gesagt: Im Originalthread wars noch: Taster und LED an einem Pin.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren