www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie steuert man AVR Ausgänge richtig an?


Autor: Lokus Pokus (derschatten)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manfred W. schrieb:
> Welche ist nun die richtige Methode?

Keine. Bitte Datenblatt lesen.

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Irgendwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Harry S. (littlegonzo)
Datum:

Bewertung
0 lesenswert
nicht 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 :
PORTC = 0x01; //machst?
und man besser
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

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist denn da ein Kurzschluss?

Autor: Harry S. (littlegonzo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl-Heinz,
das mit der Vorgeschichte wußte ich nicht ^^

Wobei ich die Sache mit dem Kurzschluß auch noch nicht geblickt habe...

Gruß Harry

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Harry S. (littlegonzo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah okay,
dann klinke ich mich mal wieder aus :-)

Gruß Harry

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.