Daftar Isi:

Pengenalan ADC pada Mikrokontroler AVR - untuk Pemula: 14 Langkah
Pengenalan ADC pada Mikrokontroler AVR - untuk Pemula: 14 Langkah

Video: Pengenalan ADC pada Mikrokontroler AVR - untuk Pemula: 14 Langkah

Video: Pengenalan ADC pada Mikrokontroler AVR - untuk Pemula: 14 Langkah
Video: Mikrokontroler AVR: Analog to Digital Converter (ADC) 2024, November
Anonim
Pengenalan ADC pada Mikrokontroler AVR | untuk pemula
Pengenalan ADC pada Mikrokontroler AVR | untuk pemula

Dalam tutorial ini Anda akan mengetahui semua ADC di mikrokontroler avr

Langkah 1: Apa itu ADC?

ADC, atau Analog to Digital Converter, memungkinkan seseorang untuk mengubah tegangan analog menjadi nilai digital yang dapat digunakan oleh mikrokontroler. Ada banyak sumber sinyal analog yang mungkin ingin diukur. Ada sensor analog yang tersedia yang mengukur suhu, intensitas cahaya, jarak, posisi, dan gaya, hanya untuk beberapa nama.

Langkah 2: Cara Kerja ADC di AVR-Mikrokontroler

AVR ADC memungkinkan mikrokontroler AVR untuk mengubah tegangan analog menjadi nilai digital dengan sedikit atau tanpa bagian eksternal. ATmega8 memiliki aproksimasi 10-bit berturut-turut ADC. ATmega8 memiliki 7 saluran ADC di PortC. ADC memiliki pin tegangan suplai analog yang terpisah, AVCC. AVCC tidak boleh berbeda lebih dari ± 0.3V dari VCC.. Referensi tegangan dapat dipisahkan secara eksternal pada pin AREF. AVCC digunakan sebagai referensi tegangan. ADC juga dapat diatur untuk berjalan terus menerus (mode berjalan bebas) atau hanya melakukan satu konversi.

Langkah 3: Rumus Konversi ADC

Rumus Konversi ADC
Rumus Konversi ADC

Dimana Vin adalah tegangan pada pin input yang dipilih dan Vref adalah referensi tegangan yang dipilih

Langkah 4: Bagaimana Konfigurasi ADC di ATmega8?

Bagaimana Konfigurasi ADC di ATmega8?
Bagaimana Konfigurasi ADC di ATmega8?

Register berikut digunakan untuk implementasi ADC di ATmega8

Pilihan Multiplexer ADC

Langkah 5: Seleksi ADLAR

Seleksi ADLAR
Seleksi ADLAR
Seleksi ADLAR
Seleksi ADLAR

Hasil Penyesuaian Kiri ADC Bit ADLAR mempengaruhi penyajian hasil konversi ADC dalam Daftar Data ADC. Tulis satu ke ADLAR ke kiri sesuaikan hasilnya. Jika tidak, hasilnya akan disesuaikan dengan benar

Ketika konversi ADC selesai, hasilnya ditemukan di ADCH dan ADCL Ketika ADCL dibaca, Daftar Data ADC tidak diperbarui sampai ADCH dibaca. Akibatnya, jika hasilnya dibiarkan disesuaikan dan presisi tidak lebih dari 8-bit diperlukan, itu sudah cukup untuk membaca ADCH. Jika tidak, ADCL harus dibaca terlebih dahulu, kemudian ADCH. Analog Channel Selection Bits Nilai bit ini memilih input analog yang terhubung ke ADC.

Langkah 6: Seleksi ADCSRA

Seleksi ADCSRA
Seleksi ADCSRA
Seleksi ADCSRA
Seleksi ADCSRA

• Bit 7 – ADEN: ADC Enable Menulis bit ini ke satu mengaktifkan ADC. Dengan menuliskannya ke nol, ADC dimatikan

• Bit 6 – ADSC: ADC Mulai Konversi Dalam mode Konversi Tunggal, tulis bit ini menjadi satu untuk memulai setiap konversi. Dalam mode Free Running, tulis bit ini ke satu untuk memulai konversi pertama.

• Bit 5 – ADFR: ADC Free Running Select Ketika bit ini diset (satu), ADC beroperasi dalam mode Free Running. Dalam mode ini, sampel ADC dan memperbarui Register Data secara terus menerus. Menghapus bit ini (nol) akan Mengakhiri mode Free Running.

• Bit 4 – ADIF: ADC Interrupt Flag Bit ini diset saat konversi ADC selesai dan Register Data diperbarui. Interupsi Lengkap Konversi ADC dijalankan jika bit ADIE dan bit I pada SREG diatur. ADIF dihapus oleh perangkat keras saat menjalankan Vektor Penanganan interupsi yang sesuai. Atau, ADIF dihapus dengan menulis yang logis ke bendera.

• Bit 3 – ADIE: ADC Interrupt Enable Ketika bit ini ditulis ke satu dan bit-I di SREG diatur, ADC Conversion Complete Interrupt diaktifkan.

• Bits 2:0 – ADPS2:0: ADC Prescaler Select Bits Menurut datasheet, prescalar ini perlu diatur agar frekuensi input ADC berada di antara 50 KHz dan 200 KHz. Jam ADC diturunkan dari jam sistem dengan bantuan ADPS2:0 Bit-bit ini menentukan faktor pembagian antara frekuensi XTAL dan jam masukan ke ADC.

Langkah 7: Jika Anda Ingin Mengambil Nilai ADC, Anda Harus Melakukan Beberapa Pekerjaan Yang Tercantum Di Bawah Ini

  • Tetapkan nilai ADC
  • Konfigurasikan pin LED keluaran
  • Konfigurasikan Perangkat Keras ADC
  • Aktifkan ADC
  • Mulai Konversi Analog ke Digital
  • SEMENTARA Selamanya

