Hallo Leute, ich lerne derzeit auf ein Fach Elektrotechnik und habe ein Datenblatt eines Mikrocontrollers vor mir. (ATmega16) Ich hätte eine kleine Frage zum Verständnis. Könnten Ihr mich verbessern, falls ich falsch liege. Es gibt DDRx und PORTx. Bei DDRx kann ich nun definieren, ob die Pins als Eingang oder Ausgang genutzt werden. Bei 1 in DDRx wird es als Ausgang definiert und der PullUP deaktiviert und an den Ausgängen HIGH-Pegel. Bei 0 in DDRx wird es als Eingang definiert. Wenn ich es als Eingang definiere, kann ich nun in PORTx 1 schreiben, um der PullUP zu aktivieren und eine 0, um den Pullup zu deaktivieren? 1. Meine Frage nun. Habe ich das richtig verstanden? 2. Für was ist eigentlich ein PullUP (bin Anfänger :()? 3. Wie ist da smit dem HIGH- und LOW-Pegeln zu verstehen. Wenn ich DDRx ja mit 1'en fülle, habe ich ja HIGH-Pegel an den Ausgängen. (Sonst LOW oder?) Über kleine Tipps würde ich mich sehr freuen. Ich stocke gerade voll beim weiterlernen Grüße Ela
Ich habe auch diesen Beitrag gelesen: http://www.rn-wissen.de/index.php/Pullup_Pulldown_Widerstand D.h., wenn man einen PullUP hat, dann ist dauerhaft doch ein HIGH-Pegel vorhanden. In meiner Erklärung oben (was ich von einem Kommilitonen erklärt bekommen habe) wird bei 1'en im DDRx der PullUP deaktiviert (laut dem Schaltplan sieht es auch so aus, dass es deaktiviert wird) und anscheinend an den Ausgängen HIGH-Pegel angelegt. Wenn ich aber den PullUP deaktiviere, dann habe ich doch kein HIGH-Pegel, sondern einen undefinierten Zustand oder, wenn der nicht aktiv ist? Oder LOW-Pegel? Irgendwo denke ich total falsch
Du schreibst etwas wirr. Wenn Dein Pin ein Ausgang ist, brauchst Du keinen Pull-Up keinen Pull-Down, garnix. Die Spannung kommt vom Mikrocontroller. Ist Dein Pin ein Eingang, hast Du folgendes Problem: Angenommen Dein Taster ist nicht gedrückt, liegt keine Spannung am Eingang an. Normalerweise würdest Du jetzt gerne eine Null auslesen. Dein Pegel ist aber nicht Null, sondern undefiniert. Ein Mini-mini Spannung, die irgendwo sonst aus Deiner Schaltung her kommt, reicht, dass Du eine Eins liest. Also, schaltest Du Du Deinen Pin über einen größeren Widerstand auf Masse oder halt auf Versorgungspannung (Pull-Up). Wenn Dein Taster nicht gedrückt ist, erhält er über den Widerstand z.B. Massepotential. Wenn Du Deinen Taster jetzt drückst, kriegt er z.B. high-signal, also sagen wir 5V. Dein Controller hat das schon eingebaut. Schaltest Du die internen Pull-Ups ein, wirst Du immer eins lesen, bis Du außen auf Masse legst.
Hallo, danke für die schnelle und ausführliche Antwort. Die Spannung kommt bei einem Ausgang vom Mikrokontroller. Und die dachte ich, kommt evtl. dann vom aktivierten PullUP. Du sagst, die Spannung kommt ja vom Mikrokontroler. In unserem Script steht: "Bei 1 in DDRx = Definition Ausgang (oki klar) PullUP deaktiviert (oki klar), HIGH Pegel an Ausgängen (was meint man nun hiermiet? Werden gleich 1'er dort gesetzt am Anfang oder wie ist das zu verstehen?) Danke bzgl. der Erklärung des Eingangs. Mit dem PullUp definiere ich da praktisch, ob Masse oder Versorgungsspannung. a) Nehmen wir an, ich schalte bei einem Eingang PullUP, sehe ich immer 1 an diesem Pin, bis etwas auf Masse gelegt wird, dann sehe ich 0 (Es passiert kein Kurzschluss, da ja ein Wiederstand vorhanden ist) Wenn ich an diesem Pin zusätzlich 5V anlege, bzw. 1, dann ändert dies nichts, da eh bereits 1 anliegt? Richtig? Technisch gesehen sollte auch nichts passieren, dass Stromtechnisch dort etwas passiert, wenn zusätzlich 5V angelegt wird? b)Nehmen wir nun an, dass ich bei einem Eingang Pullup deaktiviere, also kein Pullup aktiviere, dann liegt dort 0 an, also Masse. Wenn nun Masse drauf kommt, passiert nicht. 0 liegt weiterhin an. Wenn nun 5V oder 1 angelegt wird, sehe ich ganz normal die 1, Stromtechnisch auch kein Problem. Auch richtig? Grüße
Dieses Tutorial von euch hat mir jetzt echt gut weitergeholfen, vielen Dank: http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen Echt sehr schön beschrieben.
Nochmal ganz kurz: DDRx ist das Datenrichtungsregister, da stellt man ein, ob ein Pin Eingang oder Ausgang ist. PORTx ist das Register, in dem, bei den auf Ausgang geschalteten Pins, der Pegel (1 oder 0) eingestellt wird. Da PORTx bei Eingängen keinen Sinn macht, benutzt Atmel es als Zweitfunktion, um die Pullups anzuschalten. Wichtig! Der Zustand der Eingänge muss über PINx abgefragt werden. Wenn der Pin als Ausgang geschaltet ist, kann der Strom bis 40mA sein, das geht über den Pulllup nicht (ca. 20k-50kOhm). Der Pullup ist nur dafür gedacht, einen momentan offenen Eingang auf einen definierten Pegel (1) zu bringen, zB bei nicht gedrücktem Taster gegen Masse. Wenn Du den Port mit DDRx (Datenrichtungs Register) auf Ausgang schaltest, dann liegen an den Pins die Pegel an, die gerade im PORTx Register angegeben sind. Also 5V (je nach Betriebsspannug) bei einer 1, und 0V bei einer 0. >>Danke bzgl. der Erklärung des Eingangs. Mit dem PullUp definiere ich da >>praktisch, ob Masse oder Versorgungsspannung.<< Der Pull-UP zieht den Eingang immer auf Vcc, wenn der Pin offen ist, nix mit Masse. Wenn Du dann an die 5V nochmal 5V anlegst, passiert nichts, da keine Spannungsdifferenz - kein Strom, bei 0V anlegen ca. 5v/30KOhm < 0.2mA Wenn Du an einem Eingang immer entweder 1 oder 0 hast zB von einer anderen Elektronik, dann brauchst Du den Pullup nicht, da die Pegel immer definiert sind.
>b)Nehmen wir nun an, dass ich bei einem Eingang Pullup deaktiviere, also >kein Pullup aktiviere, dann liegt dort 0 an, also Masse. Nein! Du weisst es nicht, da weder Pullup noch pulldown vorhanden sind. Genau das willst du ja verhindern, dass ein undefinitierter Pegel herrscht.
Hallo Ela, helau schrieb: > Bei DDRx kann ich nun definieren, ob die Pins als Eingang oder Ausgang > genutzt werden. Stimmt. > Bei 1 in DDRx wird es als Ausgang definiert und der PullUP deaktiviert > und an den Ausgängen HIGH-Pegel. > Bei 0 in DDRx wird es als Eingang definiert. Die Richtungsangaben stimmen. Ob der Ausgang 1 oder 0 ist, hängt von PORTx ab. > Wenn ich es als Eingang definiere, kann ich nun in PORTx 1 schreiben, um > der PullUP zu aktivieren und eine 0, um den Pullup zu deaktivieren? Stimmt. > 1. Meine Frage nun. Habe ich das richtig verstanden? Ja :-). > 2. Für was ist eigentlich ein PullUP (bin Anfänger :()? Ein Pull-Up-Widerstand wird vom Eingangspin nach VCC eingefügt. Damit sieht das PINx-Register immer eine 1. Ein Taster o.ä. schaltet den Pin auf GND. Dann sieht man in PINx eine 0. Die Pull-Ups werden ausgeschaltet, wenn an diesem Eingang direkt ein anderes IC angeschlossen ist. > 3. Wie ist da smit dem HIGH- und LOW-Pegeln zu verstehen. Wenn ich DDRx > ja mit 1'en fülle, habe ich ja HIGH-Pegel an den Ausgängen. (Sonst LOW > oder?) Ja, wenn es ein Ausgang ist. An PINx kann man beim Atmel immer den Zustand des Pins ablesen. Also auch dann, wenn der Pin als Ausgang geschaltet ist. Nur wenn eine Sonderfunktion aktivert wurde (ADC...) ist PINx meist nicht verwendbar. Grüße, Kurt
Im Datenblatt unter "Ports as General Digital I/O" wird das Zusammenwirken der einzelnen Register am I/O Pin im Prinzipschaltbild dargestellt. Da findet sich alles. Den Fall mit einem Pull-up am Ausgang gibt es natürlich auch, wenn man z.B. wie beim I2C/TWI-Bus mit mehreren Ausgängen auf eine Leitung zugreifen will. Dann wird der Ausgang aber zwischen "Aktiv Low" und "Tri-State" umgeschaltet (Stichwort: Open-Drain).
Hey Leute, vielen Dank an Euch allen. Hat mit sehr viel gebracht. Meine Arbeit in der Schule war ganz okey hoffentlich naher auch die Note :-) Was ich in den Beiträgen oben nur noch nicht verstanden habe, ist dieses: > Wenn Du dann an die 5V nochmal 5V anlegst, passiert nichts, > da keine Spannungsdifferenz - kein Strom, bei 0V anlegen ca. 5v/30KOhm < > 0.2mA Der letzte Teil mit 5V/30KOhm?? Ansonsten, falls ich später mal neue fragen zu einem anderen Themengebiet des Mikrocontrollers haben sollte, würde ich mich gerne nochmals in einem neuen Thread melden, falls ich über Google oder meinen Scripten nicht fündig werde :-) Grüße
helau schrieb: >> Wenn Du dann an die 5V nochmal 5V anlegst, passiert nichts, >> da keine Spannungsdifferenz - kein Strom, bei 0V anlegen ca. 5v/30KOhm < >> 0.2mA > > Der letzte Teil mit 5V/30KOhm?? Ohmsches Gesetz. Strom rinnt nur, wenn es eine Spannungsdifferenz gibt. Wieviel Strom sagt dir das Ohmsche Gesetz U = R * I Umgestellt nach I: I = U / R U (also die Spannungsdifferenz) gleich 5 Volt R (der Widerstand, über dem die Spannung abfällt) gleich 30000 Ohm I (der Strom, der durch den Widerstand rinnt) = 5 / 30000 = 0.1 mA
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.