Mundarija:

AVR mikrokontrolleridagi ADC -ga kirish - Yangi boshlanuvchilar uchun: 14 qadam
AVR mikrokontrolleridagi ADC -ga kirish - Yangi boshlanuvchilar uchun: 14 qadam

Video: AVR mikrokontrolleridagi ADC -ga kirish - Yangi boshlanuvchilar uchun: 14 qadam

Video: AVR mikrokontrolleridagi ADC -ga kirish - Yangi boshlanuvchilar uchun: 14 qadam
Video: ADC - Analog to Digital Converter in AVR Microcontroller #ADC #ADCofAVR #ATmega32 2024, Noyabr
Anonim
AVR mikrokontrolleridagi ADC -ga kirish | yangi boshlanuvchilar uchun
AVR mikrokontrolleridagi ADC -ga kirish | yangi boshlanuvchilar uchun

Bu qo'llanmada siz AVR mikrokontrolleridagi ADC bilan hamma narsani bilib olasiz

1 -qadam: ADC nima?

ADC yoki analogdan raqamli konvertor analog kuchlanishni mikrokontroller tomonidan ishlatilishi mumkin bo'lgan raqamli qiymatga o'zgartirishga imkon beradi. O'lchashni xohlaydigan analog signallarning ko'plab manbalari mavjud. Harorat, yorug'lik intensivligi, masofa, pozitsiya va kuchni o'lchaydigan analog sensorlar mavjud.

2-qadam: AVR-mikrokontrollerda ADC qanday ishlaydi

AVR ADC AVR mikrokontroleriga analog kuchlanishni raqamli qiymatlarga tashqi qismlari kam yoki kam bo'lmagan holda o'zgartirishga imkon beradi. ATmega8 ADC-ning 10-bitli ketma-ket yaqinlashuviga ega. ADC -da alohida analog kuchlanish pimi - AVCC mavjud. AVCC VCC dan ± 0,3V dan farq qilmasligi kerak. AREF pinida kuchlanish moslamasi tashqi tomondan ajratilishi mumkin. AVCC kuchlanish manbai sifatida ishlatiladi. ADC-ni uzluksiz ishlashga (erkin ishlash rejimiga) yoki faqat bitta konvertatsiyaga sozlash mumkin.

3 -qadam: ADC konvertatsiya formulasi

ADC konvertatsiya qilish formulasi
ADC konvertatsiya qilish formulasi

Bu erda Vin - tanlangan kirish pinidagi kuchlanish va Vref tanlangan kuchlanish moslamasi

4 -qadam: ATmega8 -da ADC -ni qanday sozlash kerak?

ATmega8 -da ADC -ni qanday sozlash kerak?
ATmega8 -da ADC -ni qanday sozlash kerak?

ATmega8 da ADCni amalga oshirish uchun quyidagi registrlar ishlatiladi

ADC multipleksorini tanlash

5 -qadam: ADLAR tanlovi

ADLAR tanlovi
ADLAR tanlovi
ADLAR tanlovi
ADLAR tanlovi

ADC chap sozlash natijasi ADLAR biti ADC ma'lumotlari reestrida ADC konvertatsiya natijasini ko'rsatilishiga ta'sir qiladi. Natijani sozlash uchun ADLARga yozing. Aks holda, natija to'g'ri sozlangan

ADC konvertatsiyasi tugagach, natija ADCH va ADCLda topiladi ADCL o'qilganda ADC ma'lumotlar registri ADCH o'qilmaguncha yangilanmaydi. Natijada, agar natija to'g'rilansa va 8 bitli aniqlik talab qilinmasa, ADCHni o'qish kifoya. Aks holda, avval ADCL o'qilishi kerak, keyin ADCH. Analog kanallarni tanlash bitlari Ushbu bitlarning qiymati ADCga qaysi analog kirishlar ulanganligini tanlaydi.

6 -qadam: ADCSRA tanlovi

ADCSRA tanlovi
ADCSRA tanlovi
ADCSRA tanlovi
ADCSRA tanlovi

