- MCP4921 DAC (Konverter Digital ke Analog)
- Komponen Diperlukan
- Skema
- Penjelasan Kode
- Menguji Konversi Digital ke Analog menggunakan PIC
Digital dan Analog merupakan bagian integral dari Elektronika. Sebagian besar perangkat memiliki ADC serta DAC dan digunakan saat ada kebutuhan untuk mengubah sinyal baik dari analog ke digital atau digital ke analog. Juga sinyal dunia nyata seperti suara dan cahaya bersifat analog, jadi setiap kali sinyal dunia nyata ini harus digunakan, sinyal digital harus diubah menjadi analog, misalnya untuk menghasilkan suara menggunakan Speaker atau untuk mengontrol sumber cahaya.
Jenis lain dari DAC adalah Pulse Width Modulator (PWM). PWM mengambil kata digital dan menghasilkan pulsa digital dengan lebar pulsa variabel. Ketika sinyal ini dilewatkan melalui filter, hasilnya akan murni analog. Sinyal analog dapat memiliki beberapa jenis data dalam satu sinyal.
Dalam tutorial ini, kita akan menghubungkan DAC MCP4921 dengan Microchip PIC16F877A untuk konversi digital ke analog.
Di sini, dalam tutorial ini kita akan mengubah sinyal digital menjadi sinyal analog dan menampilkan nilai digital input dan nilai analog keluaran pada LCD 16x2. Ini akan memberikan 1V, 2V, 3V, 4V, dan 5V sebagai keluaran analog akhir yang ditunjukkan dalam video yang diberikan di bagian akhir. Anda dapat mempelajari lebih lanjut tentang DAC dalam tutorial berharga kami tentang antarmuka DAC dengan papan Raspberry Pi, Arduino, dan STM32.
DAC dapat digunakan dalam banyak aplikasi seperti Kontrol motor, Kontrol Kecerahan Lampu LED, Amplifier Audio, Encoder Video, Sistem Akuisisi Data, dll. Sebelum melompat langsung ke bagian antarmuka, penting untuk memiliki gambaran umum tentang MCP4921.
MCP4921 DAC (Konverter Digital ke Analog)
MCP4921 adalah DAC 12 bit, jadi MCP4921 akan memberikan resolusi output 12 bit. Resolusi DAC berarti jumlah bit digital yang dapat diubah menjadi sinyal analog. Berapa banyak nilai yang bisa kita raih dari ini berdasarkan rumus. Untuk 12-bit, = 4096. Ini berarti DAC resolusi 12-bit dapat menghasilkan 4096 output yang berbeda.
Dengan menggunakan nilai ini, seseorang dapat dengan mudah menghitung tegangan langkah analog tunggal. Untuk menghitung langkah-langkahnya, diperlukan tegangan referensi. Karena tegangan logika untuk perangkat adalah 5V, tegangan langkahnya adalah 5/4095 (4096-1 karena titik awal untuk digital bukan 1, itu 0), yaitu 0,00122100122 milivolt. Jadi, perubahan 1 bit akan mengubah keluaran analog dengan 0,00122100122.
Jadi, itulah bagian konversi. The MCP4921 adalah IC 8-pin. The diagram pin dan deskripsi dapat ditemukan di bawah.
The MCP4921 IC berkomunikasi dengan mikrokontroler oleh protokol SPI. Untuk komunikasi SPI, perangkat harus menjadi master, yang mengirimkan data atau perintah ke perangkat eksternal yang terhubung sebagai budak. Dalam sistem komunikasi SPI, beberapa perangkat pendukung dapat dihubungkan dengan satu Perangkat Master.
Untuk mengirimkan data dan perintah, penting untuk memahami register perintah.
Pada gambar di bawah ini, register perintah ditampilkan,
The perintah mendaftar adalah 16-bit register. Bit-15 hingga bit-12 digunakan untuk perintah konfigurasi. Input data dan konfigurasi dengan jelas ditunjukkan pada gambar di atas. Dalam proyek ini, MCP4921 akan digunakan sebagai konfigurasi berikut-
Nomor Bit |
Konfigurasi |
Nilai Konfigurasi |
Sedikit 15 |
DAC A |
0 |
Sedikit 14 |
Tanpa buffer |
0 |
Sedikit 13 |
1x (V KELUAR * D / 4096) |
1 |
Sedikit 12 |
Bit Kontrol Daya Turun Output |
1 |
Jadi Biner adalah 0011 bersama dengan data yang ditentukan oleh bit D11 ke D0 dari register. Data 16-bit 0011 xxxx xxxx xxxx perlu dikirimkan di mana 4 bit pertama MSB adalah konfigurasi dan sisanya adalah LSB. Ini akan lebih jelas dengan melihat diagram waktu perintah tulis.
Sesuai diagram waktu dan lembar data, pin CS rendah untuk seluruh periode penulisan perintah ke MCP4921.
Sekarang saatnya untuk menghubungkan perangkat dengan perangkat keras dan menulis kode.
Komponen Diperlukan
Untuk proyek ini, komponen berikut diperlukan-
- MCP4921
- PIC16F877A
- Kristal 20 MHz
- A Menampilkan LCD karakter 16x2.
- Resistor 2k -1 pc
- Kapasitor 33pF - 2 pcs
- Resistor 4,7k - 1 buah
- Multi-meter untuk mengukur tegangan keluaran
- Papan tempat memotong roti
- Catu daya 5V, pengisi daya telepon dapat berfungsi.
- Banyak kabel hookup atau kabel berg.
- Lingkungan pemrograman microchip dengan Programmer kit dan IDE dengan compiler
Skema
Diagram Sirkuit untuk menghubungkan DAC4921 dengan Mikrokontroler PIC diberikan di bawah ini:
Sirkuit ini dibangun di Breadboard-
Penjelasan Kode
Kode lengkap untuk mengubah sinyal digital menjadi analog dengan PIC16F877A diberikan di akhir artikel. Seperti biasa, pertama-tama kita perlu mengatur bit konfigurasi di mikrokontroler PIC.
// PIC16F877A Pengaturan Bit Konfigurasi // Pernyataan konfigurasi baris sumber 'C' // CONFIG #pragma config FOSC = HS // Bit pilihan osilator (osilator HS) #pragma config WDTE = OFF // Pengatur Waktu Pengawas Bit pengaktifan (WDT dinonaktifkan) # pragma config PWRTE = OFF // Power-up Timer Aktifkan bit (PWRT dinonaktifkan) #pragma config BOREN = ON // Brown-out Reset Aktifkan bit (BOR diaktifkan) #pragma config LVP = OFF // Tegangan Rendah (Pasokan Tunggal) In-Circuit Serial Programming Enable bit (Pin RB3 / PGM memiliki fungsi PGM; pemrograman tegangan rendah diaktifkan) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Perlindungan penulisan mati; semua memori program dapat ditulis oleh kontrol EECON) #pragma config CP = OFF // Bit Perlindungan Kode Memori Program Flash (Perlindungan kode mati)
Baris kode di bawah ini digunakan untuk mengintegrasikan file header LCD dan SPI, juga Frekuensi XTAL dan koneksi pin CS DAC dideklarasikan.
Tutorial dan perpustakaan PIC SPI dapat ditemukan di tautan yang diberikan.
#include
Funciton yang SPI_Initialize_Master () sedikit dimodifikasi untuk konfigurasi yang berbeda diperlukan untuk proyek ini. Dalam hal ini, register SSPSTAT dikonfigurasikan sedemikian rupa sehingga data input diambil sampelnya pada akhir waktu keluaran data dan juga jam SPI yang dikonfigurasi sebagai Transmit terjadi pada transisi dari mode status jam aktif ke idle. Yang lainnya sama.
batal SPI_Initialize_Master () { TRISC5 = 0; // Ditetapkan sebagai keluaran SSPSTAT = 0b11000000; // hal 74/234 SSPCON = 0b00100000; // hal 75/234 TRISC3 = 0; // Tetapkan sebagai keluaran untuk mode budak }
Juga, untuk fungsi di bawah ini, SPI_Write () diubah sedikit. Transmisi data akan terjadi setelah buffer dibersihkan untuk memastikan transmisi data yang sempurna melalui SPI.
batal SPI_Write (karakter masuk) { SSPBUF = masuk; // Tulis data yang diberikan pengguna ke buffer while (! SSPSTATbits.BF); }
Bagian penting dari program ini adalah driver MCP4921. Ini adalah bagian yang sedikit rumit karena perintah dan data digital digabungkan untuk menyediakan data 16-bit lengkap melalui SPI. Namun, logika itu dengan jelas ditunjukkan dalam komentar kode.
/ * Fungsi ini untuk mengubah nilai digital ke analog. * / void convert_DAC (unsigned int value) { / * Step Size = 2 ^ n, Karenanya 12bit 2 ^ 12 = 4096 Untuk referensi 5V, stepnya adalah 5/4095 = 0.0012210012210012V atau 1mV (approx) * / unsigned int container; unsigned int MSB; LSB int unsigned; / * Langkah: 1, simpan 12 bit data ke dalam container Misalkan datanya adalah 4095, dalam biner 1111 1111 1111 * / container = value; / * Langkah: 2 Membuat Dummy 8 bit. Jadi, dengan membagi 256, 4 bit atas ditangkap di LSB LSB = 0000 1111 * / LSB = container / 256; / * Langkah: 3 Mengirim konfigurasi dengan meninju data 4 bit. LSB = 0011 0000 ATAU 0000 1111. Hasilnya adalah 0011 1111 * / LSB = (0x30) - LSB; / * Langkah: 4 Container masih memiliki nilai 21bit. Mengekstrak 8 bit yang lebih rendah. 1111 1111 DAN 1111 1111 1111. Hasilnya adalah 1111 1111 yaitu MSB * / MSB = 0xFF & container; / * Langkah: 4 Mengirim data 16bits dengan membaginya menjadi dua byte. * / DAC_CS = 0; // CS rendah selama transmisi data. Sesuai dengan lembar data, diperlukan SPI_Write (LSB); SPI_Write (MSB); DAC_CS = 1; }
Dalam fungsi utama, 'for loop' digunakan dimana data digital untuk membuat output 1V, 2V, 3V, 4V, dan 5V dibuat. Nilai digital dihitung terhadap tegangan Output / 0,0012210012210012 milivolt.
void main () { system_init (); pengenalan_layar (); nomor int = 0; volt int = 0; sedangkan (1) { untuk (volt = 1; volt <= MAX_VOLT; volt ++) { number = volt / 0.0012210012210012; clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("DATA Terkirim: -"); lcd_print_number (angka); lcd_com (SECOND_LINE); lcd_puts ("Keluaran: -"); lcd_print_number (volt); lcd_puts ("V"); convert_DAC (angka); __delay_ms (300); } } }
Menguji Konversi Digital ke Analog menggunakan PIC
Sirkuit yang dibangun diuji menggunakan Multi-meter. Pada gambar di bawah ini, tegangan output dan data digital ditampilkan pada LCD. Multi-meter menunjukkan pembacaan dekat.
Kode Lengkap dengan video yang berfungsi terlampir di bawah ini.