Mündəricat:

AVR Mikrokontrollerində ADC -yə giriş - Yeni başlayanlar üçün: 14 addım
AVR Mikrokontrollerində ADC -yə giriş - Yeni başlayanlar üçün: 14 addım

Video: AVR Mikrokontrollerində ADC -yə giriş - Yeni başlayanlar üçün: 14 addım

Video: AVR Mikrokontrollerində ADC -yə giriş - Yeni başlayanlar üçün: 14 addım
Video: Analog to digital converter 2024, Iyul
Anonim
AVR Mikrokontrollerində ADC -yə giriş | yeni başlayanlar üçün
AVR Mikrokontrollerində ADC -yə giriş | yeni başlayanlar üçün

Bu dərsdə, avr mikrokontrolöründəki ADC hər şeyi biləcəksiniz

Addım 1: ADC nədir?

Bir ADC və ya Analogdan Rəqəmsal Dönüştürücü, bir analog gərginliyi bir mikro nəzarətçi tərəfindən istifadə edilə bilən rəqəmsal bir dəyərə çevirməyə imkan verir. Ölçmək istəyə biləcəyiniz bir çox analoq siqnal mənbəyi var. İstilik, işıq intensivliyi, məsafə, mövqe və qüvvəni ölçən analoq sensorlar mövcuddur.

Addım 2: AVR-Mikrokontrollerdə ADC necə işləyir

AVR ADC, AVR mikrokontrolörünün xarici hissələri az və ya çox olmayan analog dəyərləri rəqəmsal dəyərlərə çevirməsinə imkan verir. ATmega8, 10 bitlik ardıcıl bir yaxınlaşmaya malikdir. ATmega8, PortC-də 7 kanallı ADC-yə malikdir. ADC -də ayrıca bir analog təchizat gərginliyi pimi var, AVCC. AVCC, VCC -dən ± 0.3V -dən çox fərqlənməməlidir. Gərginlik istinadı AREF pinində xaricdən ayrıla bilər. AVCC gərginlik istinad olaraq istifadə olunur. ADC da davamlı olaraq (sərbəst işləmə rejimi) və ya yalnız bir dönüşüm etmək üçün qurula bilər.

Addım 3: ADC Dönüşüm Formulu

ADC Dönüşüm Formulu
ADC Dönüşüm Formulu

Burada Vin seçilmiş giriş pinindəki gərginlikdir və Vref seçilmiş gərginlik istinadıdır

Addım 4: ATmega8 -də ADC -ni necə qurmaq olar?

ATmega8 -də ADC -ni necə qurmaq olar?
ATmega8 -də ADC -ni necə qurmaq olar?

ATmega8 -də ADC tətbiq etmək üçün aşağıdakı qeydlər istifadə olunur

ADC Multiplexer Seçimi

Addım 5: ADLAR Seçimi

ADLAR seçimi
ADLAR seçimi
ADLAR seçimi
ADLAR seçimi

ADC Sol Ayarlama Nəticəsi ADLAR biti ADC Məlumat Reyestrində ADC dönüşüm nəticəsinin təqdimatını təsir edir. Nəticəni tənzimləmək üçün ADLAR -a yazın. Əks təqdirdə nəticə düzgün tənzimlənir

ADC çevrilməsi tamamlandıqda, nəticə ADCH və ADCL -də tapılır ADCL oxunduqda, ADCH oxunana qədər ADC Məlumat Reyestri yenilənmir. Nəticə olaraq, nəticə tənzimlənərsə və 8 bitdən çox dəqiqlik tələb olunmasa, ADCH oxumaq kifayətdir. Əks təqdirdə əvvəlcə ADCL, sonra ADCH oxunmalıdır. Analog Kanal Seçim Bitləri Bu bitlərin dəyəri ADC -yə hansı analog girişlərin bağlı olduğunu seçir.

Addım 6: ADCSRA Seçimi

ADCSRA Seçimi
ADCSRA Seçimi
ADCSRA Seçimi
ADCSRA Seçimi