• Bit 7 - ADEN: ADC ni yoqish Bu bitni biriga yozish ADC ni yoqadi. Nolga yozib, ADC o'chiriladi

• Bit 6 - ADSC: ADC konvertatsiyani bitta konversiya rejimida boshlang, har bir konvertatsiyani boshlash uchun bu bitni biriga yozing. Bepul ishga tushirish rejimida, birinchi konvertatsiyani boshlash uchun bu bitni biriga yozing.

• Bit 5 - ADFR: ADC Free Running Select Bu bit o'rnatilganda (bitta) ADC Free Running rejimida ishlaydi. Ushbu rejimda ADC ma'lumotlar ro'yxatini doimiy ravishda namuna oladi va yangilaydi. Bu bit (nol) tozalansa, erkin yugurish rejimi to'xtatiladi.

• Bit 4 - ADIF: ADC uzilish bayrog'i Bu bit ADC konvertatsiyasi tugagandan so'ng va ma'lumotlar registrlari yangilanganda o'rnatiladi. Agar ADIE biti va SREG-dagi I-bit o'rnatilgan bo'lsa, ADC konvertatsiyasining to'liq uzilishi bajariladi. Tegishli ishlov berish vektorini bajarishda ADIF apparat tomonidan tozalanadi. Shu bilan bir qatorda, ADIF bayroqqa mantiqiy yozish orqali tozalanadi.

• Bit 3-ADIE: ADC Interrupt Enable Bu bit bitta yozilsa va SREGda I-bit o'rnatilgan bo'lsa, ADC Conversion Complete Interrupt faollashadi.

• Bits 2: 0 - ADPS2: 0: ADC Prescaler Bits ni tanlang Ma'lumotlar jadvaliga ko'ra, ADC kirish chastotasi 50 KGts va 200 KGts oralig'ida bo'lishi kerak. ADC soati tizim soatidan ADPS2 yordamida olingan: 0 Bu bitlar XTAL chastotasi va ADCga kirish soati o'rtasidagi bo'linish faktorini aniqlaydi.

7 -qadam: Agar siz ADC qiymatiga ega bo'lishni xohlasangiz, quyida keltirilgan ishni bajarish kerak bo'ladi

  • ADC qiymatini o'rnating
  • Chiqish LED pinini sozlash
  • ADC uskunasini sozlash
  • ADC -ni yoqish
  • Raqamli konvertatsiyani analogdan boshlang
  • Qachonki abadiy

Agar ADC qiymati belgilangan qiymatdan yuqori bo'lsa, boshqa LEDni yoqing, LEDni o'chiring

8 -qadam: ADC qiymatini o'rnating

Kod: uint8_t ADCValue = 128;

9 -qadam: Chiqish LED pinini sozlash

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

10 -qadam: ADC uskunasini sozlang

ADC uskunasini sozlash

Bu ADC boshqaruv registrlarida bitlarni o'rnatish orqali amalga oshiriladi. Birinchidan, ADC uchun prescalar ni o'rnataylik. Ma'lumotlar jadvaliga ko'ra, ADC kirish chastotasi 50 KGts va 200 KGts oralig'ida bo'lishi kerak. ADC soati tizim soatlaridan olingan. Tizim chastotasi 1 MGts bo'lganida, 8 ta oldindan hisoblagich ADC chastotasini 125 KGts ga olib keladi. Oldindan hisoblash ADCSRA registridagi ADPS bitlari tomonidan o'rnatiladi. Ma'lumotlar jadvaliga ko'ra, 8 ta oldindan hisoblagichni olish uchun barcha ADPS2: 0 bitlari 011 ga sozlanishi kerak.

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

Keyinchalik, ADC mos yozuvlar kuchlanishini o'rnataylik. Bu ADMUX registridagi REFS bitlari tomonidan nazorat qilinadi. Quyida AVCC mos yozuvlar kuchlanishi o'rnatiladi.

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

ADP ga multipleksor orqali o'tadigan kanalni sozlash uchun ADMUX registridagi MUX bitlarini mos ravishda sozlash kerak. Biz ADC5 -ni bu erda ishlatganimiz uchun

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

ADC-ni erkin ishlash rejimiga o'tkazish uchun ADCSRA registrida to'g'ri nomlangan ADFR bitini o'rnating:

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

ADC qiymatini o'qishni soddalashtirish uchun bitta oxirgi sozlamalar o'zgartiriladi. ADC 10 bitli ruxsatga ega bo'lsa -da, ko'pincha bu ma'lumot kerak emas. Bu 10 bitli qiymat 8 bitli ikkita registrga bo'linadi, ADCH va ADCL. Odatiy bo'lib, ADCL qiymatining eng past 8 biti ADCLda topilgan, yuqori ikkita ADCH ning eng past ikki biti. ADMUX registrida ADLAR bitini o'rnatish orqali biz ADC qiymatini chapga tekislashimiz mumkin. Bu o'lchovning eng yuqori 8 bitini ADCH registriga, qolganini ADCL reestriga qo'yadi. Agar biz ADCH registrini o'qigan bo'lsak, biz 0 dan 255 gacha bo'lgan 0 dan 5 voltgacha bo'lgan o'lchovni ifodalovchi 8 bitli qiymatga ega bo'lamiz. Bu erda ADLAR bitini o'rnatish kodi:

Kod:

ADMUX | = (1 << ADLAR); Bu misol uchun ADC uskunasini o'rnatishni yakunlaydi. ADC o'lchashni boshlashdan oldin yana ikkita bitni o'rnatish kerak.

11 -qadam: ADC -ni yoqing

ADC -ni yoqish uchun ADCSRA -da ADEN bitini o'rnating:

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

12 -qadam: analogdan raqamli konvertatsiyaga o'ting

ADC o'lchovlarini boshlash uchun ADCSRAda ADSC bitini sozlash kerak:

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

Shu nuqtada, ADC doimiy ravishda ADC5da ko'rsatilgan kuchlanishni tanlay boshlaydi. Kod shu paytgacha shunday bo'ladi:

13 -qadam: abadiy

Qolgan yagona narsa - ADC qiymatini sinab ko'rish va LEDlarni yuqori / past ko'rsatkichni ko'rsatish uchun sozlash. ADCHda ADC o'qilishi maksimal 255 qiymatiga ega bo'lganligi sababli, kuchlanishning yuqori yoki pastligini aniqlash uchun th ning sinov qiymati tanlangan. FOR tsikllaridagi oddiy IF/ELSE iborasi to'g'ri LEDni yoqishga imkon beradi:

Kod

agar (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // LEDni yoqing

}

boshqa

{

PORTB & = ~ (1 << PB0); // LEDni o'chiring

}

14 -qadam: Oxirida to'liq kod

Kod:

#qo'shing

int main (bekor)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // LED1 -ni chiqish sifatida o'rnating

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // ADC prescalar -ni 8 - // 125KHz namuna tezligi 1 MGts ga o'rnating

ADMUX | = (1 << REFS0); // ADC ma'lumotnomasini AVCC ga o'rnating

ADMUX | = (1 << ADLAR); // ADC natijasini 8 bitli o'qishni osonlashtirish uchun chapga sozlash

ADMUX & = 0xF0;

ADMUX | = 5; // ADC0 dan foydalanish uchun MUX qiymatlarini o'zgartirish kerak edi

ADCSRA | = (1 << ADFR); // ADC-ni erkin ishlash rejimiga o'rnating

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

ADCSRA | = (1 << ADSC); // A2D konvertatsiyasini (1) vaqtida boshlang // Loop Forever

{

agar (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // LED1 -ni yoqing

}

boshqa

{

PORTE & = ~ (1 << PB1); // LED1ni o'chiring

}

}

qaytarish 0;

}

Avvalo bu darslikni chop eting Bu yerni bosing

Tavsiya: