Wie schließe ich eine LED über den TX-Pin an meinem Atmega328 an?

Ich habe ein eigenständiges Arduino gebaut und Skizzen über diese Methode von Arduino auf einen Mikrocontroller auf einem Steckbrett hochgeladen . Ich möchte eine LED über TX wie auf der Arduino-Platine anschließen, also habe ich sie einfach mit dem TX-Pin verdrahtet, wobei ein Widerstand gegen Masse geht. Und es funktioniert auf einer Skizze, wo ich einfach serielle Daten mit einer Baudrate von 9200 sende. Sowohl die Arduino TX- als auch die ATmega TX-LEDs blinken korrekt.

Meine Anwendung beinhaltet jedoch eine Baudrate von 19200, aber wenn ich diese Skizze hochlade, bleibt der TX-Pin auf meinem ATmega ständig eingeschaltet, auch wenn keine seriellen Daten gesendet werden. Noch interessanter ist, dass die Arduino TX-LED für dieselbe Skizze korrekt blinkt. Kann jemand helfen?

Können Sie uns zeigen, wie Sie Ihre LED verdrahtet haben? Oder sagen Sie uns zumindest, an welchem ​​​​Pin es genau verdrahtet ist? Technisch gesehen sind die von Ihnen verwendeten Pins nicht die von der seriellen Schnittstelle (Pins 2 und 3), daher verwenden Sie höchstwahrscheinlich einen anderen Pin, der während der ISP-Programmierung verwendet wird (MISO, MOSI usw.).
Wenn Sie den seriellen TX-Pin verwenden würden, müssten Sie die LED mit Vcc (mit dem Reihenstrombegrenzungswiderstand) und nicht mit Masse verbinden, da UART (serielle Schnittstelle) im Leerlauf HIGH ist (dh sie bleiben auf Vcc-Pegeln, wenn nichts ist). übermittelt). Es ist also hilfreich zu wissen, mit welchem ​​​​Pin Sie Ihre LED verdrahtet haben.
@ZackB - Wenn Sie sich ein Arduino genau ansehen, werden Sie feststellen, dass die TX- und Rx-LEDs nicht mit den Tx- und Rx-Pins des ATmega verbunden sind. Auf einem Arduino werden sie von Pins auf dem USB-zu-Seriell-Schnittstellenchip angesteuert. Ich habe mir die Spezifikationen nicht angesehen, aber bei hohen Baudraten oder langen Kabeln (oder anderen Dingen mit reduzierten Treibersignalen) kann es vorkommen, dass die Kommunikation unzuverlässig wird, da die LEDs die Verbindung zusätzlich belasten. Vielleicht möchten Sie die LEDs indirekt mit einem MOSFET oder Darlington-Transistor ansteuern.
@Ricardo Ich habe die LED mit vcc verdrahtet und bekomme keinerlei Aktivität. Ich bin mir nicht sicher, wie ich ein Bild davon posten soll, wie die LED verdrahtet ist, aber sie ist an einem Ende mit dem TX-Pin und am anderen mit einem Widerstand gegen Masse verbunden.
@gbulmer Wenn das, was Sie sagen, wahr ist, werde ich mich nicht darum kümmern, die serielle Übertragung einzurichten und zu führen, da dies für mein Projekt wirklich nicht wesentlich ist.
@Ricard Im Gegensatz zu meinem vorherigen Kommentar - Nach korrekter Verkabelung mit Vcc funktioniert die LED! Danke. (Ich habe vergessen, dass LEDs wirklich nur Dioden sind)
@ZackB - bitte lass mich dich nicht davon abhalten; Ich habe nicht versucht, Sie dazu zu überreden. Ich denke, die blinkenden LEDs sind eine nützliche, einfache menschliche Schnittstelle. Ich möchte Sie nur warnen, dass die Möglichkeit besteht, dass etwas schief geht, da Vorwarnung Vorwarnung ist; Wenn die Kommunikation ein wenig flockig wird, dann nehmen Sie die LEDs ab und sehen Sie, ob es das behebt. Welche Widerstandsgröße verwendest du?
@gbulmer Ich bin mir eigentlich nicht sicher, welcher Widerstand, denn laut der LED- Produktseite scheint es, als würde er keinen großen Widerstand benötigen, aber er ist extrem hell, selbst wenn er mit einem 10k-Widerstand verdrahtet ist. Ist das normal?
@ZackB - Nur zur Bestätigung, Sie betreiben diese LED mit 5 V mit einem Strombegrenzungswiderstand von 10 k in Reihe ? Das wäre (5V-3,4V)/10k = 0,16mA, ja? Blaue LEDs sind sehr auffällig, aber das ist sehr beeindruckend. Ich wollte gerade vorschlagen, dass Sie die Probleme, über die ich mir Sorgen machte, wahrscheinlich vermeiden würden, wenn Sie Ihre Tx- und Rx-LEDs mit 4k-Widerständen (deutlich unter 1 mA Strom) betreiben könnten. Beispielsweise sind einige alte RS232-Seriell-Konverter stromsparend (IIRC unter 4 mA), sodass etwa 4 mA für eine LED zu viel sein könnten. Der Effekt kann darin bestehen, einige Bitmuster zu verzerren, da es Probleme hatte, das Signal schnell genug herunterzuziehen
@gbulmer Ja, die LED erzeugt selbst bei diesem niedrigen Strom eine angemessene Leistung. Ich habe stattdessen einen 220-Ohm-Widerstand eingebaut, und es war fast zu hell, um es anzusehen. Ich habe es gerade bei 2,2k, was gut aussieht, wenn man bedenkt, dass es nur für den Bruchteil einer Sekunde blinkt.
@ZackB - Danke für das Feedback. Hast du die LED mit 4,4k ausprobiert, also zwei dieser 2,2k in Reihe? Angetrieben mit 2.2k sollte die Probleme, über die ich besorgt war, deutlich reduzieren.

Antworten (5)

Vorbehalt: Obwohl das OP meine Antwort als die beste akzeptiert hat, wurde danach eine weitere, bessere Antwort gepostet, die Sie vielleicht lesen möchten, bevor Sie meine lesen. Wie von Chetan Bhargava angemerkt, kann meine Lösung zu viel Strom ziehen, um die LEDs von den seriellen Leitungen anzusteuern.


Unten ist ein Teil des Schemas eines RS232-zu-UART-Konverters, den ich gemacht habe. Darin habe ich LEDs (und ihre jeweiligen Serienbegrenzungswiderstände) von den RX- und TX-Leitungen an die Vcc-Leitung angeschlossen, genau so, wie Sie Ihre anschließen könnten . Verdrahten Sie die Anoden mit Vcc und die Kathoden mit den TX/RX-Leitungen, wobei der Strombegrenzungswiderstand in Reihe geschaltet ist (entweder vor oder nach der LED).

RX- und TX-LED-Anschlüsse

Die LEDs müssen mit Vcc und nicht mit Masse verbunden werden, da UART-Leitungen (dh die serielle ATmega-Schnittstelle) im Leerlauf HIGH sind, dh sie bleiben auf Vcc-Pegeln, wenn nichts übertragen wird.

Beachten Sie jedoch, was gbulmer in seinen Kommentaren sagte:

... bei hohen Baudraten oder langen Kabeln (oder anderen Dingen mit reduzierten Ansteuersignalen) kann es vorkommen, dass die Kommunikation unzuverlässig wird, da die LEDs die Verbindung zusätzlich belasten. Vielleicht möchten Sie die LEDs indirekt mit einem MOSFET oder Darlington-Transistor ansteuern.

Ich hatte keine Probleme mit diesen LEDs, die an die seriellen Leitungen bis zu 78600 Baud angeschlossen sind, aber Sie könnten es tun, wenn Sie schneller fahren.


Wenn Sie daran interessiert sind, Anzeige-LEDs als Feedback in Ihrem ISP-Programmierer anzuschließen, können Sie Folgendes tun. Der ArduinoISP-Sketch (Firmware) steuert bereits drei Anzeige-LEDs an:

  1. Herzschlag auf D9: Es blinkt (verblassend), um anzuzeigen, dass die Skizze ordnungsgemäß funktioniert;
  2. Programmierung auf D7: leuchtet, wenn die eigentliche Programmierung stattfindet;
  3. Fehler auf D8: an, wenn etwas schief geht.

Diese Indikatoren funktionieren perfekt mit der ArduinoISP-Skizze.

Um diese LEDs zu verdrahten, verwenden Sie das folgende Schema:

ArduinoISP-Schild

Der Schaltplan ist für ein Arduino Shield, das ich zum Programmieren von ATmegas und ATtinies gemacht habe, zur Verwendung mit der ArduinoISP-Skizze. Ich hoffe das hilft.

Wenn Sie wirklich LEDs an die Übertragungsleitungen anschließen möchten, beantworten Sie bitte die Fragen, die ich als Kommentare gepostet habe, dann werde ich meine Antwort aktualisieren.

Ich habe die ISP-Skizze verwendet, um den Atmega zu booten, aber danach verwende ich nur tx, rx und Reset-Zeilen zwischen den beiden, um Skizzen hochzuladen.
Dort! Ich habe meine Antwort aktualisiert, um Ihre Klarstellungen zu berücksichtigen und auch als zukünftige Referenz zu dienen.
Bitte zögern Sie nicht, zu stimmen und die Antwort zu akzeptieren, die für Sie am hilfreichsten war. Klicken Sie dazu auf den nach oben zeigenden Pfeil und das Häkchen oben in der Antwort auf der linken Seite.
@Ricardo - ist das erste Diagramm wirklich Teil des Schaltplans oder haben Sie gerade etwas skizziert, um diese Frage zu beantworten? Ich denke, es ist kaputt und kann nicht wie gezeigt funktionieren. Das Schema zeigt, dass Rx direkt an + 5 V angeschlossen ist, daher ist es sehr unwahrscheinlich, dass dies funktionieren würde. Würden Sie auch den Wert von R1 und R2 anzeigen? Außerdem ist das ein R @ 232 zu UART und die Frage erwähnt RS232 nicht.
@gbulmer Sehr gut entdeckt!! Das Bild stammt von einem tatsächlich funktionierenden Board, das ich habe, aber mit Photoshop bearbeitet, damit es besser aussieht, falls Olin es sieht. Es ist jetzt behoben.
@gbulmer Die Widerstände sind beide 1K. Das Bild stammt von dem Teil meines Konverters, der mit den ATmega UART TX- und RX-Pins verbunden ist. Ich habe es als bestes Beispiel verwendet, um zu veranschaulichen, wie man die LEDs verdrahtet.
@Ricardo - okay, das ist besser. Ich habe jedoch jetzt gelesen, dass die Schaltung ein in der Nähe befindliches Elektronikgerät hat, das den RS232-Signalpegel in den 5-V-UART-Signalpegel konvertiert hat. Das ist genau nicht das, wovor ich ZackB warne. Eine lokale Elektronik, die als Puffer fungiert und somit die Elektronik antreibt , habe ich vorgeschlagen. Ich bin entspannt, wie das Problem angegangen wird. Ich denke jedoch, dass Ihre Schaltung kein Beweis dafür ist, dass die Schaltung von ZackB robust und zuverlässig ist. Ich versuche nur klar zu sein, um Verwirrung zu vermeiden.
@gbulmer Kannst du genauer erklären, was du meinst? Warum genau ist dieses Setup zum Beispiel nicht zuverlässig? Weil die Möglichkeit besteht, dass Daten verloren gehen? Warum denn?
@gbulmer Danke für die Klarstellung. Aber wenn Sie der Meinung sind, dass mein Verweis auf Ihren Kommentar unklar und falsch ist, können Sie ihn gerne bearbeiten. Oder, wenn Sie wollen, kann ich es komplett entfernen. Oder Sie können eine Antwort platzieren, die dies klarstellt. Ich bin mit jeder Option einverstanden, die Sie wählen.
@ZackB Eigentlich habe ich die LEDs aus dieser Frage entfernt, die ich verlinkt habe, weil ich wusste, dass sie falsch verdrahtet waren ...
@Ricardo - Es macht mir überhaupt nichts aus, dass Sie einen echten Fall identifizieren, in dem alles gut funktioniert hat!-) Mein Punkt ist, dass der obere Schaltplan möglicherweise die Linie zwischen dem RS232-zu-Seriell-Konverter und dem UART darstellt, ich kann es nicht sein Sicher. Wenn es jedoch zwischen diesen beiden Endpunkten liegt und sie sich alle auf Ihrer lokalen Platine befinden, können sie nicht "langen Kabeln (oder anderen Dingen mit reduzierten Treibersignalen)" ausgesetzt werden. Wenn dies jedoch nicht der Fall ist und diese Signale diesen Gefahren ausgesetzt sind, ist dies ein Beweis dafür, dass es funktioniert, und definiert Bedingungen, unter denen ZackB in Ordnung sein sollte.
@Ricardo in Abbildung "RX- und TX-LED-Anschlüsse" (Abbildung 1), würde nicht viel Strom aus den RX- und TX-Leitungen gezogen werden, um die LEDs anzusteuern?
@Chetan Es hängt wirklich von R1 und R2 ab. Mit 1K-Widerständen bekomme ich normalerweise 5mA-Ströme. Ist das viel? Ich kann es nicht sagen. Es funktioniert einfach für mich. Reicht das aus, um die seriellen Leitungen zu stören?
@Ricardo alles hängt von der Stromaufnahme und dem TTL-Ausgangstreiber auf den TX- und RX-Leitungen ab. Wenn man sich einige Datenblätter von FTDI-Kabeln ansieht, heißt es, dass sie 6-8 mA sinken können. Ich bin mir nicht sicher, ob es eine gute Idee ist, 5 mA von den Pins zu ziehen.
@Chetan - wäre es in Ordnung, die LEDs mit BJTs als Schalter anzusteuern und ihre Basen mit geeigneten Serienbegrenzungswiderständen mit den seriellen Leitungen zu verbinden?
@Ricardo ja, es wäre mit BJT mit hohem hFE und auch mit MOSFETs möglich.

Im Allgemeinen ist es keine gute Idee, viel Strom aus Ihren Rx- und Tx-Leitungen zu ziehen, um LEDs anzusteuern. Die zusätzliche Stromaufnahme kann Ihr Fan-out auf Ihr Ziel reduzieren.

Um eine zusätzliche Stromaufnahme aus Ihren Leitungen zu vermeiden, können Sie einen dualen Operationsverstärker wie den LM358D verwenden , um diese LEDs anzusteuern .

Geben Sie hier die Bildbeschreibung ein

LM358TI

Die hohe Impedanz der OpAmp-Eingänge zieht nicht viel Strom aus Ihren Tx- und Rx-Leitungen und bewahrt das Fan-Out auf den Leitungen.

Ich habe diesen Schaltplan in LTSPICE simuliert und mit LM324 (TI) auf einem Steckbrett physisch verifiziert . Leider hatte ich keinen LM358D zur Hand, aber sie funktionieren ähnlich.

Bearbeiten: Dank Hinweisen von arudino.tyro. Ich konnte den neuen Schaltplan mit LM358D ausprobieren. Der alte Schaltplan ist hier: http://i.stack.imgur.com/GHauy.png

Wenn ich mich nicht irre, wird dieser Operationsverstärker als Puffer verwendet? Wird es so genannt?
Was ist ein typischer Wert für R1 und R2? Was ist der typische Ausgangsstrom bei 1 & 7 unter der Annahme von 5 V Vcc und 5 V TTL? Ich denke, die maximale Stromstärke von 1 und 7 beträgt 40 mA. Aber was ist der typische Wert bei den gegebenen Werten? Danke
@arudino.tyro Die Werte von R1 und R2 hängen von der Stromstärke der LED, der Strommenge, die Sie durch die LED leiten möchten, und (oder) davon ab, wie hell die LED eingeschaltet sein soll. Sie können nach einem LED-Stromrechner googeln.
@ChetanBhargava, ich habe deine Schaltung verwendet und sie bleibt die ganze Zeit eingeschaltet. Ich glaube, ich habe das Problem gefunden: TTL-Pegel sind wirklich niedrig, wenn die Spannung 0,7 V oder weniger beträgt, und sie sind hoch, wenn sie 2 V oder mehr betragen. Mit Ihrer Schaltung "vergleichen" Sie also zwei Spannungen. Einer ist der TTL-Pegel an IN- und der andere an IN+. Wenn der Komparatorausgang nur den (invertierten) Zustand der Signalleitungen sein soll, dann sollten Sie diese mit einer festen Spannung zwischen 0,7 V und 2,0 V vergleichen. Hier ist das Problem: Sie vergleichen es mit der Ausgabe. (OUT ist mit IN+ verbunden)
@ChetanBhargava, Wenn der Ausgang hoch ist (5 V), sollte der IN-Eingang höher als 5 V sein, um den Ausgang umzuschalten. Dasselbe gilt, wenn der Ausgang niedrig ist, dann benötigen Sie eine Eingangsspannung von weniger als 0 V, damit der Ausgang schaltet. Problem gelöst durch 1. Trennen von OUT von IN+, 2. Zuführen von 1,5 V von 5 V über einen Spannungsteiler (oder wahrscheinlich eine Zenerdiode). Ich wäre Ihnen dankbar, wenn Sie Ihre Schaltpläne reparieren könnten. Danke
Lieber @ChetanBhargava, Ja, ich habe es auf einem Steckbrett getestet und es blieb die ganze Zeit eingeschaltet. Ich habe im Internet gesucht und bin auf ein Forumsthema auf edaboard gestoßen: " edaboard.com/thread346127.html " Das OP hat genau Ihre Schaltpläne mit Ihrem Namen verwendet! Sie müssen Mitglied sein, um die Schaltpläne zu sehen. Er berichtete dasselbe. Ich habe den dort vorgeschlagenen Trick gemacht und es hat Ihre Schaltung repariert. Stellen Sie anstelle der Rückkopplungsleitung an v + (nicht invertierend ...) eine Spannung zwischen 0,7 V und 2,0 V bereit. Ich habe 1,5 V von der 5-V-Leitung über einen Spannungsteiler bereitgestellt. Ich habe es auch in LTspice simuliert.
@arudino.tyro Danke für die Hinweise, ich habe meine Antwort verbessert. Ich würde mich freuen, wenn Sie den neuen Schaltplan ausprobieren könnten. Mein alter Schaltplan war nur ein Puffer (kein invertierender Puffer). Ich habe vergessen, dass UART-Signale invertiert sind.
@ChetanBhargava, Ok ... Ich werde es so schnell wie möglich tun. Welches Programm verwenden Sie zum Zeichnen von Schaltplänen?

