Saya tidak punya UART di mikrokontroler saya jadi bagaimana saya bisa menambahkannya?

13

Saya menggunakan mikrokontroler ATMEGA32HVB yang memiliki fasilitas untuk menyeimbangkan sel dimana kita dapat menghubungkan 4 baterai secara seri dan menggunakan satu per satu. Itu sangat berguna untuk manajemen daya jadi saya tidak bisa menggunakan mikrokontroler yang berbeda. Tolong sarankan beberapa metode untuk menambahkan UART sehingga saya dapat dengan mudah antarmuka ke perangkat serial.

pengguna27475
sumber
11
Cara perangkat lunak UART seperti yang dijelaskan oleh user26129 disebut bit-banging .
Johan.A
4
Hanya $ 0,02 saya yang sangat subyektif, tapi saya biasanya lebih suka pengontrol baterai khusus yang terpisah dan UART yang terintegrasi uC daripada sebaliknya. Mengapa Anda perlu manajemen baterai terintegrasi di UC?
Mels
Saya harus menggunakan baterai isi ulang yang akan diisi menggunakan panel surya jadi saya perlu 4 battries di seri yang akan digunakan satu per satu
user27475
4
Satu pertanyaan adalah seberapa besar Anda ingin menggunakan UART, dan ke arah mana. Jika Anda hanya ingin membuat pesan status atau debug sesekali, pada saat prosesor Anda tidak di bawah banyak permintaan tambahan, keluaran serial bit banging terlihat sangat menarik. Ada tanda centang seperti menggunakan interupsi perubahan pin yang dapat mengurangi beban rata-rata memiliki saluran input juga, tetapi jika Anda berharap untuk menerima karakter pada kecepatan baud yang tinggi pada saat Anda memiliki komitmen waktu nyata lainnya, itu mungkin sebuah isu.
Chris Stratton

Jawaban:

17

Seperti yang telah dicatat orang lain, Anda dapat menambahkan perangkat keras tambahan ke sistem Anda untuk menyediakan fungsionalitas UART, atau Anda dapat meniru satu di perangkat lunak. Jika Anda memiliki kendali atas desain perangkat keras secara keseluruhan dan menambahkan IC lain adalah sebuah pilihan, saya akan sangat mempertimbangkan pendekatan berbasis perangkat keras. Anda tentu saja dapat membuat perangkat lunak UART berfungsi menggunakan bit-banging , tetapi Anda mungkin tidak ingin mendedikasikan sumber daya CPU untuk menghasilkan pengaturan waktu yang diperlukan.

Dari sekilas pada lembar data, nampak bahwa mikrokontroler Anda memiliki SPI dan I2C (yang oleh Atmel disebut Two-Wire Interface (TWI)). Ini mungkin akan menjadi antarmuka terbaik untuk digunakan untuk melampirkan UART eksternal. Perangkat tersebut tersedia dari sejumlah produsen. Beberapa contoh:

  • Exar ( http://www.exar.com/connectivity/uart-and-bridging-solutions/i2c-spi-uarts ) memiliki lini perangkat SPI / I2C 1- dan 2 saluran UART yang tersedia, yang mencakup ~ 1.6- Rentang operasi 3.3V. Saya belum pernah menggunakan bagian-bagian ini secara khusus, tetapi saya telah menggunakan perangkat Exar di masa lalu (dengan antarmuka memori-bus paralel), dan mereka telah bekerja dengan baik.

  • NXP ( http://ics.nxp.com/products/bridges/i2c.spi.slave.uart.irda.gpio/ ) memiliki garis perangkat SPI / I2C UART / IrDA / GPIO yang tersedia, juga dalam 1- dan 2 - Varietas saluran pada rentang tegangan pasangan. Saya telah menggunakan bagian-bagian ini (khususnya SC16IS762) secara luas di masa lalu dengan sukses besar.

  • Maxim ( http://www.maximintegrated.com/datasheet/index.mvp/id/2052 ) memiliki perangkat MAX3110E dan MAX3111E, yang merupakan UART yang terhubung dengan SPI. Salah satu fitur unik dari perangkat ini adalah bahwa mereka memiliki driver garis RS-232 terintegrasi. Jadi, jika Anda memerlukan UART untuk antarmuka ke perangkat yang menggunakan voltase saluran RS-232 alih-alih level logika (misalnya PC), ini mungkin berguna, karena itu akan menyelamatkan Anda dari menambahkan IC driver jalur lain ke board Anda.

Jason R
sumber
Wow, tidak pernah tahu Maxim memiliki barang-barang itu, akan +2 jika aku bisa.
Tevo D
8

Anda harus menggunakan driver perangkat lunak UART. Bergantung pada apa yang Anda harapkan dari UART ini, Anda dapat menggunakan AVR305 (sangat kompak, tetapi tidak ada fitur di luar memblokir setengah dupleks mengirim / menerima), AVR274 (interrupt driven, cukup fitur lengkap), Anda dapat menulis perangkat lunak Anda sendiri driver UART atau Anda dapat menggunakan yang Anda temukan di internet, misalnya dengan googling 'avr software uart'

pengguna36129
sumber
3

Catatan singkat tentang perancangan "UART" perangkat lunak: setidaknya ada beberapa pendekatan yang berbeda secara kualitatif yang dapat diambil, tergantung pada persyaratan:

  • Driver bit-bang "take over everything" akan menonaktifkan semua interupsi dan menggunakan kode siklus untuk menghitung setiap bit. Menerima data dengan driver "take over everything" mensyaratkan bahwa ketika data tiba controller tidak melakukan apa-apa selain menunggunya.

  • Pengandar bit-bang "take over main loop" akan berperilaku seperti di atas kecuali bahwa itu akan menggunakan sumber daya pengatur waktu untuk pengaturan waktu bit daripada menghitung siklus. Gangguan yang tidak memakan waktu terlalu lama untuk layanan dapat dibiarkan diaktifkan. Untuk transmisi serial, sumber daya timer tingkat tetap dapat digunakan bersama dengan tujuan lain; untuk penerimaan serial, bagaimanapun, driver bit-bang harus dapat memuat ulang timer ketika bit mulai tiba sehingga membuatnya berakhir di tengah setiap waktu bit yang masuk.

  • Pengandar bit-bang yang digerakkan sepenuhnya-interrupt menggunakan timer tingkat-tetap yang berjalan pada beberapa kelipatan data lebih disukai (3x dan 5x keduanya lebih baik dari 4x), dan melakukan semuanya melalui timer itu. Driver seperti itu dapat berjalan secara simultan dengan yang lainnya, tetapi akan membutuhkan CPU yang lebih cepat daripada tipe driver sebelumnya.

Untuk menghindari dua gaya pengontrol pertama menunggu selamanya untuk data yang mungkin tidak pernah datang, itu biasa bagi rutinitas baca untuk memasukkan nilai batas waktu. Perhatikan bahwa jika loop pengontrol melakukan mis. "Dapatkan byte sambil menunggu hingga 100 ms untuk itu, lakukan beberapa hal lain jika tidak ada yang datang, lalu dapatkan byte berikutnya, dll." dan satu byte tiba di antara waktu "get" time out rutin dan controller mulai menunggu lagi, byte itu akan hilang; perangkat yang berkomunikasi dengannya harus mengharapkan kemungkinan itu.

Hanya driver gaya ketiga yang dapat menangani kemungkinan byte data mulai berdatangan saat byte data sedang dikirim. Dua gaya pertama dapat, bagaimanapun, digunakan untuk beberapa protokol komunikasi full-duplex kecepatan penuh jika controller hanya perlu berbicara ketika diajak bicara. Triknya adalah memiliki rutin "baca dan tulis data" yang akan menunggu bit masuk yang masuk, dan ketika seseorang terdeteksi tumpang tindih dengan baca dan tulis sehingga pengontrol mengirim setiap bit sama seperti saat akan memeriksa data yang masuk. Setelah pengontrol mendeteksi bit awal yang masuk, ia akan tahu persis kapan ia akan mencari 8 bit data berikutnya dan menghentikan bit, dan dengan demikian akan tahu bahwa ia dapat dengan aman menggunakan waktu antara untuk menampilkan data sendiri.

Satu catatan perpisahan: pengontrol yang menggunakan salah satu dari dua gaya pertama bit-bang uart untuk menerima data harus memproses setiap byte data sebelum tepi jatuh dari bit awal byte berikutnya untuk menghindari kehilangan data. Jika pengontrol mengetahui bahwa pemrosesan akan memakan waktu setidaknya setengah waktu, itu dapat memaksimalkan waktu yang tersedia untuk pemrosesan dengan menerima setiap byte segera setelah ia mengambil bit data terakhir, daripada menunggu bit berhenti. Akan tetapi, sebagai cara lebih lanjut untuk memberi pengontrol lebih banyak waktu, mungkin akan membantu jika perangkat yang memberikannya mentransmisikan data dengan dua bit stop daripada satu. Jika "mark parity" dapat dikonfigurasi, itu akan menambah waktu bit tambahan lainnya. Transmisi pada mis. 115200-8-M-2 akan memungkinkan waktu pemrosesan lebih dari 57600-8-N-1, meskipun itu akan memberi makan data lebih dari 1,6 kali lebih cepat.

supercat
sumber
1

Anda cukup menggunakan pin I / O dari UC. Satu-satunya hal ketika beralih atau mentransfer data pada pin ini, Anda harus memiliki frekuensi pin ganda ke baud rate. Beginilah cara kerja normal UART, ia akan mengambil sampel sinyal bit di tengah.

nitin
sumber