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.
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?
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"?
@ 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
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.
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
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
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
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
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
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
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