TTL सीरियल कैसे काम करता है?


15

मैं बहुत भाग्य के बिना TTL धारावाहिक "मानक" का एक अच्छा वर्णन खोजने की कोशिश कर रहा हूं। मैं समझता हूं कि धारावाहिक प्रसारित (TX) और प्राप्त (RX) लाइनें निष्क्रिय (उच्च VCC पर) होती हैं और जब वे थोड़ा सा प्रसारित होते हैं तो वे जमीन पर गिर जाते हैं। जैसे, वे आदर्श से उलटे हैं, जहां "1" उच्च है और "0" कम है।

मुझे समझ में नहीं आता है कि लाइन को ऊंचा रखने के लिए कौन जिम्मेदार है और एक शून्य कैसे प्रसारित होता है। क्या प्रेषक उच्च और निम्न रेखा को चलाता है? या क्या रिसीवर लाइन को कम खींचने वाले (ओपन कलेक्टर) के साथ रिसीवर को उच्च रखता है?


जॉबी का जवाब पढ़ें; जाहिरा तौर पर सब कुछ मुझे लगा कि मुझे पता था कि उलटा था। :-)
ब्लरोर

असली RS232 0 = 12v, 1 =
-12v के

2
शब्दावली का बिंदु: "टीटीएल धारावाहिक" एक गंभीर रूप से अधिक व्यापक शब्द है, "(बिंदु-से-बिंदु) अतुल्यकालिक धारावाहिक (टीटीएल स्तरों पर)" लगता है कि आप किस बारे में पूछ रहे हैं। (हालांकि यह अभी भी कमी है, लेकिन कम से कम बेहतर है)
निक टी

3
@ क्लिक करें ओपी का मतलब है जो कुछ भी एक MAX232 में खिलाया जाता है, मुझे लगता है कि "
टीएसएल

2
@ जॉबी - यदि वह केवल टीएक्स और आरएक्स का उपयोग करता है, और आप इसके स्तर को भी हटा देते हैं, तो इसके बारे में आरएस 232 और कुछ भी नहीं है! इसे UART कहें।
स्टीवन्वह

जवाबों:


17

TTL सीरियल के साथ, दो यूनिडायरेक्शनल डेटा लाइनें हैं। प्रत्येक प्रेषक द्वारा संचालित होता है, दोनों उच्च और निम्न। एक 0 बिट VV द्वारा 0V को 1 बिट द्वारा दर्शाया गया है।

रिसीवर का पिन एक इनपुट पर सेट होना चाहिए।

तो, एक माइक्रोकंट्रोलर के लिए एक बाइट (8-N-1 नो फ्लो कंट्रोल) भेजने के लिए यह कुछ ऐसा कर सकता है:

#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);
}

(यह कोड थोड़ा पीछे की ओर पढ़ता है क्योंकि यह मूल रूप से उल्टे TTL धारावाहिक के लिए था)

बेशक, ज्यादातर MCU में हार्डवेयर UART होते हैं जो आपके लिए यह सब करते हैं।

यहाँ वह है जो आप एक दायरे में देखेंगे:

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

यहाँ पर धारावाहिक की व्याख्या करने वाली लेडीदा का एक शानदार वीडियो है: http://www.adafruit.com/blog/2010/09/15/usb-serial-and-you-video-an-adafruit-after-school-special/


धन्यवाद, जॉबी। तो भले ही रेखा ऊँची हो, एक 0 बिट अभी भी 0v है। क्या रिसीवर के पास आमतौर पर आरएक्स लाइन पर एक आंतरिक पुल-अप होता है, ताकि यह फ्लोट न हो?
ब्लॅलर

@blalor लाइन फ्लोट नहीं होगी, प्रेषक इसे चला रहा है (यह मानते हुए कि दोनों छोर जुड़े हुए हैं)
Toby Jaffey

Arduino का NewSoftSerial RX पिन पर AVR के आंतरिक पुल-अप को सक्षम करता है। यदि कोई अटैच किया हुआ प्रेषक नहीं है, तो मुझे इसकी आवश्यकता है। जानकारी के लिए धन्यवाद, और जोड़ा Adafruit लिंक।
ब्लेलर

1
कुछ हद तक पांडित्यपूर्ण, लेकिन "टीटीएल" का मतलब केवल स्तर नहीं है? आप एक पॉइंट-टू-पॉइंट सीरियल लिंक का वर्णन करते हैं, लेकिन क्या यह केवल खुले कलेक्टर ड्राइवरों और एक पुलअप (जैसे लिन लेकिन टीटीएल स्तरों के साथ) के साथ एक बहु-मास्टर टोपोलॉजी हो सकता है? "टीटीएल सीरियल" एक अविश्वसनीय रूप से व्यापक शब्द की तरह लगता है जो कुछ संदर्भ के बिना लगभग बेकार है।
निक टी।

1
यह वोल्टेज कन्वर्टर्स को हटाने के साथ सिर्फ मानक सीरियल पोर्ट इंटरफ़ेस है।
starblue

8

आप इतने सारे शब्दों में नहीं कहते हैं, लेकिन "निष्क्रिय उच्च" आपको एक UART से मतलब है। UARTs लाइन-ट्रांसेवर्स से जुड़े पॉइंट-टू-पॉइंट , सर्वव्यापी लेकिन दिनांकित MAX232 की तरह है (आजकल कहीं बेहतर समाधान हैं)। माइक्रोकंट्रोलर और ट्रांसीवर के बीच की रेखा भी छोटी होगी; अगर वहाँ दूरी होने के लिए यह transceivers के बीच होगा।
कंट्रोलर का आउटपुट एक पुश-पुल है।

यहाँ छवि विवरण दर्ज करें

P-MOSFET उच्च स्तर प्रदान करेगा, N-MOSFET निम्न स्तर। उनमें से एक को सक्रिय होना चाहिए या लाइन स्तर तैरता रहेगा और अपरिभाषित (या ट्रांसीवर में लोड द्वारा परिभाषित) होना चाहिए। दोनों कुछ करंट को स्रोत / सिंक करने में सक्षम हैं और रेल को रेखा तक खींच देंगे, इसलिए सिग्नल का आकार लगभग आदर्श होगा।
अगर यह वास्तव में TTL था, तो अलग होगा, जैसा कि आपके प्रश्न में (माइक्रोकंट्रोलर HCMOS है)। टीटीएल आउटपुट अत्यधिक विषम हैं: वे केवल थोड़ा वर्तमान, आमतौर पर 0.4mA की आपूर्ति कर सकते हैं। 8mA पर वर्तमान में डूबना ठीक है। यदि लाइन में उच्च समाई है और उच्च गति है तो निम्न स्रोत करंट समस्या हो सकती है। कम ड्राइव करंट का मतलब है कि कैपेसिटेंस केवल अपेक्षाकृत धीमी गति से चार्ज होगा, और बढ़ते किनारे धीमे होंगे, जो उच्च गति पर गंभीर विकृति का कारण बन सकता है। इसके लिए TTL का उपयोग कभी नहीं किया जाता है।

आपका प्रश्न एक मल्टीड्रॉप लाइन को भी संदर्भित कर सकता है , जहां कई डिवाइस बात कर सकते हैं। उस स्थिति में आप पुश-पुल आउटपुट का उपयोग नहीं कर सकते हैं: यदि एक डिवाइस लाइन को उच्च ड्राइव करेगा जबकि दूसरा ड्राइव कम होगा तो हमारे पास शॉर्ट-सर्किट होगा। मल्टीड्रॉप लाइनें लगभग हमेशा पुल-अप प्रतिरोधों का उपयोग करती हैं ताकि लाइन को अधिक ऊंचा रखा जा सके। तब केवल निम्न स्तर के लिए लाइन ड्राइविंग की आवश्यकता होती है, और पुश-पुल आउटपुट के बजाय हमारे पास एक खुला-नाली होगा, जिसमें केवल N-MOSFET होगा। लाइन को अब विषम रूप से भी संचालित किया जाता है: पुल-अप रोकनेवाला केवल थोड़ा वर्तमान प्रदान कर सकता है, जबकि पुल-डाउन FET लाइन को तेजी से जमीन पर चला सकता है। इसलिए हाई स्पीड मल्टीड्रॉप लाइनें पुल-अप रेसिस्टर्स की एक सीमा रखती हैं। एक उदाहरण I2C है।


"सर्वव्यापी लेकिन दिनांकित MAX232 (आजकल कहीं बेहतर समाधान हैं)" क्या आप कुछ उदाहरण दे सकते हैं?
m.Alin

3
@ m.Alin - मैक्सिम कहते हैं : "कई बोर्ड डिज़ाइनर आज भी MAX232 का उपयोग करते हैं, इस तथ्य के बावजूद कि एकल-आपूर्ति उपकरणों में पिछले कुछ वर्षों में व्यापक सुधार हुए हैं।" ट्रांससीवर्स की सूची
स्टीवन्वह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.