PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisproblem von Wiki-Eintrag



joh_walt
24.10.2007, 14:31
Hallo!

Ich habe mir gerade den Wiki-Eintrag AVR-Einstieg leicht gemacht (https://www.roboternetz.de/wissen/index.php/AVR-Einstieg_leicht_gemacht) durchgelesen und habe ein Problem mit der Schaltung.
Sowohl unter "Läuft die Schaltung und das Programm?" als auch "Eingangsport fragt Taster ab" wird PC0 als Ausgang bezeichnet und im Code auch so programmiert.
In der Schaltung hängt aber der Port an +5V und die LED ist in in Richtung zum Port eingesetzt.

Das ist meines Erachtens widersprüchlich. Funktioniert das so überhaupt und wenn, wieso?

Grüße,
Johannes

robodriver
24.10.2007, 15:02
Ja, das ist alles korrekt so.
Wenn man den Pin/Port als Ausgang konfiguriert, kann man ihn per Software auf 1 (5 Volt) oder auf 0 (GND) schalten.
Ersetze nun gedanklich einfach mal den Pin durch eine Verbindung zum GND. Wie du siehts, leuchtet die Diode dann.
Und nun denk dir anstelle des Pins eine Verbindung an +5V. Wie du siehst, leuchtet die Diode dann nicht mehr, da sie an beiden seiten an +5V geschalten ist und kein Strom fließen kann.

Würdest du den Pin/Port nun als Eingang konfigurieren, wie willst du ihn dann auf GND schalten? Einen EINGANG kann man nur abfragen, aber nicht schalten ;)

Die (ich glaube alle) Atmel AVRs haben dann zusätzlich noch eine funktion: wenn man einen Pin/Port als Eingang konfiguriert UND den Pin/Port auf high setzt, dann wird ein Pull-Up Widerstand dazu geschalten.

Wenn du den Pin/Port in dieser Schaltung nun als Eingang konfigurieren würdest, dann könnte kein Strom fließen, denn der Pin kann niemals auf GND geschalten werden sondern lediglich das Potential über den Pull-Up auf +5V angehoben werden.

Kannst es ja auch einfach ausprobieren, dadurch würde in diesem Fall nichts kaputt gehen.

Ich hoffe ich konnte dir weiter helfen.

Gruß Robodriver

joh_walt
24.10.2007, 17:52
Wenn man den Pin/Port als Ausgang konfiguriert, kann man ihn per Software auf 1 (5 Volt) oder auf 0 (GND) schalten.
Ersetze nun gedanklich einfach mal den Pin durch eine Verbindung zum GND. Wie du siehts, leuchtet die Diode dann.
Ok gut, ich hatte irgendwie nicht erwartet, dass sich der Pin so missbrauchen (meinem Verständnis nach, s.u.) lässt (und es deshalb auch nicht einfach ausprobiert).


Würdest du den Pin/Port nun als Eingang konfigurieren, wie willst du ihn dann auf GND schalten? Einen EINGANG kann man nur abfragen, aber nicht schalten ;)
Ich hätte den Pin zwar auch als Ausgang genommen, aber die LED andersrum eingebaut und gegen GND verdrahtet. Den Strom in der technischen Richtung aus dem µC heraus nach GND fliesen zu lassen entspricht mehr dem was ich unter Ausgang verstehe.


Die (ich glaube alle) Atmel AVRs haben dann zusätzlich noch eine funktion: wenn man einen Pin/Port als Eingang konfiguriert UND den Pin/Port auf high setzt, dann wird ein Pull-Up Widerstand dazu geschalten.

Wenn du den Pin/Port in dieser Schaltung nun als Eingang konfigurieren würdest, dann könnte kein Strom fließen, denn der Pin kann niemals auf GND geschalten werden sondern lediglich das Potential über den Pull-Up auf +5V angehoben werden.
Ich hatte schon versucht aus der Grafik im Mega8-Datenblatt schlau zu werden. Aber ich bin mir ehrlich gesagt nicht sicher was die (im beigefügten Bild rot umrandeten) Teile sein sollen, bzw. wie sie funktionieren. Der obere scheint den Pull-Up-Widerstand für den Eingang zu schalten und der untere für den Ausgang zu sein.
Aber liege ich richtig, dass aus dem Port im Eingangsmodus und aktivem Pull-Up auch (minimaler) Strom aus dem Pin rausfliesen kann? So könnte eine LED mit Anode an den Pin und Kathode gegen GND auch am Eingang betrieben werden.

Gruß,
Johannes

