Isi kandungan:

Pengenalan ADC dalam AVR Microcontroller - untuk Pemula: 14 Langkah
Pengenalan ADC dalam AVR Microcontroller - untuk Pemula: 14 Langkah

Video: Pengenalan ADC dalam AVR Microcontroller - untuk Pemula: 14 Langkah

Video: Pengenalan ADC dalam AVR Microcontroller - untuk Pemula: 14 Langkah
Video: BELAJAR MIKROKONTROLER AVR ATMEGA8535 /ATMEGA16 bahasa pemrograman C/CVAVR #mikrokontroleravr 2024, November
Anonim
Pengenalan ADC dalam AVR Microcontroller | untuk Pemula
Pengenalan ADC dalam AVR Microcontroller | untuk Pemula

Dalam tutorial ini, anda akan mengetahui semua ADC dalam mikrokontroler avr

Langkah 1: Apa itu ADC?

ADC, atau Analog to Digital Converter, membolehkan seseorang menukar voltan analog ke nilai digital yang dapat digunakan oleh mikrokontroler. Terdapat banyak sumber isyarat analog yang mungkin ingin diukur. Terdapat sensor analog yang tersedia yang mengukur suhu, intensiti cahaya, jarak, kedudukan, dan daya, hanya untuk beberapa nama.

Langkah 2: Cara Kerja ADC dalam AVR- Microcontroller

AVR ADC membolehkan pengawal mikro AVR menukar voltan analog kepada nilai digital dengan beberapa bahagian luaran dan tidak ada. ATmega8 mempunyai ADC 10-bit berturut-turut. ATmega8 mempunyai 7 saluran ADC di PortC. ADC mempunyai pin voltan bekalan analog yang berasingan, AVCC. AVCC tidak boleh berbeza lebih daripada ± 0.3V dari VCC.. Rujukan voltan boleh dilepaskan secara luaran pada pin AREF. AVCC digunakan sebagai rujukan voltan. ADC juga dapat diatur untuk berjalan secara berterusan (mod bebas berjalan) atau hanya melakukan satu penukaran.

Langkah 3: Formula Penukaran ADC

Formula Penukaran ADC
Formula Penukaran ADC

Di mana Vin adalah voltan pada pin input yang dipilih dan Vref rujukan voltan yang dipilih

Langkah 4: Bagaimana Mengkonfigurasi ADC di ATmega8?

Bagaimana Mengkonfigurasi ADC di ATmega8?
Bagaimana Mengkonfigurasi ADC di ATmega8?

Daftar berikut digunakan untuk pelaksanaan ADC di ATmega8

Pemilihan Multiplexer ADC

Langkah 5: Pemilihan ADLAR

Pemilihan ADLAR
Pemilihan ADLAR
Pemilihan ADLAR
Pemilihan ADLAR

ADC Left Adjust Result Bit ADLAR mempengaruhi pembentangan hasil penukaran ADC dalam Daftar Data ADC. Tulis satu ke ADLAR ke kiri menyesuaikan hasilnya. Jika tidak, hasilnya betul

Apabila penukaran ADC selesai, hasilnya dijumpai di ADCH dan ADCL Apabila ADCL dibaca, Daftar Data ADC tidak dikemas kini sehingga ADCH dibaca. Oleh itu, jika hasilnya dibiarkan diselaraskan dan ketepatan tidak lebih dari 8-bit diperlukan, memadai untuk membaca ADCH. Jika tidak, ADCL mesti dibaca terlebih dahulu, kemudian ADCH. Bit Pemilihan Saluran Analog Nilai bit ini memilih input analog yang disambungkan ke ADC.

Langkah 6: Pemilihan ADCSRA

Pemilihan ADCSRA
Pemilihan ADCSRA
Pemilihan ADCSRA
Pemilihan ADCSRA

• Bit 7 - ADEN: ADC Enable Menulis bit ini kepada satu membolehkan ADC. Dengan menulisnya menjadi sifar, ADC dimatikan

• Bit 6 - ADSC: ADC Mula Penukaran Dalam mod Penukaran Tunggal, tulis bit ini kepada satu untuk memulakan setiap penukaran. Dalam mod Running Percuma, tulis bit ini untuk memulakan penukaran pertama.

• Bit 5 - ADFR: ADC Free Running Select Apabila bit ini ditetapkan (satu) ADC beroperasi dalam mod Free Running. Dalam mod ini, ADC mengambil sampel dan mengemas kini Daftar Data secara berterusan. Mengosongkan bit ini (sifar) akan Menamatkan mod Running Percuma.

• Bit 4 - ADIF: Bendera Interrupt ADC Bit ini ditetapkan apabila penukaran ADC selesai dan Daftar Data dikemas kini. Interup Selesai Penukaran ADC dijalankan sekiranya bit ADIE dan I-bit dalam SREG ditetapkan. ADIF dibersihkan oleh perkakasan semasa menjalankan Vektor Pengendalian gangguan yang sesuai. Sebagai alternatif, ADIF dibersihkan dengan menulis yang logik pada bendera.

• Bit 3 - ADIE: ADC Interrupt Enable Apabila bit ini ditulis kepada satu dan I-bit dalam SREG ditetapkan, ADC Conversion Complete Interrupt diaktifkan.

