Bagaimana cara kerja serial TTL?

15

Saya sudah mencoba menemukan deskripsi yang baik dari serial TTL "standar" tanpa banyak keberuntungan. Saya mengerti bahwa serial mentransmisikan (TX) dan menerima (RX) baris idle high (at VCC) dan bahwa mereka jatuh ke tanah ketika sedikit ditransmisikan. Dengan demikian, mereka terbalik dari norma, di mana "1" tinggi dan "0" rendah.

Apa yang saya tidak mengerti adalah siapa yang bertanggung jawab untuk memegang garis tinggi dan bagaimana nol ditransmisikan. Apakah pengirim mengarahkan saluran ke tinggi dan rendah? Atau apakah penerima memegang garis tinggi dengan pengirim menarik garis rendah (kolektor terbuka)?

blalor
sumber
Baca jawaban Ayub; ternyata semua yang saya pikir saya tahu terbalik. :-)
blalor
RS232 nyata adalah sebaliknya 0 = 12v, 1 = -12v, itu sebabnya membingungkan
Toby Jaffey
2
Titik terminologi: "Serial TTL" adalah istilah yang terlalu luas, "(point-to-point) serial asinkron (pada level TTL)" tampaknya seperti yang Anda tanyakan. (Meskipun itu mungkin masih kurang, tetapi setidaknya lebih baik)
Nick T
3
@Nick Jenis OP artinya adalah apa pun yang dimasukkan ke dalam MAX232, saya akan menyebutnya "RS232 di level TTL"
Toby Jaffey
2
@Joby - Jika dia hanya menggunakan Tx dan Rx, dan Anda juga menghapus levelnya, maka tidak ada RS232 lagi tentang itu! Sebut saja UART.
stevenvh

Jawaban:

17

Dengan serial TTL, ada dua jalur data searah. Masing-masing digerakkan oleh pengirim, baik tinggi maupun rendah. 0 bit diwakili oleh 0V 1 bit oleh VCC.

Pin penerima harus diatur ke input.

Jadi, bagi mikrokontroler untuk mengirim byte (8-N-1 tanpa kontrol aliran) dapat melakukan sesuatu seperti ini:

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

(Kode ini sedikit terbaca karena aslinya dimaksudkan untuk serial TTL terbalik)

Tentu saja, sebagian besar MCU memiliki UART perangkat keras yang melakukan semua ini untuk Anda.

Inilah yang akan Anda lihat pada cakupan:

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

Berikut video hebat dari ladyada yang menjelaskan serial: http://www.adafruit.com/blog/2010/09/15/usb-serial-and-you-video-an-adafruit-after-school-special/

Toby Jaffey
sumber
Terima kasih, Joby. Jadi meskipun garis idle tinggi, 0 bit masih 0v. Apakah penerima biasanya memiliki pull-up internal pada saluran RX, sehingga tidak melayang?
blalor
@bloror garis tidak akan mengambang, pengirim mengendarainya (dengan asumsi kedua ujungnya terhubung)
Toby Jaffey
NewSoftSerial Arduino memungkinkan penarikan internal AVR pada pin RX. Saya menganggap ini adalah diperlukan jika tidak ada pengirim terpasang. Terima kasih atas informasinya, dan tautan Adafruit yang ditambahkan.
blalor
1
Menjadi agak bertele-tele, tetapi bukankah "TTL" hanya menyiratkan level? Anda menggambarkan tautan serial point-to-point, tetapi mungkinkah ini juga merupakan topologi multi-master dengan driver kolektor terbuka dan pullup (seperti LIN tetapi dengan level TTL)? "TTL serial" sepertinya istilah yang sangat luas yang hampir tidak berguna tanpa konteks.
Nick T
1
Ini hanya antarmuka port serial standar dengan konverter tegangan dilepas.
starblue
8

Anda tidak mengatakan banyak kata, tetapi "idle high" menunjukkan bahwa Anda bermaksud UART. UART adalah point-to-point yang terhubung ke line-transceiver, seperti MAX232 yang ada di mana-mana tetapi bertanggal (ada solusi yang jauh lebih baik saat ini). Garis antara mikrokontroler dan transceiver juga akan pendek; jika ada jarak yang harus dijembatani maka akan berada di antara transceiver.
Output pengendali adalah push-pull.

masukkan deskripsi gambar di sini

P-MOSFET akan memberikan level tinggi, N-MOSFET level rendah. Salah satunya harus aktif atau level garis akan mengambang dan tidak terdefinisi (atau ditentukan oleh beban dalam transceiver). Keduanya dapat sumber / menenggelamkan beberapa arus dan akan menarik garis ke rel, sehingga bentuk sinyal hampir ideal.
Yang akan berbeda jika itu benar-benar TTL, seperti dalam pertanyaan Anda (mikrokontroler adalah HCMOS). Output TTL sangat asimetris: mereka hanya dapat memasok sedikit arus, biasanya 0,4mA. Tenggelam saat ini OK, pada 8mA. Sumber arus yang rendah mungkin menjadi masalah jika saluran memiliki kapasitansi tinggi dan kecepatan tinggi. Arus drive rendah berarti kapasitansi hanya akan mengisi daya secara relatif lambat, dan tepi yang naik akan lambat, yang pada kecepatan tinggi dapat menyebabkan distorsi sinyal yang serius. TTL tidak pernah digunakan untuk ini.

Pertanyaan Anda juga dapat merujuk ke saluran multidrop , tempat beberapa perangkat dapat berbicara. Dalam hal ini Anda tidak dapat menggunakan output push-pull: jika satu perangkat akan mendorong saluran tinggi sementara yang lain mendorong rendah, kami akan mengalami korsleting. Garis multidrop hampir selalu menggunakan resistor pull-up untuk menjaga garis tetap tinggi. Maka hanya level rendah yang membutuhkan garis penggerak, dan alih-alih output push-pull kita akan memiliki saluran terbuka, hanya dengan N-MOSFET. Jalur sekarang juga didorong secara asimetris: resistor pull-up hanya dapat memberikan sedikit arus, sedangkan FET pull-down dapat mendorong garis cepat ke ground. Oleh karena itu, saluran multidrop kecepatan tinggi membatasi resistor pull-up. Contohnya adalah I2C.

stevenvh
sumber
"MAX232 di mana-mana tetapi bertanggal (ada solusi yang jauh lebih baik saat ini)" Bisakah Anda memberikan beberapa contoh?
m. Setiap
3
@ m.Alin - Says Maxim : "Banyak desainer papan masih menggunakan MAX232 hari ini, terlepas dari kenyataan bahwa perangkat pasokan tunggal telah mengalami peningkatan ekstensif selama bertahun-tahun.". Daftar transceiver
stevenvh