Wie funktioniert serielle TTL-Arbeit?

15

Ich habe versucht, eine gute Beschreibung des TTL-Serie „Standard“ ohne viel Glück zu finden. Ich verstehe, dass seriellen Sende- (TX) und Empfangs- (RX) Leitungen frei hoch (VCC), und dass sie zu Boden fallen, wenn ein Bit übertragen wird. Als solche sind sie von der Norm umgekehrt, wobei eine „1“ hoch ist, und „0“ ist gering.

Was ich nicht verstehe, ist, die zum Halten der Leitung hoch verantwortlich ist und wie eine Null übertragen. Hat der Absender die Linie hoch und niedrig fahren? Oder hält der Empfänger die Linie hoch und ist mit dem Sender Ziehen der Leitung niedrig (open collector)?

Blalor
quelle
Lies die Antwort von Joby. anscheinend war alles, was ich zu wissen glaubte, invertiert. :-)
blalor
Real RS232 ist andersrum 0 = 12 V, 1 = -12 V, das ist , warum es verwirrend
Toby Jaffey
2
Point - of - Terminologie: „TTL serial“ ist ein stark über weit gefassten Begriff „(Punkt-zu-Punkt) asynchrone serielle Schnittstelle (mit TTL - Pegel)“ scheint zu sein , was Sie fragen zu. (Obwohl das ist noch fehlt wahrscheinlich, aber zumindest besser)
Nick T
3
@ Nick Die Art der OP Mittel , was auch immer in einen MAX232 zugeführt wird, würde ich das „RS232 auf TTL - Pegel“ nennen
Toby Jaffey
2
@Joby - Wenn er nur Tx und Rx verwendet, und Sie auch die Ebene entfernen, dann gibt es nichts mehr RS232 darüber! Nennen Sie es UART.
stevenvh

Antworten:

17

Bei serieller TTL gibt es zwei unidirektionale Datenleitungen. Jeder wird vom Absender gesteuert, sowohl hoch als auch niedrig. Ein 0-Bit wird durch 0 V und ein 1-Bit durch VCC dargestellt.

Der Stift des Empfängers sollte mit einem Eingang eingestellt werden.

Also, für einen Mikrocontroller ein Byte (8-N-1 keine Datenflusskontrolle) senden könnte es so etwas tun:

#define BAUDRATE 9600
#define DELAY (SYS_CLK/BAUDRATE)

#define UART_BITBANG_OFF     UART_BITBANG_PORT |= _BV(UART_BITBANG_PIN)
#define UART_BITBANG_ON      UART_BITBANG_PORT &= ~ _BV(UART_BITBANG_PIN)

#define UART_BITBANG_BIT(bit) {if (bit) UART_BITBANG_ON; else UART_BITBANG_OFF; _delay_us(DELAY);}

void uart_bitbang_init(void)
{
    UART_BITBANG_DDR &= ~ _BV(UART_BITBANG_PIN);        // TX output
}

void uart_bitbang_putc(uint8_t c)
{
    UART_BITBANG_BIT(1)
    UART_BITBANG_BIT((c & 0x1) == 0);
    UART_BITBANG_BIT((c & 0x2) == 0);
    UART_BITBANG_BIT((c & 0x4) == 0);
    UART_BITBANG_BIT((c & 0x8) == 0);
    UART_BITBANG_BIT((c & 0x10) == 0);
    UART_BITBANG_BIT((c & 0x20) == 0);
    UART_BITBANG_BIT((c & 0x40) == 0);
    UART_BITBANG_BIT((c & 0x80) == 0);
    UART_BITBANG_BIT(0);
}

(Dieser Code liest ein bisschen nach hinten, wie es ursprünglich für invertierte TTL Serien gemeint war)

Natürlich sind die meisten MCUs haben Hardware UARTs, die dies alles für Sie tun.

Hier ist, was Sie für einen Bereich sehen würde:

https://www.pololu.com/docs/0J25/4.a

Hier ist eine große Video von ladyada erklären serial: http://www.adafruit.com/blog/2010/09/15/usb-serial-and-you-video-an-adafruit-after-school-special/