Ich kann mir nicht vorstellen, dass die von Chetan Bhargava gepostete Schaltung korrekt funktioniert, da die LED, wie von arudino.tyro in einem Kommentar angegeben, ständig an ist, wenn ich sie simuliere. Außerdem ist das Verhalten im Vergleich zu der von Ricardo vorgeschlagenen einfachen Widerstands-plus-LED-Schaltung anders .

UART ist HIGH, wenn IDLE, also müssen Sie die LED einschalten, wenn der Bus LOW ist. Sie könnten erwarten, dass etwas mit dem "falschen Schaltkreis" blinkt, wenn eine Übertragung läuft, weil die LED immer noch umgeschaltet ist, richtig? Allerdings finde ich das zu schnell, als dass man es mit bloßem Auge sehen könnte (zB 9600 kHz).

Mein Vorschlag zur Lösung dieses Problems ist die folgende Schaltung. Es ist im Grunde ein Spannungsfolger (nicht invertierender Verstärker mit einer Verstärkung von 1), aber der Ausgang ist mit der LED-Schaltung verbunden, die an 5 V angeschlossen ist. Dies führt dazu, dass Strom durch die Lampe fließt, sobald der Eingang negativ ist .

UART-LED-Schaltpläne.

Laut LTSpice fließt Strom nur durch die LED, wenn eine Übertragung läuft (Sie sehen dies als "längeren EIN-Zustand", wenn Übertragungen andauern). Wenn es eine kleine Pause zwischen ein paar Übertragungen gibt, sehen Sie etwas blinken (LED erlischt).

UART-LED-Simulation.

Meine Schaltung baue ich auf einem Board für I2C und UART auf. I2C, den ich ebenfalls simuliert habe, sieht man nur längere Übertragungen oder wenn der Bus korrupt ist (was auch schön ist). Kannst du dir gerne anschauen: github.com/m3x1m0m/UppSense2017/blob/master/pcbs/backplane/… Bei deiner Schaltung könnte die LED auch blinken, aber sie leuchtet ständig, wenn keine Übertragung stattfindet, weil UART HIGH ist im Ruhemodus.

@Chetan Bhargava Ihre Schaltung wird immer eingeschaltet sein. Weil UART im Leerlaufmodus HIGH ist. Um dieses Problem zu vermeiden, ändern Sie bitte die Richtung der LEDs. Wie im Bild unten gezeigt.

Geben Sie hier die Bildbeschreibung ein

Ich denke, das wird funktionieren

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan