Съдържание:

Въведение в ADC в AVR микроконтролер - за начинаещи: 14 стъпки
Въведение в ADC в AVR микроконтролер - за начинаещи: 14 стъпки

Видео: Въведение в ADC в AVR микроконтролер - за начинаещи: 14 стъпки

Видео: Въведение в ADC в AVR микроконтролер - за начинаещи: 14 стъпки
Видео: Какво и Как да правим с Микроконтролери - Невен Боянов 2024, Юли
Anonim
Въведение в ADC в AVR микроконтролер | за начинаещи
Въведение в ADC в AVR микроконтролер | за начинаещи

В този урок ще научите всичко ADC в микроконтролер avr

Стъпка 1: Какво е ADC?

ADC или аналогово -цифров преобразувател позволява да се преобразува аналогово напрежение в цифрова стойност, която може да се използва от микроконтролер. Има много източници на аналогови сигнали, които човек би искал да измери. Налични са аналогови сензори, които измерват температура, интензитет на светлината, разстояние, позиция и сила, само за да назовем само няколко.

Стъпка 2: Как работи ADC в AVR- Микроконтролер

AVR ADC позволява на микроконтролера AVR да преобразува аналоговите напрежения в цифрови стойности с малко или никакви външни части. ATmega8 разполага с 10-битов последователен приблизителен ADC. ATmega8 има 7-канален ADC при PortC. ADC има отделен аналогов извод за захранващо напрежение, AVCC. AVCC не трябва да се различава повече от ± 0,3 V от VCC.. Референтното напрежение може да бъде външно отделено на AREF щифта. AVCC се използва като еталон за напрежение. ADC може също да бъде настроен да работи непрекъснато (режимът на свободна работа) или да прави само едно преобразуване.

Стъпка 3: Формула за преобразуване на ADC

Формула за преобразуване на ADC
Формула за преобразуване на ADC

Където Vin е напрежението на избрания входен щифт и Vref избраната справка за напрежение

Стъпка 4: Как да конфигурирате ADC в ATmega8?

Как да конфигурирам ADC в ATmega8?
Как да конфигурирам ADC в ATmega8?

Следните регистри се използват за внедряване на ADC в ATmega8

Избор на мултиплексор на ADC

Стъпка 5: Избор на ADLAR

Избор на ADLAR
Избор на ADLAR
Избор на ADLAR
Избор на ADLAR

Резултат от лявата настройка на ADC Битът ADLAR влияе върху представянето на резултата от преобразуването на ADC в регистъра на данните на ADC. Напишете един на ADLAR, за да коригирате резултата вляво. В противен случай резултатът се коригира правилно

Когато преобразуването на ADC приключи, резултатът се намира в ADCH и ADCL. Когато се чете ADCL, регистърът на данни ADC не се актуализира, докато ADCH не бъде прочетен. Следователно, ако резултатът е оставен коригиран и не се изисква повече от 8-битова прецизност, е достатъчно да се прочете ADCH. В противен случай първо трябва да се прочете ADCL, след това ADCH. Битове за избор на аналогов канал Стойността на тези битове избира кои аналогови входове са свързани към ADC.

Стъпка 6: Избор на ADCSRA

Избор на ADCSRA
Избор на ADCSRA
Избор на ADCSRA
Избор на ADCSRA

• Бит 7 - ADEN: ADC Enable Записването на този бит към един активира ADC. Записвайки го на нула, ADC се изключва

• Бит 6 - ADSC: ADC Стартиране на преобразуване В режим на единично преобразуване напишете този бит в един, за да стартирате всяко преобразуване. В режим на свободно движение, напишете този бит до един, за да започнете първото преобразуване.

• Бит 5 - ADFR: Избор на ADC Free Running Когато този бит е зададен (един), ADC работи в режим Free Running. В този режим ADC непрекъснато взема проби и актуализира регистрите на данните. Изчистването на този бит (нула) ще прекрати режима на свободно движение.

• Бит 4 - ADIF: Флаг на ADC прекъсване Този бит се задава, когато преобразуването на ADC приключи и регистрите на данните се актуализират. Прекъсването на пълното преобразуване на ADC се изпълнява, ако са зададени битът ADIE и I-битът в SREG. ADIF се изчиства от хардуер при изпълнение на съответния вектор за обработка на прекъсвания. Алтернативно, ADIF се изчиства, като се запише логически такъв към флага.

• Бит 3-ADIE: Разрешаване на ADC прекъсване Когато този бит е записан в единица и I-битът в SREG е зададен, се активира ADC Conversion Complete Interrupt.

• Битове 2: 0 - ADPS2: 0: Избор на битове за предсказване на ADC Според таблицата с данни този прескалар трябва да бъде настроен така, че входната честота на ADC да е между 50 KHz и 200 KHz. ADC часовникът се извлича от системния часовник с помощта на ADPS2: 0 Тези битове определят коефициента на разделение между честотата XTAL и входния часовник към ADC.

Стъпка 7: Ако искате да вземете ADC стойност, трябва да имате нужда от работа, която е посочена по -долу

  • Задайте стойност на ADC
  • Конфигурирайте изходния LED щифт
  • Конфигурирайте хардуера на ADC
  • Активирайте ADC
  • Стартирайте аналогово -цифрови преобразувания
  • ДОКАТО завинаги

АКО стойността на ADC е по -висока от зададената стойност, Включете светодиода ОЩЕ Изключете светодиода

Стъпка 8: Задайте ADC стойност

Код: uint8_t ADCValue = 128;

Стъпка 9: Конфигурирайте изходния LED извод

Код: DDRB | = (1 << PB1);

Стъпка 10: Конфигурирайте хардуера на ADC

Конфигурирайте хардуера на ADC

Това става чрез задаване на битове в контролните регистри за ADC. Първо, нека зададем прескалара за ADC. Според листа с данни този прескалар трябва да бъде настроен така, че входната честота на ADC да е между 50 KHz и 200 KHz. ADC часовникът се извлича от системния часовник. Със системна честота от 1MHz, предсказващото устройство от 8 ще доведе до честота на ADC от 125 Khz. Предварителното мащабиране се задава от битовете ADPS в регистъра ADCSRA. Според листа с данни, и трите бита ADPS2: 0 трябва да бъдат зададени на 011, за да се получи 8 предсказващо устройство.

Код: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

След това нека зададем референтното напрежение на ADC. Това се контролира от битовете REFS в регистъра ADMUX. Следното задава референтното напрежение на AVCC.

Код: ADMUX | = (1 << REFS0);

За да настроите канала, преминал през мултиплексора към ADC, битовете MUX в регистъра ADMUX трябва да бъдат съответно настроени. Тъй като тук използваме ADC5

Код: ADMUX & = 0xF0; ADMUX | = 5;

За да поставите ADC в режим на свободна работа, задайте подходящо наречения ADFR бит в регистъра на ADCSRA:

Код: ADCSRA | = (1 << ADFR);

Ще бъде направена последна промяна в настройките, за да се улесни четенето на стойността на ADC. Въпреки че ADC има резолюция от 10 бита, тази информация често не е необходима. Тази 10 -битова стойност е разделена на два 8 -битови регистри, ADCH и ADCL. По подразбиране най -ниските 8 бита от стойността на ADC се намират в ADCL, като горните два са най -ниските два бита на ADCH. Задавайки бита ADLAR в регистъра ADMUX, можем да подравним стойността на ADC наляво. Това поставя най -високите 8 бита от измерването в регистъра ADCH, а останалите в регистъра ADCL. Ако след това прочетем регистъра ADCH, получаваме 8 -битова стойност, която представлява нашето измерване от 0 до 5 волта като число от 0 до 255. По принцип превръщаме нашето 10 -битово ADC измерване в 8 -битово. Ето кода за задаване на бита ADLAR:

Код:

ADMUX | = (1 << ADLAR); Това завършва настройката на хардуера на ADC за този пример. Трябва да се зададат още два бита, преди ADC да започне да прави измервания.

Стъпка 11: Активирайте ADC

За да активирате ADC, задайте бита ADEN в ADCSRA:

Код: ADCSRA | = (1 << ADEN);

Стъпка 12: Стартирайте аналогово -цифрови преобразувания

За да стартирате измерванията на ADC, битът ADSC в ADCSRA трябва да бъде настроен:

Код: ADCSRA | = (1 << ADSC);

В този момент ADC ще започне непрекъснато вземане на проби от напрежението, представено на ADC5. Кодът до този момент ще изглежда така:

Стъпка 13: ДОКАТО завинаги

Единственото, което остава да направите, е да тествате стойността на ADC и да настроите светодиодите да показват индикация за висока / ниска стойност. Тъй като показанието на ADC в ADCH има максимална стойност 255, беше избрана тестова стойност th, за да се определи дали напрежението е високо или ниско. Едно просто IF/ELSE изявление в циклите FOR ще ни позволи да включим правилния светодиод:

Код

ако (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Включване на LED

}

иначе

{

PORTB & = ~ (1 << PB0); // Изключете LED

}

Стъпка 14: В края Пълният код е

Код:

#включва

int main (void)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Задайте LED1 като изход

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Настройте ADC prescalar на 8 - // 125KHz честота на дискретизация 1MHz

ADMUX | = (1 << REFS0); // Задайте препратка към ADC на AVCC

ADMUX | = (1 << ADLAR); // Наляво регулирайте резултата от ADC, за да позволите лесно 8 -битово четене

ADMUX & = 0xF0;

ADMUX | = 5; // MUX стойностите трябва да бъдат променени, за да се използва ADC0

ADCSRA | = (1 << ADFR); // Задайте ADC на Free-Running Mode

ADCSRA | = (1 << ADEN); // Активиране на ADC

ADCSRA | = (1 << ADSC); // Стартиране на A2D преобразуване, докато (1) // Цикъл завинаги

{

ако (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Включване на LED1

}

иначе

{

PORTE & = ~ (1 << PB1); // Изключете LED1

}

}

връщане 0;

}

Първо Публикувайте този урок Щракнете тук

Препоръчано: