- Apa itu ADC (Penukaran Analog ke Digital)
- ADC dalam AVR Mikrokontroler Atmega16
- Komponen Diperlukan
- Rajah Litar
- Menyiapkan Daftar kawalan ADC di Atmega16
- Pengaturcaraan Atmega16 untuk ADC
Satu ciri umum yang digunakan di hampir setiap aplikasi yang disematkan adalah modul ADC (Analog to Digital Converter). Ini Analog kepada Converters digital boleh membaca voltan dari sensor analog seperti suhu sensor, sensor Tilt, sensor Semasa, Flex sensor dan lain-lain Dalam tutorial ini kita akan belajar Apakah ADC dan Bagaimana untuk menggunakan ADC dalam Atmega16. Tutorial ini merangkumi menyambungkan potensiometer kecil ke pin ADC Atmega16 dan 8 LED digunakan untuk memaparkan voltan perubahan nilai output ADC sehubungan dengan perubahan nilai input ADC.
Sebelum ini kami menjelaskan ADC dalam mikrokontroler lain:
- Cara menggunakan ADC dalam ARM7 LPC2148 - Mengukur Voltan Analog
- Cara menggunakan ADC dalam STM32F103C8 - Mengukur Voltan Analog
- Cara menggunakan ADC dalam MSP430G2 - Mengukur Voltan Analog
- Bagaimana Menggunakan ADC di Arduino Uno?
- Menggunakan Modul ADC Mikrokontroler PIC dengan MPLAB dan XC8
Apa itu ADC (Penukaran Analog ke Digital)
ADC bermaksud Analog ke Digital Converter. Dalam elektronik, ADC adalah peranti yang menukar isyarat analog seperti arus dan voltan menjadi kod digital (bentuk binari). Di dunia nyata, kebanyakan isyarat adalah analog dan mana-mana mikrokontroler atau mikropemproses memahami bahasa perduaan atau digital (0 atau 1). Oleh itu, untuk membuat pengawal mikro memahami isyarat analog, kita harus menukar isyarat analog ini menjadi bentuk digital. ADC betul-betul melakukan ini untuk kita. Terdapat banyak jenis ADC yang tersedia untuk aplikasi yang berbeza. Beberapa ADC yang popular adalah flash, pendekatan berturut-turut dan sigma-delta.
Jenis ADC yang paling murah adalah Pendekatan Berturut-turut dan dalam tutorial ini ADC Penghampiran berturut-turut akan digunakan. Dalam jenis ADC berturut-turut, satu siri kod digital, masing-masing sesuai dengan tahap analog tetap, dihasilkan berturut-turut. Pembilang dalaman digunakan untuk membandingkan dengan isyarat analog yang ditukar. Penjanaan dihentikan apabila tahap analog menjadi lebih besar daripada isyarat analog. Kod digital yang sesuai dengan tahap analog adalah perwakilan digital yang dikehendaki dari isyarat analog. Ini menyelesaikan sedikit penjelasan kami mengenai pendekatan berturut-turut.
Sekiranya anda ingin meneroka ADC dengan lebih mendalam, anda boleh merujuk tutorial kami sebelumnya mengenai ADC. ADC tersedia dalam bentuk IC dan juga mikrokontroler dilengkapi dengan ADC bawaan sekarang. Dalam tutorial ini kita akan menggunakan ADC Atmega16 terbina dalam. Mari kita bincangkan mengenai ADC Atmega16 terbina dalam.
ADC dalam AVR Mikrokontroler Atmega16
Atmega16 mempunyai ADC 10 bit dan 8 saluran terbina dalam. 10 bit sepadan dengan itu jika voltan input 0-5V maka ia akan dibahagi dalam nilai 10 bit iaitu 1024 tahap nilai Analog diskrit (2 10 = 1024). Kini 8-saluran sesuai dengan 8 ADC Pin khusus pada Atmega16 di mana setiap pin dapat membaca voltan Analog. PortA Lengkap (GPIO33-GPIO40) dikhaskan untuk operasi ADC. Secara lalai, pin PORTA adalah pin IO umum, ini bermaksud pin port berlipat ganda. Untuk menggunakan pin ini sebagai pin ADC, kita harus mengkonfigurasi daftar tertentu yang dikhaskan untuk kawalan ADC. Inilah sebabnya mengapa register dikenali sebagai register kawalan ADC. Marilah kita membincangkan cara menyiapkan daftar ini untuk mula berfungsi ADC terbina dalam.
Pin ADC di Atmega16
Komponen Diperlukan
- IC Mikrokontroler Atmega16
- Pengayun Kristal 16Mhz
- Dua Kapasitor 100nF
- Dua Kapasitor 22pF
- Tekan butang
- Wayar Pelompat
- Papan roti
- USBASP v2.0
- Led (Sebarang Warna)
Rajah Litar
Menyiapkan Daftar kawalan ADC di Atmega16
1. Daftar ADMUX (Daftar Pemilihan Multiplexer ADC) :
Daftar ADMUX adalah untuk pemilihan saluran ADC dan memilih voltan rujukan. Gambar di bawah menunjukkan gambaran keseluruhan daftar ADMUX. Penerangannya dijelaskan di bawah.
- Bit 0-4: bit pemilihan saluran.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Saluran ADC Dipilih |
0 |
0 |
0 |
0 |
0 |
ADC0 |
0 |
0 |
0 |
0 |
1 |
ADC1 |
0 |
0 |
0 |
1 |
0 |
ADC2 |
0 |
0 |
0 |
1 |
1 |
ADC3 |
0 |
0 |
1 |
0 |
0 |
ADC4 |
0 |
0 |
1 |
0 |
1 |
ADC5 |
0 |
0 |
1 |
1 |
0 |
ADC6 |
0 |
0 |
1 |
1 |
1 |
ADC7 |
- Bit-5: Ia digunakan untuk menyesuaikan hasilnya ke kanan atau kiri.
ADLAR |
Penerangan |
0 |
Betulkan hasilnya |
1 |
Kiri menyesuaikan hasilnya |
- Bit 6-7: Mereka digunakan untuk memilih voltan rujukan untuk ADC.
REFS1 |
REFS0 |
Pemilihan Rujukan Voltan |
0 |
0 |
AREF, Vref Dalaman dimatikan |
0 |
1 |
AVcc dengan kapasitor luaran pada pin AREF |
1 |
0 |
Terpelihara |
1 |
1 |
Rujukan Voltan 2.56 Dalaman dengan kapasitor luaran di AREF Pin |
Sekarang mulailah mengkonfigurasi bit register ini dalam program sehingga kita mendapat bacaan dan output ADC Dalaman ke Semua Pin PORTC.
Pengaturcaraan Atmega16 untuk ADC
Program lengkap diberikan di bawah. Bakar program di Atmega16 menggunakan JTAG dan Atmel studio dan putar potensiometer untuk mengubah nilai ADC. Di sini, kodnya dijelaskan demi baris.
Mulakan dengan membuat satu fungsi untuk membaca nilai tukar ADC. Kemudian lulus nilai saluran sebagai 'chnl' dalam fungsi ADC_read .
ADC_read int yang tidak ditandatangani (char chnl yang tidak ditandatangani)
Nilai saluran mestilah antara 0 hingga 7 kerana kami hanya mempunyai 8 saluran ADC.
chnl = chnl & 0b00000111;
Dengan menulis '40' iaitu '01000000' ke daftar ADMUX kami memilih PORTA0 sebagai ADC0 di mana input Analog akan dihubungkan untuk penukaran digital.
ADMUX = 0x40;
Sekarang langkah ini melibatkan proses penukaran ADC, di mana dengan menulis SATU hingga ADSC Bit dalam daftar ADCSRA kita memulakan penukaran. Selepas itu, tunggu bit ADIF mengembalikan nilai apabila penukaran selesai. Kami menghentikan penukaran dengan menulis '1' di ADIF Bit dalam daftar ADCSRA. Apabila penukaran selesai, kembalikan nilai ADC.
ADCSRA - = (1 <
Di sini voltan rujukan ADC dalaman dipilih dengan menetapkan bit REFS0. Selepas itu aktifkan ADC dan pilih prescaler sebagai 128.
ADMUX = (1 <
Sekarang simpan nilai ADC dan hantarkan ke PORTC. Dalam PORTC, 8 LED disambungkan yang akan menunjukkan output digital dalam format 8 bit. Contoh yang kami tunjukkan berbeza voltan antara 0V hingga 5V menggunakan satu periuk 1K.
i = ADC_read (0); PORTC = i;
Multimeter Digital digunakan untuk menampilkan voltan input analog dalam ADC Pin dan 8 LED digunakan untuk menunjukkan nilai 8 bit output ADC yang sesuai. Putar saja Potensiometer dan lihat hasil yang sesuai pada multimeter dan juga pada LED yang bercahaya.
Kod lengkap dan video kerja diberikan di bawah.