Toby Jaffey
quelle
Danke, Joby. Also, obwohl die Leitung im Leerlauf hoch ist, ist ein 0-Bit immer noch 0V. Hat der Empfänger typischerweise eine interne Pull-up auf der RX - Leitung, so dass es schwimmt nicht?
blalor
@blalor die Linie nicht schweben, der Absender es fährt (vorausgesetzt , die beiden Enden verbunden sind)
Toby Jaffey
Arduino NewSoftSerial ermöglicht die interne Pull-up des AVR auf dem RX - Pin. Ich gehe davon aus, dass dies erforderlich ist , wenn kein Absender angeschlossen ist. Danke für die Infos und den hinzugefügten Adafruit-Link.
blalor
1
Sein etwas pedantisch, aber nicht „TTL“ nur Ebenen bedeuten? Sie beschreiben eine serielle Punkt-zu-Punkt-Verbindung, aber könnte es auch eine Multi-Master-Topologie mit Open-Collector-Treibern und einem Pullup sein (wie LIN, aber mit TTL-Pegeln)? „TTL serial“ scheint wie ein unglaublich weit gefasster Begriff, ohne einen Kontext fast nutzlos.
Nick T
1
Es ist nur die Standard - serielle Schnittstelle mit den Spannungswandlern entfernt.
Starblue
8

Sie sagen nicht in so vielen Worten, aber das "Leerlaufhoch" legt nahe, dass Sie einen UART meinen. UARTs sind Punkt-zu-Punkt- Verbindungen zu Line-Transceivern wie dem allgegenwärtigen, aber datierten MAX232 (es gibt heutzutage weitaus bessere Lösungen). Die Linie zwischen Mikrocontroller und Transceiver wird auch kurz sein; Wenn es Entfernung überbrückt wird es zwischen Transceiver sein.
Der Ausgang des Controller ist ein Push-Pull.

Bildbeschreibung hier eingeben

Der P-MOSFET wird den hohen Pegel bereitzustellen, der N-MOSFET dem niedrigen Pegel. Einer von ihnen muss aktiv sein, sonst würde der Leitungspegel schweben und undefiniert sein (oder durch eine Last im Transceiver definiert werden). Beide sind in der Lage, etwas Strom zu beziehen / abzuleiten und ziehen die Leitung auf die Schienen, so dass die Signalform nahezu ideal ist.
Die anders wäre , wenn es wirklich TTL ist, wie es in Ihrer Frage (der Mikrocontroller ist HCMOS). TTL - Ausgänge sind stark asymmetrisch: sie können nur wenig Strom liefern, typischerweise 0,4 mA. Die Stromaufnahme ist mit 8 mA in Ordnung. Der niedrige Source - Strom kann ein Problem sein , wenn die Leitung eine hohe Kapazität aufweist und mit hohen Geschwindigkeit. Der niedrige Treiberstrom bedeutet, dass die Kapazität nur relativ langsam aufgeladen wird und ansteigende Flanken langsam sind, was bei hoher Geschwindigkeit zu ernsthaften Signalverzerrungen führen kann. TTL wird dafür nie verwendet.

Ihre Frage könnte auch auf eine verweisen Multidrop - Leitung , wo mehrere Geräte sprechen können. In diesem Fall können Sie die Push-Pull - Ausgang verwenden: Wenn ein Gerät die Linie hoch , während andere Antriebe fahren würde es niedrig würden wir einen Kurzschluss haben. Multidrop - Linien verwenden fast immer Pull-up - Widerstände die Leitung frei hoch zu halten. Dann nur ein niedriges Niveau erfordert Antrieb der Linie, und anstelle des Push-Pull - Ausgang werden wir einen Open-Drain haben, nur mit dem N-MOSFET. Der Pull-up - Widerstand kann nur liefern wenig Strom, während die Pull-Down - FET die Linie schnell zu Boden fahren kann: Die Linie wird nun auch asymmetrisch angesteuert. High - Speed Multi - Drop Linien stellen daher eine Grenze für die Pull-up - Widerstände. Ein Beispiel hierfür ist I2C.

stevenvh
quelle
„die allgegenwärtige , aber veraltet MAX232 (es gibt viel bessere Lösungen heute)“ Könnten Sie einige Beispiele nennen?
m.Alin
3
@ m.Alin - Maxim sagt : „Viele Board - Designer noch die MAX232 verwenden heute, trotz der Tatsache , dass Single-Supply - Geräte umfangreich sowohl Verbesserungen im Laufe der Jahre haben.“. Liste der Transceiver
stevenvh