Forum: Mikrocontroller und Digitale Elektronik Low oder High schalten?


von FatalDiskError (Gast)


Lesenswert?

Hallo Forum,

meine letzten Microcontroller-Erfahrungen sind bereits mehr als ein 
Jahrzehnt vergangen, aber seit einiger Zeit arbeite ich mich wieder in 
das Thema ein (Atmel). Erstmal ganz kleine Progrämmchen in ASM um wieder 
die Grundlagen aufzufrischen. Das klappt soweit ganz gut. Nur ohne 
Peripherie zur Ein- und Ausgabe wird es schnell langweilig. Daher habe 
ich mir ein STK500 zugelegt. Da ist es nun so, dass alle LEDs mit LOW 
geschaltet werden und alle Taster bei Betätigung ebenfalls von HIGH auf 
LOW gehen.

1) Nun frag ich mich, warum dem so ist. Verbraucht der Controller nicht 
viel mehr Strom, wenn er permanent an allen Ausgängen ein HIGH liefert 
als ein LOW?

2) Neu für mich war auch, dass der Strom bei LOW in den Controller 
"hinein fließt" und ich damit z.B. einen PNP-Transistor schalten kann. 
Ist das so korrekt oder hab ich etwas missverstanden?

3) Und nun wird es etwas abstrakter / spezieller, denn auch meine 
Elektronikkentnisse sind etwas eingerostet: ich möchte bei einem lange 
andauernden HIGH-Signal an einem Ausgang eine Schaltung anschließen, die 
kurz auf LOW geht und dann wieder HIGH wird (dient zum Resetten eines 
JS-FlipFlops). Mir ist klar, dass es einen Kondensator dafür braucht, 
aber ich kriegen nichts zusammengebaut, was mir das gewünschte Ergebnis 
liefert. Einen weiteren Ausgang möchte ich nicht nutzen, zumal ich 
keinen mehr frei habe. Wenn einer da nen Tipp hätte wär das voll super.

Dank und Gruß,
Fatal

P.S.: ja, Suche hab ich benutzt und nix gefunden.

von Detlev T. (detlevt)


Lesenswert?

Die Ausgänge sind CMOS, da ist es ziemlich egal ob high oder low. Bei 
TTL ist das anders, deswegen hat sich das Schalten nach low etabliert 
und dabei blieb es dann.

Bei den Tastern ist es ein wenig anders. Die üblichen AVRs haben einen 
internen Pull-Up-Widerstand, deshalb ist es da sinnvoll, nach Masse zu 
schalten.

Zu 3.) Suchst du ein Monoflop?

von Kilpikonna (Gast)


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

FatalDiskError schrieb:
> Da ist es nun so, dass alle LEDs mit LOW geschaltet werden
> 1) Nun frag ich mich, warum dem so ist.
> Verbraucht der Controller nicht viel mehr Strom, wenn er permanent
> an allen Ausgängen ein HIGH liefert als ein LOW?
Nein. Der Strom wird ja nicht vom Controller gebraucht, sondern von den 
LEDs.

> Da ist es nun so, dass alle LEDs mit LOW geschaltet werden
> 1) Nun frag ich mich, warum dem so ist.
Früher [tm] war es einfacher, gute N-Kanal-Mosfets zu bauen. Deshalb 
konnte damals (auch bei den ersten AVRs) der Controller besser nach 
Masse als nach Vcc schalten. Und deshalb wurden die LEDs von Plus 
versorgt und nach Masse geschaltet.

> 2) Neu für mich war auch, dass der Strom bei LOW in den Controller
> "hinein fließt" und ich damit z.B. einen PNP-Transistor schalten kann.
> Ist das so korrekt oder hab ich etwas missverstanden?
Er flißt nicht hinein und löst sich auf, sondern der uC schaltet einfach 
seinen "unteren" Transistor/FET ein, der nach Masse geht. Sieh dir mal 
die so eine Portpin-Beschaltung im Datenblatt an.

> ich möchte bei einem lange
> andauernden HIGH-Signal an einem Ausgang eine Schaltung anschließen, die
> kurz auf LOW geht und dann wieder HIGH wird (dient zum Resetten eines
> JS-FlipFlops). Mir ist klar, dass es einen Kondensator dafür braucht
Mir ist da noch gar nichts klar...  :-/
Was für ein Ausgang? Was für eine "Schaltung"?

von Falk B. (falk)


Lesenswert?

@  FatalDiskError (Gast)

>ich mir ein STK500 zugelegt. Da ist es nun so, dass alle LEDs mit LOW
>geschaltet werden und alle Taster bei Betätigung ebenfalls von HIGH auf
>LOW gehen.

>1) Nun frag ich mich, warum dem so ist.

Ist historisch bedingt. Früher konnten die ICs nach GND deutlich mehr 
Strom schalten als gegen HIGH, darum die LED-Steuerung mit LOW.
Bei den Eingängen ist es ähnlich. Der AVR und viele andere Controller 
haben (schaltbare) interne Pull-Up-Widerstände. Damit man die sinnvoll 
nutzen kann, müssen die Taster gegen GND schalten.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

> Verbraucht der Controller nicht
>viel mehr Strom, wenn er permanent an allen Ausgängen ein HIGH liefert
>als ein LOW?

Nö.

>2) Neu für mich war auch, dass der Strom bei LOW in den Controller
>"hinein fließt" und ich damit z.B. einen PNP-Transistor schalten kann.
>Ist das so korrekt oder hab ich etwas missverstanden?

Ist korrekt. Ist ja ein Push-Pull Ausgang, siehe [[Ausgangsstufen 
Logik-ICs]].

>Elektronikkentnisse sind etwas eingerostet: ich möchte bei einem lange
>andauernden HIGH-Signal an einem Ausgang eine Schaltung anschließen, die
>kurz auf LOW geht und dann wieder HIGH wird (dient zum Resetten eines
>JS-FlipFlops). Mir ist klar, dass es einen Kondensator dafür braucht,

Nö, das macht man per Software. HIGH, bissel warten, LOW. Das ist ein 
Monoflop in Software.

MFG
Falk

von Ulf (Gast)


Lesenswert?

zu 2) Der Strom fließt von + nach - (GND). Wenn du also eine LED an den 
Ausgang des µC und an + anschließt, fließt der Strom halt + LED µC GND. 
Also in den µC hinein. (Widerstand habe ich der einfachheit halber weg 
gelassen) Schließt du die LED zwischen µC und GND dann fließt der Strom 
halt + µC LED GND also aus dem µC heraus.

von oldmax (Gast)


Lesenswert?

Hi
Nun, einen kleinen Impuls aus einem Tastendruck herzustellen ist doch 
kein Problem. Allerdings solltest du wissen, wie man eine 
Flankenerkennung programmiert. Doch zuerst, ich mach das zumindest so, 
dreh intern per Software die gelesenen Eingänge. Taste gedrückt, 
Schalter geschlossen sollte eine "1" im Bit sein. Das erreichst du mit 
dem Befehl "COM"
Also, Eingänge in Register laden, "COM Register"- Befehl und 
anschließend eine Maske für die relevanten Bits, ein "ANDI Register, 
Bitmuster" und du hast dort eine "1" stehen, wo auch eine Taste gedrückt 
oder ein SChalter geschlossen ist. Wie bereits gesagt, durch die interen 
Pull-Up widerstände braucht es keine externen. Wer es mag, der kann auch 
interne abschalten und z.B. externe Pull-Down Widerstände in die 
Schaltung bringen. Dann spart man den "COM" - Befehl.
Eine Flanke zu erzeugen hab ich schon so oft beschrieben, da such 
einfach mal nach.
Gruß oldmax

von Ben B. (fataldiskerror)


Lesenswert?

Hi,

Erstmal danke für die hilfreichen Belehrungen! So sterbe ich schon mal 
nicht mehr ganz so dumm ^^

Zu dem Problem Nummer 3: um es konkret zu machen hier mein Vorhaben. Ich 
bastel für meine kleinen Kinder eine Ampel mit Rot, Gelb, Grün für Autos 
und Rot und Grün für Fussgänger. Betreiben möchte ich das ganze mit 
einem Tiny45 (als Herausforderung - könnte um es mir einfach zu machen 
auch nen Mega8 mit mehr I/O nehmen, aber wo wäre da die 
Herausforderung). Die Ampel hat dazu noch einen Drücker für die 
Fussgänger (somit 1xIN, 5xOUT) und damit sind alle Pins belegt.