JIKA Nilai ADC Lebih Tinggi dari Setel nilai, Nyalakan LED ELSE Matikan LED

Langkah 8: Setel Nilai ADC

Kode: uint8_t ADCValue=128;

Langkah 9: Konfigurasikan Pin LED Output

Kode: DDRB|= (1 << PB1);

Langkah 10: Konfigurasikan Perangkat Keras ADC

Konfigurasikan Perangkat Keras ADC

Hal ini dilakukan melalui pengaturan bit dalam register kontrol untuk ADC. Pertama, mari kita atur prescalar untuk ADC. Menurut datasheet, prescalar ini perlu diatur agar frekuensi input ADC berada di antara 50 KHz dan 200 KHz. Jam ADC berasal dari jam sistem. Dengan frekuensi sistem 1MHz, prescaler 8 akan menghasilkan frekuensi ADC 125 Khz. Prescaling diatur oleh bit ADPS dalam register ADCSRA. Menurut datasheet, ketiga bit ADPS2:0 harus diatur ke 011 untuk mendapatkan 8 prescaler.

Kode: ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

Selanjutnya, mari kita atur tegangan referensi ADC. Ini dikendalikan oleh bit REFS dalam register ADMUX. Berikut ini mengatur tegangan referensi ke AVCC.

Kode: ADMUX |= (1 << REFS0);

Untuk mengatur saluran yang dilewatkan melalui multiplexer ke ADC, bit MUX dalam register ADMUX perlu diatur. Karena kami menggunakan ADC5 di sini

Kode: ADMUX&=0xF0; ADMUX|=5;

Untuk menempatkan ADC ke mode free-running, atur bit ADFR yang diberi nama tepat di register ADCSRA:

Kode: ADCSRA |= (1 << ADFR);

Satu perubahan pengaturan terakhir akan dilakukan untuk membuat pembacaan nilai ADC menjadi lebih sederhana. Meskipun ADC memiliki resolusi 10 bit, informasi sebanyak ini seringkali tidak diperlukan. Nilai 10 bit ini dibagi menjadi dua register 8 bit, ADCH dan ADCL. Secara default, 8 bit terendah dari nilai ADC ditemukan di ADCL, dengan dua di atas menjadi dua bit terendah dari ADCH. Dengan mengatur bit ADLAR di register ADMUX, kita dapat menyelaraskan nilai ADC ke kiri. Ini menempatkan 8 bit pengukuran tertinggi di register ADCH, dengan sisanya di register ADCL. Jika kita kemudian membaca register ADCH, kita mendapatkan nilai 8 bit yang mewakili pengukuran 0 hingga 5 volt sebagai angka dari 0 hingga 255. Pada dasarnya kita mengubah pengukuran ADC 10 bit menjadi 8 bit. Berikut kode untuk mengatur bit ADLAR:

Kode:

ADMUX |= (1 << ADLAR); Itu melengkapi pengaturan perangkat keras ADC untuk contoh ini. Dua bit lagi perlu diatur sebelum ADC mulai melakukan pengukuran.

Langkah 11: Aktifkan ADC

Untuk mengaktifkan ADC, atur bit ADEN di ADCSRA:

Kode: ADCSRA |= (1 << ADEN);

Langkah 12: Mulai Konversi Analog ke Digital

Untuk memulai pengukuran ADC, bit ADSC di ADCSRA perlu diatur:

Kode: ADCSRA |= (1 << ADSC);

Pada titik ini, ADC akan mulai mengambil sampel tegangan yang disajikan pada ADC5 secara terus-menerus. Kode untuk titik ini akan terlihat seperti ini:

Langkah 13: SEMENTARA Selamanya

Satu-satunya yang tersisa untuk dilakukan adalah menguji nilai ADC dan mengatur LED untuk menampilkan indikasi tinggi / rendah. Karena pembacaan ADC di ADCH memiliki nilai maksimum 255, nilai uji th dipilih untuk menentukan apakah tegangan tinggi atau rendah. Pernyataan IF/ELSE sederhana dalam loop FOR akan memungkinkan kita untuk menyalakan LED yang benar:

Kode

jika(ADCH >ADCValue)

{

PORTB |= (1 << PB0); // Nyalakan LED

}

lain

{

PORTB&= ~(1 << PB0); // Matikan LED

}

Langkah 14: Pada Bagian Akhir Kode Lengkap Adalah

Kode:

#termasuk

int utama (kosong)

{

uint8_t ADCValue=128;

DDRB |= (1 << PB0); // Tetapkan LED1 sebagai output

ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Setel praskalar ADC ke 8 - // laju sampel 125KHz 1MHz

ADMUX |= (1 << REFS0); // Setel referensi ADC ke AVCC

ADMUX |= (1 << ADLAR); // Kiri sesuaikan hasil ADC untuk memudahkan pembacaan 8 bit

ADMUX&=0xF0;

ADMUX|=5; // Nilai MUX perlu diubah untuk menggunakan ADC0

ADCSRA |= (1 << ADFR); // Setel ADC ke Mode Berjalan Bebas

ADCSRA |= (1 << ADEN); // Aktifkan ADC

ADCSRA |= (1 << ADSC); // Mulai Konversi A2D saat(1) // Berulang Selamanya

{

jika (ADCH > ADCValue)

{

PORTB |= (1 << PB0); // Nyalakan LED1

}

lain

{

PORTE &= ~(1 << PB1); // Matikan LED1

}

}

kembali 0;

}

Publikasikan dulu tutorial ini Klik Disini

Direkomendasikan: