Dalam beberapa perangkat ADC / DAC, mereka adalah opsi untuk menampilkan / memasukkan data dalam formulir Komplemen 2.
Apa keuntungan dari merepresentasikan data digital dalam bentuk Komplemen Dua Saat Anda dapat memiliki kode biner langsung dan menghemat waktu konversi?
Jawaban:
Representasi pujian dua dari bilangan bulat yang ditandatangani mudah dimanipulasi dalam perangkat keras. Misalnya, negasi (yaitu x = -x ) dapat dilakukan hanya dengan membalik semua bit dalam angka dan menambahkannya. Melakukan operasi yang sama dalam biner mentah (misalnya dengan bit tanda) biasanya melibatkan lebih banyak pekerjaan, karena Anda harus memperlakukan bit tertentu dalam aliran sebagai spesial. Hal yang sama berlaku untuk penambahan - operasi penambahan untuk angka negatif identik dengan operasi penambahan untuk angka positif, jadi tidak ada logika tambahan (tidak ada permainan kata-kata) yang diperlukan untuk menangani kasus negatif.
Meskipun ini tidak berarti lebih mudah dari sudut pandang Anda, sebagai konsumen data ini, itu mengurangi upaya desain dan kompleksitas perangkat, sehingga mungkin membuatnya lebih murah.
sumber
ADC dapat mengonversi data (katakanlah tegangan input antara 0 dan 5V) dan Anda juga memerlukan data tersebut tidak ditandatangani (0V = 0, 5V = kode maks) atau ditandatangani (2.5V = 0, 0V = maks -ve, 5V = maks + ve).
Selain komplemen 2 yang menjadi representasi komputer paling umum untuk data yang ditandatangani, konversi antara dua format yang dijelaskan di atas benar-benar sepele: cukup membalikkan MSB!
Ini sangat murah untuk ditambahkan ke logika internal ADC dan memberi ADC titik penjualan lain pada lembar data ...
sumber
Jika Anda perlu melakukan matematika pada representasi bilangan negatif, dua komplemen membuatnya lebih mudah daripada mengimbangi biner, yang akan cocok dengan tipe data "masuk int". Kompiler Anda hanya akan tahu cara menghadapinya. Jika tidak, Anda menghabiskan kutu waktu untuk mengonversi bolak-balik.
sumber
Dalam pertanyaan, tampaknya tersirat bahwa ADC membutuhkan waktu lebih lama untuk mengembalikan nilai dalam bentuk komplemen 2 daripada dalam biner lurus. Meskipun ini mungkin terjadi dalam beberapa implementasi ADC tertentu, itu tidak benar secara umum (misalnya seri MSP430 pengendali mikro memiliki chip on-chip ADC yang akan melaporkan nilai dalam biner lurus atau pelengkap 2, tetapi itu mengambil jumlah siklus yang sama dalam kedua kasus).
Dengan itu, pilihan antara komplemen 2 dan biner lurus sebagian besar tergantung pada bagaimana transduser Anda bekerja dan bagaimana Anda ingin memproses data Anda.
Dalam mode biner lurus, ADC memberi Anda angka yang mewakili rasio antara besarnya kuantitas analog yang diukur (hampir selalu bertegangan) dan kuantitas referensi skala penuh. Misalnya, ADC 10-bit dapat mengembalikan nilai dari 0 hingga 1023 (inklusif). Jika Anda mengukur tegangan (katakanlah, 1,25 Volt) yang merupakan setengah dari tegangan referensi ADC (katakanlah, 2,50 Volt), kode biner yang Anda baca akan menjadi setengah dari nilai maksimum yang dapat Anda baca - jadi, 512, atau sekitar itu, tunduk pada pembulatan dan non-linearitas di ADC.
Sebagai contoh, katakanlah Anda memiliki transduser yang melaporkan jumlah bahan bakar roket di tangki. 0V berarti tangki kosong dan 2.5V Volts berarti penuh. Jadi Anda hanya menghubungkan transduser ke ADC Anda, dan pergilah!
Tetapi perhatikan bahwa dalam paragraf di atas, tidak ada cara untuk mengukur tegangan negatif. Bagaimana jika kita ingin mengukur aliran bahan bakar roket masuk dan keluar dari tangki (dan kita memiliki transduser untuk melakukannya)? ADC tidak dapat mengukur angka negatif, jadi kami memiliki masalah. Namun, ada cara mudah untuk memalsukannya menggunakan mode komplemen 2's: Dalam hal ini, output transduser bias kembali sehingga titik nol berada di antara dua tegangan referensi ADC. Dengan kata lain, aliran positif diwakili oleh tegangan antara 1.25V dan 2.50V, dan aliran negatif diwakili oleh 1.25V ke 0V - jadi aliran ke tangki akan memberikan kode ADC 512 hingga 1023 dan mengalir keluar dari ucapan terima kasih akan memberikan kode 511 hingga 0 (dalam format biner lurus).
Nah, itu sangat merepotkan. Kita harus mengurangi 512 dari setiap pengukuran sebelum melakukan sesuatu dengannya, yang memberikan angka pada rentang -512 hingga +511. Inti dari mode komplemen 2 adalah ia melakukan ini untuk Anda!
Namun, Anda mungkin masih ingin menggunakan biner lurus dengan transduser yang menghasilkan hasil yang ditandatangani. Misalnya, transduser Anda mungkin memiliki output diferensial: Dalam hal ini Anda ingin mengurangi output yang dibalik dari output yang tidak terbalik, jadi tidak ada keuntungan menggunakan komplemen 2's.
sumber
Sistem pelengkap keduanya digunakan, karena berasal dari cara kerja perangkat keras sederhana secara alami. Pikirkan misalnya odometer mobil Anda, yang telah Anda setel ke nol. Kemudian letakkan gigi mundur, dan berkendara mundur sejauh 1 mil (Tolong jangan lakukan ini dalam kenyataan). Odometer Anda (jika mekanis) akan bergulir dari 0000 hingga 9999. Sistem komplemen keduanya berperilaku sama.
Harap dicatat bahwa saya tidak benar-benar menawarkan informasi baru di sini, hanya contoh odometer yang mungkin membantu seseorang - itu membantu saya untuk memahami alasan sistem komplemen dua ketika saya masih muda. Setelah itu, mudah bagi saya untuk secara intuitif menerima bahwa adders, subtractor dll bekerja dengan baik dengan sistem komplemen keduanya.
Dan ya, odometer Nissan saya berfungsi seperti ini.
sumber
Yang lain sudah menjawab mengapa dua binary pujian itu nyaman untuk perangkat keras komputer. Namun, Anda tampaknya bertanya mengapa A / D akan menghasilkan pujian berpasangan alih-alih "straight binary" (apa pun yang menurut Anda benar-benar berarti).
Kebanyakan A / D menghasilkan nilai biner sederhana tanpa tanda mulai dari 0 hingga 2 N -1, di mana N adalah jumlah bit yang dikonversi A / D. Perhatikan bahwa ini juga dapat dianggap sebagai notasi pujian berpasangan, hanya saja nilainya tidak pernah negatif. Jika Anda hanya berurusan dengan angka positif, maka sebagian besar representasi biner adalah sama. Ini termasuk pujian dua kali lipat dan tanda besarnya.
Beberapa A / D, terutama yang dibangun dalam mikrokontroler, memiliki opsi untuk menghasilkan nilai negatif untuk bagian bawah kisaran mereka. Ini bisa menjadi keuntungan yang dirasakan saat mengukur sinyal bipolar.
Setidaknya dalam mikrokontroler, ini umumnya konyol. Dalam beberapa kasus, Anda mungkin menggunakan nilai A / D secara langsung tanpa konversi apa pun. Dalam hal ini, Anda telah mengonversi semua nilai lainnya ke rentang A / D. Membatasi itu untuk semua angka non-negatif sebenarnya menyederhanakan banyak hal.
Jika tidak, Anda akan menerapkan beberapa penskalaan dan mengimbangi pembacaan A / D untuk memasukkannya ke dalam unit apa pun yang Anda gunakan untuk nilai-nilai secara internal. Di sini sekali lagi tidak ada downside ke nilai yang tidak ditandatangani datang langsung dari A / D. Bahkan, saya biasanya menerapkan beberapa penyaringan lulus rendah pada nilai mentah sebelum penskalaan dan offset. Mengetahui nilai-nilai itu tidak akan negatif menyederhanakan perhitungan sedikit. Melakukan penskalaan pada nilai yang tidak ditandatangani juga membuat hal-hal sedikit lebih sederhana kadang-kadang.
Saya tidak ingat satu kasus di lebih dari 100 proyek mikrokontroler di mana saya menggunakan A / D dalam format output apa pun kecuali yang tidak ditandatangani.
Jadi untuk menjawab pertanyaan tentang apa keuntungan dari A / D keluaran "pujian berpasangan", ada dua jawaban:
Dalam perangkat keras khusus, mungkin ada beberapa keuntungan memiliki nilai negatif yang menunjukkan tegangan input negatif, dalam hal ini, pujian dua kali lipat adalah cara termudah untuk menangani kisaran nilai. Perhatikan bahwa jika rentang tegangan input tidak simetris tentang 0, maka keuntungan ini hilang.
sumber
Apa 'kode biner lurus' yang Anda bicarakan? Saya berasumsi maksud Anda memiliki sedikit tanda yang '1' untuk negatif dan '0' untuk positif (atau sebaliknya ). Ini memiliki dua kelemahan lebih dari dua pelengkap yang belum disebutkan: satu sebagian besar tidak relevan hari ini dan satu penting.
Yang sebagian besar tidak relevan adalah bahwa Anda dapat mewakili satu angka lebih sedikit - yaitu 255 angka dalam 8 bit. Ini sangat tidak relevan ketika Anda memiliki 32 atau 64 bit tetapi penting ketika Anda memiliki sedikitnya 4 atau 6 bit untuk bekerja dengannya.
Yang lebih penting adalah bahwa sekarang ada dua cara untuk mewakili angka yang sama - khususnya, 0 - +0 dan -0 tetapi +0 dan -0 adalah angka yang sama sehingga implementasi Anda perlu memastikan bahwa Anda tidak membandingkan ini angka setiap kali Anda melakukan pemeriksaan kesetaraan.
sumber