• Bit 7 - ADEN: ADC Enable Bu bitin birinə yazılması ADC -ni aktivləşdirir. Sıfıra yazmaqla ADC söndürülür

• Bit 6 - ADSC: ADC Dönüşümə Tək Dönüşüm rejimində başlayın, hər bir çevrilməyə başlamaq üçün bu biti birinə yazın. Pulsuz İşləmə rejimində, ilk çevrilməyə başlamaq üçün bu biti birinə yazın.

• Bit 5 - ADFR: ADC Pulsuz Çalışma Seçimi Bu bit (bir) təyin edildikdə ADC Sərbəst Çalışma rejimində işləyir. Bu rejimdə, ADC davamlı olaraq Məlumat Reyestrini götürür və yeniləyir. Bu bitin (sıfır) silinməsi Sərbəst Çalışma rejiminə son qoyacaq.

• Bit 4 - ADIF: ADC Interrupt Flag Bu bit, ADC çevrilməsi başa çatdıqda və Məlumat Qeydləri yeniləndikdə təyin olunur. ADIE biti və SREG-də I-bit təyin edildikdə, ADC Dönüşüm Tamamilə Aralanması icra edilir. Müvafiq fasilə Handling Vector işlənərkən ADIF aparat tərəfindən təmizlənir. Alternativ olaraq, ADIF bayrağa məntiqi bir yazı yazmaqla silinir.

• Bit 3-ADIE: ADC Interrupt Enable Bu bit birə yazıldıqda və SREG-də I-bit təyin edildikdə, ADC Conversion Complete Interrupt aktivləşir.

• Bit 2: 0 - ADPS2: 0: ADC Prescaler Bitləri seçin Məlumat cədvəlinə görə, bu prescalar ADC giriş tezliyi 50 KHz və 200 KHz arasında olacaq şəkildə qurulmalıdır. ADC saatı ADPS2 köməyi ilə sistem saatından əldə edilir: 0 Bu bitlər XTAL tezliyi ilə ADC -yə giriş saatı arasındakı bölünmə faktorunu təyin edir.

Addım 7: ADC dəyərinə sahib olmaq istəyirsinizsə, aşağıda sadalanan işlərə ehtiyacınız var

  • ADC dəyərini təyin edin
  • Çıxış LED pinini konfiqurasiya edin
  • ADC Avadanlıqlarını konfiqurasiya edin
  • ADC aktiv edin
  • Analogdan Rəqəmsal Dönüşümlərə Başlayın
  • Sonsuza qədər

ADC Dəyəri Yüksək, sonra Qiyməti təyin edin, LED -i Yandırın

Addım 8: ADC dəyərini təyin edin

Kod: uint8_t ADCValue = 128;

Addım 9: Çıxış LED Pinini konfiqurasiya edin

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

Addım 10: ADC Hardware -ni konfiqurasiya edin

ADC Avadanlıqlarını konfiqurasiya edin

Bu, ADC üçün nəzarət qeydlərində bitləri təyin etməklə edilir. Əvvəlcə ADC üçün prescalar təyin edək. Məlumat cədvəlinə görə, bu prescalar ADC giriş tezliyi 50 KHz və 200 KHz arasında olacaq şəkildə qurulmalıdır. ADC saatı sistem saatından əmələ gəlir. Sistem tezliyi 1MHz olduqda, 8 -ə qədər bir ön kalkulyator 125 Khz -lik bir ADC tezliyi ilə nəticələnəcək. Öncədən ölçmə ADCSRA reyestrindəki ADPS bitləri tərəfindən təyin edilir. Məlumat cədvəlinə görə, 8 prescaler almaq üçün hər üç ADPS2: 0 biti 011 olaraq təyin olunmalıdır.

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

Sonra ADC istinad gərginliyini təyin edək. Bu, ADMUX reyestrindəki REFS bitləri tərəfindən idarə olunur. Aşağıda istinad gərginliyi AVCC olaraq təyin olunur.

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

ADP -yə multiplekserdən keçən kanalı təyin etmək üçün ADMUX reyestrindəki MUX bitlərini buna uyğun olaraq qurmaq lazımdır. Burada ADC5 istifadə etdiyimiz üçün

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

ADC-ni sərbəst iş rejiminə salmaq üçün ADCSRA reyestrində düzgün adlandırılmış ADFR bitini təyin edin:

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

ADC dəyərinin oxunmasını asanlaşdırmaq üçün son bir parametr dəyişikliyi ediləcək. ADC 10 bitlik bir qətnaməyə sahib olsa da, bu qədər məlumat çox vaxt lazım deyil. Bu 10 bitlik dəyər, ADCH və ADCL olmaqla 8 bitlik iki qeydə bölünür. Varsayılan olaraq, ADC dəyərinin ən aşağı 8 biti ADCL -dədir, üst ikisi ADCH -in ən aşağı iki bitidir. ADMUX qeydində ADLAR bitini təyin edərək ADC dəyərini sola hizalaya bilərik. Bu, ən yüksək 8 bit ölçüsünü ADCH reyestrinə, qalanları isə ADCL qeydinə qoyur. ADCH qeydini oxusaq, 0 ilə 255 arasında bir rəqəm olaraq 0 ilə 5 volt ölçmələrimizi təmsil edən 8 bitlik bir dəyər əldə edirik. Əsasən 10 bitlik ADC ölçmələrimizi 8 bit ölçüyə çeviririk. ADLAR bitini təyin etmək üçün kod budur:

Kod:

ADMUX | = (1 << ADLAR); Bu nümunə üçün ADC aparatının qurulmasını tamamlayır. ADC -nin ölçmə aparmağa başlamasından əvvəl daha iki bitin qurulması lazımdır.

Addım 11: ADC -ni aktivləşdirin

ADC -ni aktiv etmək üçün ADCSRA -da ADEN bitini təyin edin:

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

Addım 12: Analogdan Rəqəmsal Dönüşümlərə Başlayın

ADC ölçmələrinə başlamaq üçün ADCSRA -da ADSC bitini təyin etmək lazımdır:

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

Bu nöqtədə, ADC davamlı olaraq ADC5 -də təqdim olunan gərginliyi seçməyə başlayacaq. Bu nöqtədəki kod belə görünür:

Addım 13: Sonsuza qədər

Yalnız ADC dəyərini yoxlamaq və LED -ləri yüksək / aşağı göstərici göstərmək üçün qurmaq qalır. ADCH -də ADC oxunması maksimum 255 dəyərə malik olduğundan, gərginliyin yüksək və ya aşağı olduğunu müəyyən etmək üçün th testi seçildi. FOR döngələrində sadə bir IF/ELSE ifadəsi düzgün LED -i yandırmağımıza imkan verəcəkdir:

Kod

əgər (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // LED yandırın

}

başqa

{

PORTB & = ~ (1 << PB0); // LED -i söndürün

}

Addım 14: Sonda Tam Kod Var

Kod:

#daxil edin

int main (boş)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // LED1 -i çıxış olaraq təyin edin

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // ADC prescalarını 8 - // 125KHz nümunə dərəcəsi 1MHz olaraq təyin edin

ADMUX | = (1 << REFS0); // ADC istinadını AVCC olaraq təyin edin

ADMUX | = (1 << ADLAR); // 8 bit asan oxumaq üçün ADC nəticəsini sola tənzimləyin

ADMUX & = 0xF0;

ADMUX | = 5; // ADC0 istifadə etmək üçün MUX dəyərlərinin dəyişdirilməsi lazım idi

ADCSRA | = (1 << ADFR); // ADC-ni Sərbəst Çalışma Rejiminə təyin edin

ADCSRA | = (1 << ADEN); // ADC -ni aktiv edin

ADCSRA | = (1 << ADSC); // (1) olarkən A2D Dönüşümlərə başlayın // Əbədi döngə edin

{

əgər (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // LED1 yandırın

}

başqa

{

PORTE & = ~ (1 << PB1); // LED1 söndürün

}

}

qaytarma 0;

}

Əvvəlcə bu təlimatı dərc edin Buraya Tıklayın

Tövsiyə: