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
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.