• Bits 2: 0 - ADPS2: 0: ADC Prescaler Select Bits Menurut lembar data, prescalar ini perlu ditetapkan supaya frekuensi input ADC antara 50 KHz dan 200 KHz. Jam ADC berasal dari jam sistem dengan bantuan ADPS2: 0 Bit ini menentukan faktor pembahagian antara frekuensi XTAL dan jam masukan ke ADC.

Langkah 7: Sekiranya Anda Ingin Mengambil Nilai ADC, Anda Perlu Memerlukan Sebilangan Kerja Yang Disenaraikan Di Bawah

  • Tetapkan nilai ADC
  • Konfigurasikan pin LED output
  • Konfigurasikan Perkakasan ADC
  • Dayakan ADC
  • Mulakan Penukaran Analog ke Digital
  • SELEPAS Selamanya

JIKA Nilai ADC Lebih Tinggi daripada Tetapkan nilai, Hidupkan LED ELSE Matikan LED

Langkah 8: Tetapkan Nilai ADC

Kod: uint8_t ADCValue = 128;

Langkah 9: Konfigurasikan Pin LED Output

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

Langkah 10: Konfigurasikan Perkakasan ADC

Konfigurasikan Perkakasan ADC

Ini dilakukan dengan menetapkan bit dalam daftar kawalan untuk ADC. Pertama, mari kita tetapkan preskalar untuk ADC. Menurut lembar data, prescalar ini perlu ditetapkan supaya frekuensi input ADC 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 ditetapkan oleh bit ADPS dalam daftar ADCSRA. Menurut lembaran data, ketiga-tiga bit ADPS2: 0 mesti ditetapkan ke 011 untuk mendapatkan 8 preskaler.

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

Seterusnya, mari tetapkan voltan rujukan ADC. Ini dikendalikan oleh bit REFS dalam daftar ADMUX. Berikut ini menetapkan voltan rujukan ke AVCC.

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

Untuk menetapkan saluran yang dilewatkan melalui multiplexer ke ADC, bit MUX dalam daftar ADMUX perlu ditetapkan dengan sewajarnya. Oleh kerana kami menggunakan ADC5 di sini

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

Untuk meletakkan ADC ke dalam mod berjalan bebas, tetapkan bit ADFR yang diberi nama tepat dalam daftar ADCSRA:

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

Satu perubahan tetapan terakhir akan dibuat untuk mempermudah membaca nilai ADC. Walaupun ADC mempunyai resolusi 10 bit, banyak maklumat ini tidak diperlukan. Nilai 10 bit ini terbahagi kepada dua register 8 bit, ADCH dan ADCL. Secara lalai, 8 bit nilai ADC terendah terdapat di ADCL, dengan dua bahagian atas adalah dua bit ADCH terendah. Dengan menetapkan bit ADLAR dalam daftar ADMUX, kita boleh meninggalkan nilai ADC ke kiri. Ini meletakkan 8 bit pengukuran tertinggi dalam daftar ADCH, dan selebihnya dalam daftar ADCL. Sekiranya kita membaca daftar ADCH, kita mendapat nilai 8 bit yang mewakili pengukuran 0 hingga 5 volt sebagai angka dari 0 hingga 255. Pada dasarnya kita mengubah pengukuran ADC 10 bit kita menjadi 8 bit. Inilah kod untuk menetapkan bit ADLAR:

Kod:

ADMUX | = (1 << ADLAR); Itu melengkapkan persediaan perkakasan ADC untuk contoh ini. Dua bit lagi perlu ditetapkan sebelum ADC mula mengambil ukuran.

Langkah 11: Dayakan ADC

Untuk mengaktifkan ADC, tetapkan bit ADEN di ADCSRA:

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

Langkah 12: Mulakan Penukaran Analog ke Digital

Untuk memulakan pengukuran ADC, bit ADSC di ADCSRA perlu ditetapkan:

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

Pada ketika ini, ADC akan mula mengambil sampel voltan yang ditunjukkan pada ADC5 secara berterusan. Kod untuk tahap ini akan kelihatan seperti ini:

Langkah 13: SELAMA Selamanya

Yang tinggal hanyalah menguji nilai ADC dan menetapkan LED untuk menunjukkan petunjuk tinggi / rendah. Oleh kerana pembacaan ADC dalam ADCH mempunyai nilai maksimum 255, nilai ujian untuk dipilih untuk menentukan sama ada voltan tinggi atau rendah. Pernyataan IF / ELSE yang mudah dalam gelung FOR akan membolehkan kita menghidupkan LED yang betul:

Kod

jika (ADCH> Nilai ADC)

{

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

}

yang lain

{

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

}

Langkah 14: Pada Akhir Kod Lengkap Adalah

Kod:

#sertakan

int utama (tidak sah)

{

uint8_t ADCValue = 128;

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

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Tetapkan preskalar ADC kepada 8 - // 125KHz kadar sampel 1MHz

ADMUX | = (1 << REFS0); // Tetapkan rujukan ADC ke AVCC

ADMUX | = (1 << ADLAR); // Selaraskan hasil ADC untuk membolehkan pembacaan 8 bit yang mudah

ADMUX & = 0xF0;

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

ADCSRA | = (1 << ADFR); // Tetapkan ADC ke Free-Running Mode

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

ADCSRA | = (1 << ADSC); // Mulakan Penukaran A2D sambil (1) // Gelung Selamanya

{

jika (ADCH> Nilai ADC)

{

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

}

yang lain

{

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

}

}

pulangan 0;

}

Mula-mula Terbitkan tutorial ini Klik Di Sini

Disyorkan: