Forum: Mikrocontroller und Digitale Elektronik AVR resetiert bei zu vielen LED's gleichzeitig (Spannungseinbruch)


von Lokus P. (derschatten)


Angehängte Dateien:

Lesenswert?

Ich betreibe meinen AVR mit 3V (Brown-out detection VCC=2.7V gesetzt)

Nun habe bei der Schaltung das Problem das der AVR beim betätigen 
mehrerer Tasten gleichzeitig (also aufleuchten merherer LED's) einen 
Reset durchführt.

Das angeschlossene 7-Segment ist dabei ebenfalls ständig in Betrieb.
Je mehr Segmente leuchten um so weniger Tasten (LED's) genügen um den 
AVR zum Reset zu bringen.

Schalte ich die Brown-out detection ab, passiert das natürlich nicht.

Laut Datenblatt zieht ein Segment je 25mA.

Die paar LED's können das ganze doch nicht zum crashen bringen, oder?
Vielleicht fehlt auch bei der Schaltung noch einiges.

von Klaus D. (kolisson)


Lesenswert?

Hallo

versuchs mal mit 100uF oder ähnlich in parallel zu C1


Gruss

von Hc Z. (mizch)


Lesenswert?

Die Schaltung stellt auch eine besondere Leistung dar.  Bei Drücken 
eines Tasters wird die am selben Pin liegende LED direkt an die 3.3V 
gelegt.  Dabei schon fast selbstverständlich: ein Vorwiderstand ist 
nirgendwo vorhanden.  Wer's nicht gemerkt hat:  Das war Ironie.

Und ohne Ironie:  Die Schaltung ist Mist.  Argl.

von El Patron B. (bastihh)


Lesenswert?

jeder Tasterdrücker ist fast ein schöner Kurzschluss...(fehlende 
Vorwidertstände; interner Widerstand der LED's ist schon fast 
vernachlässigbar).

Es fehlen sämtliche Pullup/Pulldown Widerstände uswusf.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

>Es fehlen sämtliche Pullup/Pulldown Widerstände uswusf.
Murks, braucht es nicht. Ein AVR hat eingebaute Pullups.

von Tim S. (maxxie)


Lesenswert?

Manfred W. schrieb:

> Die paar LED's können das ganze doch nicht zum crashen bringen, oder?

Sieht wohl doch so aus.

Deine Stromversorgung liefert nicht genügend Saft um die LEDs in den 
Bereich >2.7V zu fahren. Nehm eine Leistungsfähigere und geb den LEDs 
damit wenigstens den Gnadenschuß. (Ist doch Quälerei)

Oder verwende doch ganz einfach passende Vorwiderstände. Auch bei den 
7-Segment. Die wollen 25mA aber nehmen was sie kriegen auch, wenn es 
ihnen nicht gut tut. Deinem Atmel im Übrigen auch nicht. Schau mal ins 
Datenblatt, was er abzugeben bereit ist.

von Purzel H. (hacky)


Lesenswert?

25mA waren gewollt. Was soll das ? 250uA waeren auch genug.

von Lokus P. (derschatten)


Lesenswert?

Also danke für eure Anteilnahme :)
Aber was ist jetzt des Rätsels Lösung?

Pullups sind ja nicht von nöten, da die intern geschalten werden.
Also vor jeder LED einen Widerling?
Dachte den bräuchte ich nur wenn ich die Schaltung mit 5V betreibe.
3V sollten die LEDs doch locker aushalten.
Oder meint ihr zur Strombegrenzung?

Also wie kann ich das ganze verbessern?

von Stefan B. (Gast)


Lesenswert?

100x schreiben: Ich soll nie eine LED ohne Strombegrenzung betreiben.

Vorwiderstand als Strombegrenzung ist eine Lösung.

von Thomas W. (thomas-w)


Lesenswert?

Manfred W. schrieb:
> Also vor jeder LED einen Widerling?
> Dachte den bräuchte ich nur wenn ich die Schaltung mit 5V betreibe.

Hallo Manfred,

Du brauchst stets einen Widerling, egal bei welcher Spannung!

Siehe hier http://forum.electronicwerkstatt.de/phpBB/faq/led/ unter 
Punkt 5:

Nie LEDs ohne Vorwiderstand betreiben, auch wenn es gerade gut passen 
würde, weil bei UV - N*UF 0V rauskommt! Ohne Vorwiderstand zieht eine 
LED unbegrenzt viel Strom, bis sie durchbrennt. (*)
(Weil eine Batterie keine ideale Spannungsquelle ist und somit einen 
Widerstand "eingebaut" hat, können LEDs so was an Batterien überstehen, 
zu empfehlen ist es aber nicht.)

von Lokus P. (derschatten)


Lesenswert?

Alles klar.
reicht denn in meinem Fall ein Widerstand in der Plusleitung, oder muß 
ich an jedem Ausgang des AVR einen hängen?

Mit welcher Spannung soll ich den Vorwiderstand berechnen.
Die LED leuchtet mit 3V angenehm gut. Also nicht zu hell.
Soll ich trotzdem von einer Betriebsspannung von 1,9V ausgehen wie in 
dem Beispiel oben?

von lassativ (Gast)


Lesenswert?

Ein Widerstand fuer die ganze Schaltung und eine Knopfbatterie duerften 
reichen...wir sind ja im geilen Sparer_D_land.
Hat das etwa ein Genetiker gepredigt ?

von Lokus P. (derschatten)


Lesenswert?

lassativ schrieb:
> Ein Widerstand fuer die ganze Schaltung und eine Knopfbatterie duerften
>
> reichen...

War das jetzt Ironisch gemeint?
Wir leben hier im Ö-Land...

von ... (Gast)


Lesenswert?

lassativ schrieb:
> wir sind ja im geilen Sparer_D_land.

Genau, da wird auch beim Tasten drücken gespart. Immer nur 1 Taste auf 
einmal....

von ... (Gast)


Lesenswert?

Manfred W. schrieb:
> oder muß
>
> ich an jedem Ausgang des AVR einen hängen?

Nein, du musst zwischen +Ub und jeder LED einen Widerstand schalten.

von yalu (Gast)


Lesenswert?

Manfred W. schrieb:
> reicht denn in meinem Fall ein Widerstand in der Plusleitung, oder muß
> ich an jedem Ausgang des AVR einen hängen?

Wenn du damit einverstanden bist, dass die LEDs dunkler werden, wenn
mehr als eine eingeschaltet ist ;-)

Nein, du brauchst tatsächlich für jede LED einen Widerstand, und zwar
einen mit

  R = (Ub - Uf)/If

Ub ist dabei die Betriebsspannung (3,3V), Uf die Flussspannung der LED
(s. Datenblatt) und If der gewünschte LED-Strom.

Beim LED-Strom musst du beachten, dass der weder die LED noch den Mikro-
controller schädigt. Standard-LEDs haben einen Maximalstrom von 20mA,
was aber bei den insgesamt 13 LEDs einen Gesamtstrom von 260mA ergäbe.
Das ist dem ATmega8 zu viel, denn der verträgt nur 200mA (s. Datenblatt
"Absolute Maximum Ratings"). Nimmst du den LED-Nennstrom von 10mA ist
der Gesamtstrom nur noch 130mA und damit im grünen Bereich. Du kannst
die LEDs aber ohne nennenswerten Helligkeitsverlust auch mit 5mA oder
auch noch etwas weniger betreiben, dann bist du auf jeden Fall auf der
sicheren Seite. Du musst bei der Rechnung ja auch die Dinge berücksich-
tigen, die du zukünftig an JP1 anschließen möchtest.

Noch ein Tipp: Du brauchst nicht 13 einzelne Widerstände zu verlöten,
sondern kannst auch Widerstandsnetzwerke verwenden, eins mit 7 und eins
mit 6 Widerständen, z.B. diese hier:

  http://www.reichelt.de/?;ARTICLE=17985
  http://www.reichelt.de/?;ARTICLE=17871

Dann hast du nur 2 statt 13 Bauteile und nur 15 statt 26  Lötstellen:)

Und nun der letzte Tipp: Es gibt so genannte Low-Current-LEDs, die ihre
volle Helligkeit schon bei bei 2mA erreichen. Für den direkten Anschluss
an Mikrocontroller u.ä. bevorzuge ich normalerweise diese.

von yalu (Gast)


Lesenswert?

Ich schrieb:

> Für den direkten Anschluss an Mikrocontroller u.ä. bevorzuge ich
> normalerweise diese.

Nur damit kein Missverständnis entsteht: Mit "direkt" meine ich nicht
ohne Vorwiderstand, sondern ohne zusätzlichen Treiber. Einen Vorwider-
stand braucht man immer, es sei denn, man baut sich eine Konstantstrom-
regelung, was aber viel aufwendiger ist.

von stepp64 (Gast)


Lesenswert?

Schon mal überlegt, was passiert, wenn deine PC0 bis PC5 Ausgänge auf H 
sind (LEDs sind aus) und du eine Taste drückst? Richtig Kurzschluss über 
die Portpins. Das gefällt den µC normalerweise nicht....

von Lokus P. (derschatten)


Angehängte Dateien:

Lesenswert?

So, ich hab das ganze jetzt nochmal mit den Widerständen gezeichnet.
Davon bin ich auf den Rat von yalu mit einem Strom pro LED mit 10mA 
ausgegangen.
Betriebsspannung sind 3V (also 2 AA Batterien)
Dabei komme ich auf die 120 Ohm.

Was sagt ihr dazu?

Wie ist das jetzt allerdings mit dem Kurzschluss?
Hab ich das ganze falsch verdrahtet?
Soll ich stattdessen die LEDs mit HI zum leuchten bringen?
Ich wollte die Pull-Downs vermeiden.

von Karl H. (kbuchegg)


Lesenswert?

Manfred W. schrieb:

> Wie ist das jetzt allerdings mit dem Kurzschluss?

Jetzt gibt es keinen Kurzschluss mehr, solange du die µC-Pins 
ausschliesslich als Eingang betreibst :-)

> Soll ich stattdessen die LEDs mit HI zum leuchten bringen?
> Ich wollte die Pull-Downs vermeiden.

Was willst du eigentlich damit erreichen?
Dir ist klar, dass die LED leuchten werden, wenn du eine Taste drückst? 
Wenn das die Absicht war, dann ist das so ok.

Oder willst du die LED auch aktiv vom Programm aus aufleuchten lassen?

von ... (Gast)


Lesenswert?

Manfred W. schrieb:
> Wie ist das jetzt allerdings mit dem Kurzschluss?

Das hängt jetzt von deinem Programm ab.
Eine Möglichkeit wäre, dass im ersten Schritt deine IO-Pins alle als 
Eingang mit internen PullUp geschaltet sind. Sobald eine der Tasten 
betätigt wird, muss im nächsten Schritt der entsprechende Pin als 
Ausgang und auf Low geschaltet werden. Damit leuchtet dann die 
dazugehörige LED.
Was nie passieren darf ist, dass einer der Pins als Augang und auf High 
geschaltet ist, dann würdest du beim Betätigen des entsprechenden 
Tasters den Proz zerstören.

von Karl H. (kbuchegg)


Lesenswert?

Dir ist hoffentlich auch klar, dass deine 7_Segment Anzeige, je nachdem 
was sie anzeigt eine andere Helligkeit haben wird. Der Unterschied 
zwischen einer angezeigten '1' und einer angezeigten '8' wird schon 
deutlich sichtbar sein.

von Lokus P. (derschatten)


Lesenswert?

Karl heinz Buchegger schrieb:
> Oder willst du die LED auch aktiv vom Programm aus aufleuchten lassen?

Ja,
allerdings nur bevor der AVR in den Funktionsbetrieb geht.
Soll heißen kurz zuvor leuchten die LED's alle auf zur Funktionsprüfung, 
danach erlischen Sie wieder.

Also zuerst sind die Anschlüsse als Ausgang und dann als Eingang 
definiert.

Wenn ich beim Betätigen einer Taste die PINs als Ausgang definiere 
leuchten zwar die LEDs, aber die Funktion des AVR ist nicht mehr 
gegeben.
Denn es soll ja mehr passieren als die LEDs leuchten.

Ausgang und HIGH kommt nicht vor.

von yalu (Gast)


Lesenswert?

Manfred W. schrieb:
> Ausgang und HIGH kommt nicht vor.

Wenn du in deiner Software darauf achtest, dass der Ausgang immer low
ist, passiert nichts. Aber Vorsicht: Das Register (PORTC) zum Aktivieren
der internen Pullups ist das gleiche wie das zum Setzen des Ausgangspe-
gels. Wenn du also von Tastenabfrage auf LED-Ansteuerung umschaltest,
musst du erst PORTC auf 0x00 setzen and danach erst über DDRC den Aus-
gang aktivieren, um Kurzschlüsse zu vermeiden.

Was die Siebensgmentanzeige betrifft, hat Karl Heinz recht (du brauchst
7 Widerstände) und ich weiter oben (mit dem Widerstandsnetzwerk) nicht.
Das von mir vorgschlagene Netzwerk in Sternschaltung geht natürlich
nicht. Statt dessen brauchst du entweder ein Netzwerk mit 7 nicht ver-
bundenen Widerständen oder eben doch Einzelwiderstände.

Viel Spaß noch :)

von weinbauer (Gast)


Lesenswert?

und genau darum plädiere ich seit Jahr und Tag
dafür nicht mit µC anzufangen, sondern mit
Schaltern, Glühlämpchen und Drähten

von Helmut L. (helmi1)


Lesenswert?

weinbauer schrieb:
> und genau darum plädiere ich seit Jahr und Tag
> dafür nicht mit µC anzufangen, sondern mit
> Schaltern, Glühlämpchen und Drähten

Aber dabei lernt man das mit den Vorwiderstaenden auch nicht sondern 
meint anschliessend wie das mit den Gluehlaempchen geht , geht das auch 
mit LEDs.

von lassativ (Gast)


Lesenswert?

Lieber Weinbauer,
Hopfen Und Schmalz sind verloren
Lass sie deine Trauben ernten !

von weinbauer (Gast)


Lesenswert?

Für meine Trauben hab ich hochqualifiziertes
Fachpersonal ... der Umgang mit der Schere will
gelernt und studiert sein, nicht das sich jemand
n Auge aussticht.

Mit Tastern / Schaltern und Lämpchen kann man die
grundlage von Parallel- und Serienschaltung recht
anschaulich erlernen, danach dann LED, dann
Transistorgrundschaltungen etc.

man lässt ja jemand mit Mofapappe auch nicht auf den
A380 los, blos weil der ja auch Räder hat, oder?

von Lokus P. (derschatten)


Lesenswert?

Also statt den einem Widerling an der Anode lieber 8 Widerlinge an der 
Kathode?
Mann, dann besteht die ganze Schaltung ja nur noch aus Widerständen...

Also die PCx sind bei meiner Schaltung immer HI.

Diese Reinhenfolge immer einhalten?
1.) PORT
2.) DDR

von Karl H. (kbuchegg)


Lesenswert?

Manfred W. schrieb:
> Also statt den einem Widerling an der Anode lieber 8 Widerlinge an der
> Kathode?
> Mann, dann besteht die ganze Schaltung ja nur noch aus Widerständen...

So ist das nun mal, wenn der Rest der Schaltung fast nur aus LED besteht 
:-)

> Diese Reinhenfolge immer einhalten?
> 1.) PORT
> 2.) DDR

In deinem Fall wäre es besser; ja
Wenn der Eingang zum Ausgang wird sollte sichergestellt sein, dass die 
entsprechenden Pins garantiert auf 0 sind.

von weinbauer (Gast)


Lesenswert?

Nicht falsch verstehen, ich verurteile niemanden
weil er sich ohne Vorkenntnisse in die Elektronik
stürzen will, aber ich bitte darum unten anzufangen
und sich weiter nach oben durch zu arbeiten ...
bevor man rennen lernt sollte man laufen können.

Und zum Topic:
LED werden immer mit Strombegrenzung betrieben,
das kann bei konstanter Betriebsspannung n einfacher
Widerstand sein, oder eine Konstantstromquelle.

Und zum besseren Verständnis Deiner Schaltung
such mal im Netz unter Knotenregel und Maschenregel.

Dabei gehts um die Verteilung von strömen und
Spannungen in Schaltungen.

von weinbauer (Gast)


Lesenswert?

Das Fiese an LED ist ... selbst wenn man sagen würde
ok, es soll immer die gleiche Kombination von
sagen wir mal 4 LED leuchten, ohne Veränderungen,
dann könnte man ja theoretisch annehmen
man nehme einen Widerstand, der den Strom für
alle 4 LED begrenzt (also 4 mal 20mA = 80mA)
und hängt diesen vor eine Parallelschaltung von
4 LED.
Das geht schief.
Warum? ... weil alle Bauteile gewisse Toleranzen
haben, so auch die LED für ihre Durchgangsspannung.
Liegen diese nur n paar Milivolt unterschiedlich
bekommt u.U. eine LED die 80mA ab und die anderen
3 bleiben halb dunkel, mit dem Effekt, daas sich
diese LED schnell verabschiedet, dann ist die
Nächste dran usw.
Daher brauchen alle LED ihe Strombegrenzung.

von Lokus P. (derschatten)


Angehängte Dateien:

Lesenswert?

So, nochmal neu gezeichnet. denke so müßte es jetzt passen.
Dabei bin ich gleich mal draufgekommen das PC und PB vertauscht waren.

Wie ist das jetzt allerdings mit dem Kurzschluss:
Also wenn PB als Ausgang definiert und ein HI anliegt, und ich eine 
Taste betätige, dann schließ ich den Augang des AVR ja mit dem Taster 
kurz.

Ist das problematisch?
Weil anders kann ich die LEDs ja sonst nicht ansteuern.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Manfred W. schrieb:
> Ist das problematisch?
Ja, da dann durch den µC ziemlich viel Strom fliesst. Wenn Du Glück 
hast, kannst Du im Dunkeln auch beobachten, wie er sich (leuchtend) 
beschwert.
Danach ist entweder der Port oder der ganze µC beleidigt.

> Weil anders kann ich die LEDs ja sonst nicht ansteuern.
Doch, mittels Schieberegister.
Einer für die LEDs als Ausgangsregister und einer für die Tasten als 
Eingangsregister.

von ... (Gast)


Lesenswert?

Manfred W. schrieb:
> Also wenn PB als Ausgang definiert und ein HI anliegt....
> Weil anders kann ich die LEDs ja sonst nicht ansteuern.

Deine LED leuchtet wenn PB als Ausgang definiert und LOW anliegt!

von yalu (Gast)


Lesenswert?

> So, nochmal neu gezeichnet. denke so müßte es jetzt passen.

Das sieht ganz gut aus. Allerdings hast du dir die ISP-Schnittstelle
zugebaut. Du kannst den Controller also nur programmieren, indem du ihn
aus der Schaltung entfernst.

> Also wenn PB als Ausgang definiert und ein HI anliegt, und ich eine
> Taste betätige, dann schließ ich den Augang des AVR ja mit dem Taster
> kurz.

So ist es.

> Ist das problematisch?

Auf jden Fall unschön. Der Controller wird aber deswegen nicht sofort
kaputt gehen, wenn du nicht gerade alle Taster gleichzeitig drückst.

> Weil anders kann ich die LEDs ja sonst nicht ansteuern.

Doch. Um eine LED einzuschalten, schaltest du den entsprechenden Port-
Pin auf low und Ausgang. Um sie wieder auszuschalten, schaltest du den
Pin auf Eingang. Einen High-Pegel am Ausgang brauchst du somit nie,
damit ist das Problem mit den Kurzschlüssen in Wirklichkeit gar keins.

von ... (Gast)


Lesenswert?

> Also wenn PB als Ausgang definiert und ein HI anliegt, und ich eine
> Taste betätige,

Diese Kombination sollte nicht vorkommen. Würde Logisch auch keinen Sinn 
ergeben, weil mit einem als Ausgang geschalteten Pin kannst du keinen 
Taster einlesen.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

yalu schrieb:
> Doch. Um eine LED einzuschalten, schaltest du den entsprechenden Port-
> Pin auf low und Ausgang. Um sie wieder auszuschalten, schaltest du den
> Pin auf Eingang. Einen High-Pegel am Ausgang brauchst du somit nie,
> damit ist das Problem mit den Kurzschlüssen in Wirklichkeit gar keins.

Ok, stimmt, damit geht es auch (mache ich bei meine 1-Wire-Client ja 
genauso).

von Karl H. (kbuchegg)


Lesenswert?

Manfred W. schrieb:

> Wie ist das jetzt allerdings mit dem Kurzschluss:
> Also wenn PB als Ausgang definiert und ein HI anliegt, und ich eine
> Taste betätige,

Weiter oben, warst du dir doch schon mit dir selbst einig:
<Zitat>
Ausgang und HIGH kommt nicht vor.
</Zitat>

Wo liegt dann das Problem?

von Lokus P. (derschatten)


Lesenswert?

Also im Prinzip nur zwischen Ein- und Ausgang hin und her schalten?
Wenn die Anschüsse jedoch auf Ausgang geschalten sind, kann ich den 
Zustand ja nicht mehr ändern da die taster den AVR nicht ansteuern 
können, oder?

Vor allem, wenn ich ständig zwischen EIN und AUS hin und her schalte 
(und das passiert ja doch in meinem Falle mehrere hundert male in der 
Minute) beleidigt das den AVR nicht?

Ausgang mit HIGH verbunden kommt nicht vor meinte ich natürlich.

Übrigens das Programmieren geht weiterhin problemlos. Mache ich die 
ganze zeit so.

von Phantomix X. (phantomix)


Lesenswert?

>beleidigt das den AVR nicht?

Nein, der freut sich, mal nicht arbeitslos zu sein

Der Nachteil deiner Beschaltung ist halt, du kannst nicht gleichzeitig 
LED leuchten lassen und den zugehörigen Taster auslesen. Außerdem 
leuchtet die LED immer, solange der Taster gedrückt ist (aber das wurde 
schon oben bemerkt^^)

Was klappen würde, wäre eine Art Multiplexing (schnell zwischen Auslesen 
und LED-An hin und her schalten)

von Karl H. (kbuchegg)


Lesenswert?

Manfred W. schrieb:
> Also im Prinzip nur zwischen Ein- und Ausgang hin und her schalten?
> Wenn die Anschüsse jedoch auf Ausgang geschalten sind, kann ich den
> Zustand ja nicht mehr ändern da die taster den AVR nicht ansteuern
> können, oder?

Ein Portpin der auf Ausgang geschaltet ist, kann nicht als Eingang 
fungieren. Dazu muss man ihn auf Eingang schalten. Sollte eigentlich 
logisch sein.

> Vor allem, wenn ich ständig zwischen EIN und AUS hin und her schalte
> (und das passiert ja doch in meinem Falle mehrere hundert male in der
> Minute) beleidigt das den AVR nicht?

Huch. Mehrere hundert male in der Sekunde!

Keine Sorge. Dein AVR arbeiteitet ein paar Hundert-Tausend (!) Befehle 
in der Sekunde ab! Die paar Hundert Umschaltungen sind ihm egal. Und im 
übrigen ist das nur eine Maschine. Der macht es nichts aus immer und 
immer wieder das gleiche zu machen. Die ist auch nicht beleidigt 
deswegen, stumpfsinnige Arbeit zu verrichten.

von Lokus P. (derschatten)


Lesenswert?

Karl heinz Buchegger schrieb:
> Ein Portpin der auf Ausgang geschaltet ist, kann nicht als Eingang
>
> fungieren. Dazu muss man ihn auf Eingang schalten. Sollte eigentlich
>
> logisch sein.

Ja, dann ist das ganze System Sinnlos.
Ich will ja sehen wenn ein Taster gedrückt wurde. und gleichzeitig soll 
der taster auch etwas auslösen.

Was haltet ihr davon wenn ich zwischen Tastert und AVR jeweils eine 
Diode in Sperrichtung schalte?

von Lokus P. (derschatten)


Lesenswert?

Also die Widerstände haben schon mal wunderbar geholfen.
Kein Reset mehr :)

Jetzt bleibt noch die Frage mit dem Kurzschluss offen.
Hab ich jetzt eigentlich auch einen Kurzschluss wenn der B-Port als 
Eingang definiert ist?

von Karl H. (kbuchegg)


Lesenswert?

Manfred W. schrieb:
> Karl heinz Buchegger schrieb:
>> Ein Portpin der auf Ausgang geschaltet ist, kann nicht als Eingang
>>
>> fungieren. Dazu muss man ihn auf Eingang schalten. Sollte eigentlich
>>
>> logisch sein.
>
> Ja, dann ist das ganze System Sinnlos.
> Ich will ja sehen wenn ein Taster gedrückt wurde. und gleichzeitig soll
> der taster auch etwas auslösen.

Geht doch beides :-)

Wenn du den Taster drückst, leuchtet die LED.
Aber nicht deswegen weil der µC die LED aktiv einschaltet, sondern weil 
sich das durch die Verschaltung so ergibt.

Der µC hat da seine Finger überhaupt nicht im Spiel. Für die LED sieht 
die Sache so aus: drückst du den Taster, wird ihre Kathode mit Masse 
verbunden. Da gleichzeitig ihre Annode über den Widerstand an Vcc hängt, 
leuchtet sie. Ist die Taste nicht gedrückt, so befindet sich die Kathode 
der LED durch den im µC eingeschalteten Pullupwiderstand auf gleichem 
Niveau wie ihre Anode und sie leuchtet nicht.

In Arbeitsstellung ist der Port ständig auf Eingang geschaltet. Drückt 
man dann eine Taste, kriegt der µC seinen Wechsel auf 0, wodurch der µC 
die Tastenbetätigung erkennt und gleichzeitig leuchtet die LED.

Wo ist also das Problem?
Du hast doch selbst gesagt, dass du vom Programm aus niemals die LED 
aktiv zum Leuchten bringen willst, ausser ganz am Programmanfang, als 
eine Art Lampentest. Dann und nur dann ist der Port auf Ausgang 
geschaltet. Und zum Zwecke des Lampentests ist der entsprechende 
Ausgangspin auf 0. Damit spielt es dann auch keine Rolle mehr, ob die 
Taste gedrückt ist oder nicht. Einen Ausgangspin der sowieso schon auf 
Masse liegt, kann man mit einem Taster zusätzlich noch nach Masse 
verbinden wie man lustig ist. Da passiert nichts.
Gefährlich ist nur die Kombination:
  Port auf Ausgang
  Portpin auf High
Das sollte man tunlichst unterlassen (*). Aber der Fall kommt bei dir ja 
nach eigenen Aussagen nie vor und ich sehe jetzt auch keinen Grund mit 
deiner bisherigen Beschreibung des Vorhabens, warum das jemals so sein 
sollte.

(*) und auch wenn die Puristen jetzt aufheulen: Wenn du die Reihenfolge 
DDR setzen, PORT setzen falsch rum hast, wird der Ausgangstreiber nicht 
sofort den Löffel abgeben. Auch wenn es elektronisch ein Kurzer ist, so 
mimosemhaft sind die µC dann auch wieder nicht. Was natürlich nicht 
heißen soll, dass ich dir die falsche Reihenfolge empfehle :-)

von Grrrr (Gast)


Lesenswert?

Manfred W. schrieb:
> Hab ich jetzt eigentlich auch einen Kurzschluss wenn der B-Port als
> Eingang definiert ist?

weinbauer schrieb:
> und genau darum plädiere ich seit Jahr und Tag
> dafür nicht mit µC anzufangen, sondern mit
> Schaltern, Glühlämpchen und Drähten

von Lokus P. (derschatten)


Lesenswert?

So, ich bin gerade draufgekommen das Port für die Tasten gar nicht auf 
HIGH geschalten werden muß.
Es reicht wirklich wenn ich nur die Richtung ändere. (Ein-Ausgang)
Somit erübrigt sich das Problem ganz einfach :)

Jedoch eine Sache hab ich noch, damits nicht Langweilig wird.
Die Ausgänge des AVR (also PCx) sollen an die Tasten eines 
Wii-Controllers.

Dieser hat an den Tasten bei nichtgedrückt +3V anliegen. Diese werden 
also mit LOW geschalten.

D.h. ich lege einfach den PCx auf den Plus des Tastenpads und LOW auf 
Minus des Pads.
Nach einschalten des AVR muß da sofort Spannung, also HIGH anliegen 
damit die tasten nicht betätigt werden. Ist das korrekt so?

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
Noch kein Account? Hier anmelden.