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?
Manfred W. schrieb:
> Welche ist nun die richtige Methode?
Keine. Bitte Datenblatt lesen.
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
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.
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.
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
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.
Ah okay, dann klinke ich mich mal wieder aus :-) Gruß Harry
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.