Der Taster (1x schließen) für die Ampel ist beleuchtet und ich möchte 
ihn leuchten lassen, wenn er gedrückt wurde und ausgehen lassen, wenn 
für die Fussgänger Grün angezeigt wird. Daher hatte ich an ein 
RS-Flipflop gedacht - set über den Taster, reset über den 
Grün-Ausgangs-Pin.

Die Ampel hat im übrigen Lampen, (noch) keine LEDs, daher hängen an den 
Ausgängen dann Treiberstufen. Werde ich bei Zeiten mal umbauen, aber 
erstmal lebe ich mit dem, was die alte Spielzeug-Ampel noch an Leuchten 
drin hat.

Werde mir mal das Monoflop anschauen.

Die Idee mit dem kurzen Impuls sehe ich irgendwie nicht als machbar 
(wenn ich mich nicht irre).
- Zu Begin sind beide (invertierten) Eingänge HIGH (Taster schaltet 
gegen Masse, Fussgänger-Grün ist bei HIGH aus).
- Dann drücke ich und !SET geht derweil auf LOW, FlipFlop schaltet (Q 
==) die Taster-LED, anschließend geht !SET wieder auf HIGH.
- Dann ist irgendwann Grün, !RESET geht auf LOW, FlipFlop schaltet die 
Taster-LED aus.
- Wenn nun in der Grün-Phase jemand auf den Taster drückt und !SET 
ebenfalls auf LOW geht, ist das FlipFlop dann nicht in einem nicht 
definierten Zustand (um genau zu sagen beide Ausgänge Q und !Q HIGH)?
Eine Idee die ich als blöd abgetan habe wär, Grün zu invertieren (also 
bei nicht leuchten == LOW), das auf nen Kondensator zu packen und das 
wiederum zu invertieren. Würde bei leuchtendem Grün (== LOW) invertiert 
zu HIGH, läd kurzzeitig den Kondensator (solange an seinem Ende HIGH, 
dann wieder invertiert zu LOW. Das fühlt sich für mich nach Fusch an, 
nur komme ich grad nicht auf die richtige Lösung.

Nun werd ich mir aber erstmal das Monoflop anschauen.

Dank & Gruß,
Fatal

von Ben B. (fataldiskerror)


Lesenswert?

Nur noch als Nachtrag: der Taster betätigt das FlipFlop ausschließlich 
für die Taster-LED... er ist gleichzeitig mit dem Tiny45 verbunden und 
der Teil funzt schon wunderbar! Geht nur noch um die Taster-LED! Der 
Tiny hat mir der Sache nur soviel zu tun, als dass er beim 
Fussgänger-Grün-Pin das FlipFlop resetten sollte...

Gruß,
Fatal

von Axel S. (a-za-z0-9)


Lesenswert?

Moin,

Ben Buchholt schrieb:

> Zu dem Problem Nummer 3: um es konkret zu machen hier mein Vorhaben. Ich
> bastel für meine kleinen Kinder eine Ampel mit Rot, Gelb, Grün für Autos
> und Rot und Grün für Fussgänger. Betreiben möchte ich das ganze mit
> einem Tiny45 ... Die Ampel hat dazu noch einen Drücker für die
> Fussgänger (somit 1xIN, 5xOUT) und damit sind alle Pins belegt.

So weit, so gut. Natürlich könntest du die 5 LEDs auch Charlie-plexed 
mit 3 Pins steuern. Aber bleiben wir bei der einfachen Variante...

> Der Taster (1x schließen) für die Ampel ist beleuchtet und ich möchte
> ihn leuchten lassen, wenn er gedrückt wurde und ausgehen lassen, wenn
> für die Fussgänger Grün angezeigt wird. Daher hatte ich an ein
> RS-Flipflop gedacht - set über den Taster, reset über den
> Grün-Ausgangs-Pin.

Tja. Hier verrätst du deine Herkunft von der Hardware. Wenn man einen µC 
hat, kann man aber in gewissen Grenzen Funktionen zwischen Hardware und 
Software hin- und herschieben.

Für dein Problem würde ich einfach einen Controller-Pin als Eingang für 
den Ampeltaster und gleichzeitig als Ausgang für die LED "gedrückt" 
verwenden.
1
 Pin---+---[R]--|<--- Vcc
2
       /        LED 
3
 GND---+ Taster

Normal ist der Pin als Eingang geschaltet, die LED ist aus. Wenn jetzt 
jemand auf den Taster drückt, geht die LED an. Dein Programm erkennt, 
daß der Pin auf L gegangen ist (Pin-Change-Interrupt oder im 
Timer-Interrupt) und programmiert den Pin auf Ausgang und L. Auch wenn 
der Taster losgelassen wird, bleibt die LED an. Der Taster ist ohne 
Funktion, aber weitere Tastendrücke brauchen ja auch nicht mehr erkannt 
zu werden.

Sobald du für die Fußgänger auf Grün schaltest, setzt du den Pin wieder 
auf Eingang. Und sobald für die Fußgänger wieder Rot ist, testest du den 
Pin wieder auf L.


XL

von Axel S. (a-za-z0-9)


Lesenswert?

Noch ne ganz einfache Variante: die Fußgänger können ja nur entweder Rot 
oder Grün sehen. Also reicht 1 Pin für die beiden LEDs der 
Fußgänger-Ampel. Z.B. so:
1
    LED grün     LED rot
2
3
GND --|<--[R1]--+--|<--[R2]-- Vcc
4
                |
5
              µC Pin

Je nachdem ob der Pin L oder H ausgibt, ist entweder rot oder grün.


XL

von Ben B. (fataldiskerror)


Lesenswert?

Hall Forum!

Hey Axel,

> Natürlich könntest du die 5 LEDs auch Charlie-plexed
> mit 3 Pins steuern.

Ich hab wie gesagt derzeit Lampen, die ich steuern muss. Weiß nicht, ob 
die über nen Transistor gesteuert charlieplexen mögen... Wäre mal nen 
Test wert.

> Tja. Hier verrätst du deine Herkunft von der Hardware.

Ich weiß zwar nicht, wie du auf meine Herkunft kommst, aber eigentlich 
bin ich Software-Entwickler. Das letzte mal, dass ich mit Transistoren, 
Multivibratoren, Drlingtonverstärkern etc zu tun hatte war im Abi und 
dem Studium und ist über ein Jahrzehnt her. Solange hab ich auch ASM 
mehr geschrieben und zuletzt habe ich VHDL prorammiert und an den 
Microcontroller erinner ich mich schon gar nicht mehr ^^ Macht aber 
nichts, die Fehleinschätzung - vllt hab ich mich vorher falsch 
ausgedrückt.

> Für dein Problem würde ich einfach einen Controller-Pin als Eingang für
> den Ampeltaster und gleichzeitig als Ausgang für die LED "gedrückt"
> verwenden.

Natürlich! Das ist ne super Idee! Da fällt mir auf, dass ich immer zu 
starr denke!
Vollkommen richtig und logisch, wenn man erstmal auf den Trichter mit 
der wechselnden Funktion des I/O-Pins gekommen ist...


> Noch ne ganz einfache Variante: die Fußgänger können ja nur entweder Rot
> oder Grün sehen. Also reicht 1 Pin für die beiden LEDs der
> Fußgänger-Ampel.

Öhm, ja klar, das ist natürlich auch vollkommen richtg. Hab halt Lampen 
statt LEDs, aber mit nem PNP- und nem NPN-Transi krieg ich ja die selben 
Ergebnisse, wie mir bereits oben bestätigt wurde. Man, da hab ich echt 
nicht richtig nachgedacht. Liegt vllt daran, dass ich es zuerst mit dem 
STK500 gemacht habe und dot gar nicht die Möglichkeit gehabt hätte. 
Werde das Ganze erstmal schaltungstechnisch und logisch optimieren und 
auf nem Breadboard aufbauen.

Vielen, vielen Dank an das Forum und alle Helfenden (insbesondere an 
Axel, der mir doch sehr die Augen für einige meiner Denkfehler geöffnet 
hat). Ihr seid spitze! Werd mich jetzt mal öfters hier rumtreiben, bei 
so netten Leuten - festen Acc hab ich ja schon und noch so einige 
Projekte und Fragen in der Hinterhand ^^

Grüße,
Fatal aka Ben

von Peter D. (peda)


Lesenswert?

Tasten schaltet man deshalb gegen GND, damit man den internen Pullup 
benutzen kann. Man spart somit zusätzliche Widerstände ein.

Die LEDs sind beim STK deshalb gegen +5V, damit man AVRs mit 
unterschiedlicher VCC betreiben kann und trotzdem die LEDs immer gleich 
hell leuchten.


Peter

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.