Christopher1
24.10.2007, 18:05
Ich hätte den Pin zwar auch als Ausgang genommen, aber die LED andersrum eingebaut und gegen GND verdrahtet. Den Strom in der technischen Richtung aus dem µC heraus nach GND fliesen zu lassen entspricht mehr dem was ich unter Ausgang verstehe.

Soweit ich weiß gibt es bei den "neuen" Controller keine Probleme den Ausgang sowohl in der technisch richtigen Richtung als auch andersrum zu verwenden. Bei µC der AT90xxxx Baureihe funktioniert das glaub ich nicht.

Steinigtmich
24.10.2007, 21:15
Was die technische Stromrichtung anbelangt, die wird ja in keinster Weise in der Logik verletzt.

Es ist ja nicht so, dass ein Pin bei einer logischen "1" einfach nur Strom liefert, und bei einer logischen "0" nicht.
Bei einer "1" liefert er 5V, bei einer "0" liegt er eben auf GND, was heisst, man kann "Strom in ihn reinfliessen lassen".
Diese "Es fliesst einfach kein Strom"-Kondition wird erzeugt indem man den Pin als Eingang schaltet und den Pullup deaktiviert. Das nennt sich dann Hi-Zero oder auf gutdeutsch Hochohmig.

Ich glaube die Verwirrung ist einfach entstanden weil es sich beim AVR um einen Tri-State-Fähigen Baustein handelt.
Der kann eben nicht einfach nur "Saft/Nicht-Saft", sondern als Ausgang "Saft/GND" und als Eingang den "Nicht-Saft"-Zustand.

joh_walt
24.10.2007, 21:52
Was die technische Stromrichtung anbelangt, die wird ja in keinster Weise in der Logik verletzt.
Stimmt, aber das behauptete ich ja nicht. Nur hatte ich bei Ausgang die umgekehrte Richtung also in den µC rein eben ignoriert.


Ich glaube die Verwirrung ist einfach entstanden weil es sich beim AVR um einen Tri-State-Fähigen Baustein handelt.
Der kann eben nicht einfach nur "Saft/Nicht-Saft", sondern als Ausgang "Saft/GND" und als Eingang den "Nicht-Saft"-Zustand.
Aber das Nicht-Saft scheint doch nicht so ganz zu stimmen, denn auch wenn der Pull-Up am Eingang ein ist, ist einfach nur ein (endlicher) Widerstand da und den Pin extern auf GND gelegt müsste einen Strom rausfliesen lassen.

Gruß,
Johannes

Steinigtmich
25.10.2007, 08:26
Aber das Nicht-Saft scheint doch nicht so ganz zu stimmen, denn auch wenn der Pull-Up am Eingang ein ist, ist einfach nur ein (endlicher) Widerstand da und den Pin extern auf GND gelegt müsste einen Strom rausfliesen lassen.


Jo, stimmt, tuts auch. Ich ging von einem deaktivierten Pullup aus. Die im AVR integrierten Pullups sind auch eigentlich kein direkter Bestandteil eines Tri-State-Pins. Die sind nur ein nettes Gimmik damit man nicht selbst extern welche draufschalten muss.
Ohne aktivierten internen Pullup und ohne angeschlossene externe Pullup-/Pulldown-Widerstände ist der als Eingang geschaltete Pin hochohmig, und sein Zustand ist fatalerweise nicht definiert.

Und ja, bei aktivierten Pullups fliesst ein Strom raus. Machst Du damit nichts, wird der Eingang eine logische "1" detektieren, legst Du ihn auf GND, eine logische "0".

Mr Bean
25.10.2007, 08:34
Hallo

Dass man beim AVR eine LED mit einer "0" einschaltet hat meines Wissens auch noch den Grund dass der µC Strom gegen Masse besser verträgt als wenn man den Ausgang bei logisch 1 belastet. Ich hab zwar bis jetzt noch keine Probleme gehabt, ich verwende aber auch low current LEDs (brauchen weniger Strom). Aber es gibt ja noch Anwendungen wo mehr Strom fließt (Reed-Relais z.B.) und da ist es dann denke ich wirklich besser wenn der Strom in den µC hinein fließt.
Hoffe das war soweit verständlich. Musste mich am Anfang aber auch erst daran gewöhnen dass die LEDs bei 0 leuchten O:)


Grüße!!

Bean

Theul
15.12.2007, 18:13
Hallo

bin neu hier und möchte mit einem AT mega 34 microcontroller anfangen
und hab die Grundschaltung im wiki gesehen.

Hab mich am Anfang nicht ausgekannt aund hab im forum den Beitrag gefunden. Das mit der LED und dem Eingang hab ich dank euch kapiert aber was hilft mir der Widerstand nach der LED??
Und nun noch ne Frage könntet ihr das mit dem Taster noch mal genauer erklären.

Hoffe auf eine Antwort, danke im voraus.

Theussl

AlKI
15.12.2007, 18:58
Aber es gibt ja noch Anwendungen wo mehr Strom fließt (Reed-Relais z.B.) und da ist es dann denke ich wirklich besser wenn der Strom in den µC hinein fließt.

mmmmh, bei höheren Strömen als 20mA nehm ich dann doch lieber die Variante mit nem Transistor und nem widerstand zwischen dessen Basis und dem Pin des Microcontrollers.

@Theul: der Widerstand nach (vor gienge natürlich auch) der LED ist zur strombegrenzung und damit die LED die vollen 5V nicht abbekommt. LEDs vertragen, jeh nach Bauart, 1-2,6V (manche auch 3V).

Da wir hier mit 5V arbeiten würde ohne Vorwiederstand eine Zu große Spannung an der LED anliegen und ein zu großer Strom durch die LED und den Microcontroller fließen.
Im schlimmsten Fall würden beide abrauchen, wenn du glück hast, nur die LED.

meinst du wirklich ATmega34??? nicht den ATmega32?? Ersteren gibts nicht.

McJenso
15.12.2007, 21:31
Hallo Theussl,

ich nehme an du meinst den Taster T1 unter "Eingangsport fragt Taster ab". Ich setze mal voraus, dass du weißt was ein Pullup und Pulldownwiderstand ist. Falls nicht, schau bitte vorher im Wissenbereich mit Hilfe der Suche nach.
Im Prinziep hat Steinigtmich schon alles beschrieben. Wird ein I/O-Pin als Eingang benutzt, muss der Pin auf einem definiertem Potential liegen. Dies ist normalerweise Plus oder Gnd. Ist der Pin nicht beschaltet, was einem offenem Taster gleichkommt, ist der Zustand des Eingangs nicht definiert. Es ist dem Zufall überlassen, ob der Pin als 1 oder 0 verarbeitet wird.
Wenn du den Taster jetzt an Plus und den Pin anschließt, bleibt dir nicht anderes über als einen zusätzlichen Pulldown einzubauen.
Schließt du den Taster allerdings wie im Tut beschrieben an GND und den Pin an, benötigst du einen Pullup. Jetzt kommt der Trick. Der AVR stellt dir schon intern einen Pullup zur Verfügung, den du nur noch aktivieren musst. Bitte vergleiche die Kommentare im Programm.
Jetzt wird es wirklich interessant. Wenn der Taster nicht gedrückt ist haben wir im Controller eine 1, wird der Taster gedrückt eine 0. Erinnere dich jetzt an die LED. Die LED leuchtet bei einer 0. D.h. Taster gedrückt -> LED leuchtet. 8)

Gruß

Jens

Theul
16.12.2007, 10:11
Also danke für die Antworten.
Mit dem ATmega34 hab mich verschrieben danke das euch das aufgefallen ist. Ist mir jetzt klar wie das mit dem Taster funktioniert (dank euch :) ).

Aber das mit dem Widerstand ist mir noch unklar.
Hab bis jetzt wenn ich eine Spannung verringern wollte nen Widerstand eingebaut, ist mir schon klar das die LED nicht so viel aushaltet, aber der Spannungsabfall am Widerstand hilft mir doch nichts wenn die LED davor geschalten ist oder??
Kenn mich mit Elektronik nicht so gut aus wie ihr , aber in meiner Schule habe ich das so gelernt. Würd mich freuen wenn mich wer aufklären könnte.

Theul

McJenso
16.12.2007, 10:25
... , aber der Spannungsabfall am Widerstand hilft mir doch nichts wenn die LED davor geschalten ist oder??


Probier es aus. Du hast ja bestimmt eine 5V Spannungsversorgung. Nimm einen Widerstand und eine LED und schalte sie in Reihe an die Spannungsversorgung. Du hast bestimmt auch ein Messgerät. Dann finde heraus, ob sich die Spannungsverhältnisse ändern, wenn du die Reihenfolge änderst.

Alternativ schau bei Wikipedia oder google und such nach "Spannungsteiler.

Gruß

Jens

ps. LEDs sind sehr günsting :evil:

Theul
16.12.2007, 10:31
Ok

werd das mal versuchen, du hast ja recht eine LED kosten nicht die Welt.
Danke

Theul

Christopher1
16.12.2007, 10:34
Wahrscheinlich wirst du dabei sogar Erfolg haben ;-)