Мазмуну:

AVR микроконтроллеринде ADCге киришүү - Жаңы баштагандар үчүн: 14 кадам
AVR микроконтроллеринде ADCге киришүү - Жаңы баштагандар үчүн: 14 кадам

Video: AVR микроконтроллеринде ADCге киришүү - Жаңы баштагандар үчүн: 14 кадам

Video: AVR микроконтроллеринде ADCге киришүү - Жаңы баштагандар үчүн: 14 кадам
Video: Микроконтроллеры avr для начинающих "aцп в Atmega 16" 2024, Июль
Anonim
AVR микроконтроллеринде ADCге киришүү | баштагандар үчүн
AVR микроконтроллеринде ADCге киришүү | баштагандар үчүн

Бул үйрөткүчтө сиз AVR микроконтроллериндеги ADC бардыгын билесиз

1 -кадам: ADC деген эмне?

ADC же Analog to Digital Converter, аналогдук чыңалууну микроконтроллер колдоно турган санариптик мааниге айландырууга мүмкүндүк берет. Өлчөөнү каалаган аналогдук сигналдардын көптөгөн булактары бар. Температураны, жарыктын интенсивдүүлүгүн, аралыкты, абалды жана күчтү өлчөй турган аналогдук сенсорлор бар.

2-кадам: AVR- Микроконтроллерде ADC кантип иштейт

AVR ADC AVR микроконтроллерине аналогдук чыңалууларды санариптик баалуулуктарга айландырууга мүмкүндүк берет. ATmega8де 10 биттик ырааттуу жакындаштыруу бар ADC. ATmega8де PortCте 7 канал ADC бар. ADCде өзүнчө аналогдук камсыздоо чыңалуу пини, AVCC бар. AVCC VCCтен ± 0,3В ашпашы керек. Чыңалуу шилтемеси AREF пининде сырттан ажыратылышы мүмкүн. AVCC чыңалуу шилтемеси катары колдонулат. ADC ошондой эле үзгүлтүксүз иштөө үчүн (бекер иштөө режими) же бир гана конверсияны жасоого орнотулушу мүмкүн.

3 -кадам: ADC Conversion Formula

ADC конверсия формуласы
ADC конверсия формуласы

Бул жерде Вин - бул тандалган кирүүчү пиндеги чыңалуу жана Vref тандалган чыңалуу шилтемеси

4 -кадам: ATmega8де ADCди кантип конфигурациялоо керек?

ATmega8де ADCди кантип конфигурациялоо керек?
ATmega8де ADCди кантип конфигурациялоо керек?

ATmega8де ADCди ишке ашыруу үчүн төмөнкү реестрлер колдонулат

ADC Multiplexer тандоо

5 -кадам: ADLAR тандоо

ADLAR тандоо
ADLAR тандоо
ADLAR тандоо
ADLAR тандоо

ADC Left Adjust Result ADLAR бит ADC маалымат реестринде ADC конверсиясынын натыйжасын көрсөтүүгө таасир этет. Жыйынтыгын тууралоо үчүн ADLARга жазыңыз. Болбосо, жыйынтык туура жөнгө салынат

ADC конверсиясы аяктаганда, натыйжа ADCH жана ADCLде табылат, ADCL окулганда, ADC маалыматтар реестри ADCH окулганга чейин жаңыртылбайт. Демек, эгер жыйынтык оңдолуп калса жана 8-битке чейин тактык талап кылынбаса, ADCHти окуу жетиштүү. Болбосо, биринчи ADCL, андан кийин ADCH окуу керек. Аналогдук канал тандоо биттери Бул биттердин мааниси кайсы аналогдук кирүүлөр ADCге туташкандыгын тандайт.

6 -кадам: ADCSRA тандоо

ADCSRA тандоо
ADCSRA тандоо
ADCSRA тандоо
ADCSRA тандоо

• Bit 7 - ADEN: ADC иштетүү Бул битти бирине жазуу ADCди иштетет. Аны нөлгө жазуу менен, ADC өчүрүлөт

• Bit 6 - ADSC: ADC Conversion'ти Single Conversion режиминде баштаңыз, ар бир конверсияны баштоо үчүн бул битти бирине жазыңыз. Эркин чуркоо режиминде, биринчи конверсияны баштоо үчүн бул битти бирине жазыңыз.

• Bit 5 - ADFR: ADC Free Running Select Бул бит (бир) коюлганда, ADC Free Running режиминде иштейт. Бул режимде ADC маалымат регистрлерин үзгүлтүксүз жаңыртып турат. Бул битти (нөл) тазалоо Free Running режимин токтотот.

• Bit 4 - ADIF: ADC Interrupt Flag Бул бит ADC конверсиясы аяктаганда жана Маалымат Реестрлери жаңыртылганда коюлат. ADC Conversion Complete Interrupt, эгер ADIE бит жана SREGдеги I-бит коюлса аткарылат. Тиешелүү үзгүлтүккө учуроочу Векторду аткарууда ADIF жабдыктар менен тазаланат. Же болбосо, ADIF желекке логикалык жазуу аркылуу тазаланат.

• Bit 3-ADIE: ADC Interrupt Enable Бул бит бирөөгө жазылып, SREGде I-бит орнотулганда, ADC Conversion Complete Interrupt иштетилет.

• Биттер 2: 0 - ADPS2: 0: ADC Prescaler Битти тандаңыз Маалыматтар барагына ылайык, бул алдын ала эсептөөчтү ADC киргизүү жыштыгы 50 КГцтен 200 КГцке чейин болушу керек. ADC сааты ADPS2 жардамы менен системалык сааттан алынган: 0 Бул биттер XTAL жыштыгы менен ADCге кирүүчү сааттын ортосундагы бөлүнүү факторун аныктайт.

7 -кадам: Эгерде сиз ADC баалуулугун алууну кааласаңыз, анда төмөндө тизмеленген кээ бир жумуштар керек

  • ADC маанисин коюңуз
  • Чыгуучу LED пинди конфигурациялоо
  • ADC жабдыктарын конфигурациялоо
  • ADC иштетүү
  • Аналогду санарипке айландырууну баштаңыз
  • ТҮБӨЛҮК

Эгерде ADC мааниси андан жогору болсо, LEDди күйгүзүңүз, калганын өчүрүңүз

8 -кадам: ADC баасын коюңуз

Код: uint8_t ADCValue = 128;

9 -кадам: Чыгуу LED пинин конфигурациялоо

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

10 -кадам: ADC жабдыктарын конфигурациялоо

ADC жабдыктарын конфигурациялоо

Бул ADC үчүн контролдоо реестрине биттерди коюу аркылуу жасалат. Биринчиден, ADC үчүн прескаларды орнотолу. Маалыматтар барагына ылайык, бул прецкаларды ADC киргизүү жыштыгы 50 КГцтен 200 КГцке чейин болушу керек. ADC сааты системалык сааттан алынган. Системалык жыштыгы 1 МГц болгондо, 8дин алдын ала эсептөөчүсү ADC жыштыгына 125 КГц алып келет. Алдын ала эсептөө ADCSRA реестриндеги ADPS биттери тарабынан коюлат. Маалыматтар барагына ылайык, бардык ADPS2: 0 биттеринин бардыгы 8 prescaler алуу үчүн 011ге коюлушу керек.

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

Андан кийин, ADC маалымдама чыңалуусун орнотолу. Бул ADMUX реестриндеги REFS биттери тарабынан көзөмөлдөнөт. Төмөндө маалымдама чыңалуусу AVCCге коюлат.

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

Каналды мультиплексор аркылуу ADCге коюу үчүн, ADMUX регистриндеги MUX биттери ошого жараша орнотулушу керек. Биз ADC5ти бул жерде колдонуп жаткандыктан

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

ADCди бош режимде иштетүү үчүн, ADCSRA реестрине туура коюлган ADFR битин коюңуз:

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

ADC маанисин жөнөкөйлөтүү үчүн акыркы орнотуулардын бир өзгөрүүсү жасалат. ADC 10 битке ээ болгонуна карабастан, бул көп маалыматтын кереги жок. Бул 10 биттик маани ADCH жана ADCL деген 8 биттик эки регистрге бөлүнөт. Демейки боюнча, ADC маанисинин эң төмөнкү 8 биттери ADCLде табылган, үстүңкү экөө ADCHтин эң төмөнкү эки биттери. ADMUX реестрине ADLAR битин коюу менен, биз ADC маанисин солго тегиздей алабыз. Бул өлчөөнүн эң жогорку 8 битин ADCH реестрине, калгандары ADCL реестрине киргизет. Эгерде биз ADCH реестрин окусак, анда биз 0дөн 5 вольтко чейин 0ден 255ке чейинки 8 биттик маанини алабыз. Биз негизи 10 бит ADC өлчөөбүздү 8 битке айлантып жатабыз. Бул жерде ADLAR битин коюу коду:

Код:

ADMUX | = (1 << ADLAR); Бул мисал үчүн ADC жабдууларын орнотууну аяктайт. ADC өлчөөнү баштоодон мурун дагы эки битти коюу керек.

11 -кадам: ADC иштетүү

ADC иштетүү үчүн ADCSRAда ADEN битин орнотуңуз:

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

12 -кадам: Аналогду санарипке айландырууну баштаңыз

ADC өлчөөлөрүн баштоо үчүн ADCSRAдагы ADSC битти орнотуу керек:

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

Бул жерде, ADC ADC5те көрсөтүлгөн чыңалууну үзгүлтүксүз тандап ала баштайт. Бул учурдагы код мындай көрүнөт:

13 -кадам: түбөлүккө

Жалгыз нерсе - ADC маанисин текшерүү жана LEDлерди жогорку / төмөн көрсөткүчтү көрсөтүү. ADCHдеги ADC окуусу 255 максималдуу мааниге ээ болгондуктан, чыңалуу жогорку же төмөн экендигин аныктоо үчүн сынактын мааниси тандалды. FOR циклдериндеги жөнөкөй IF/ELSE билдирүүсү туура LEDди күйгүзүүгө мүмкүндүк берет:

Code

эгер (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // LEDди күйгүзүү

}

башка

{

PORTB & = ~ (1 << PB0); // LEDди өчүрүү

}

14 -кадам: аягында толук код бар

Код:

#кошуу

int main (боштук)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // LED1ди чыгаруу катары коюңуз

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // ADC prescalar -ды 8 - // 125KHz үлгү ылдамдыгы 1МГцке коюңуз

ADMUX | = (1 << REFS0); // ADC шилтемесин AVCCге коюңуз

ADMUX | = (1 << ADLAR); // 8 битти оңой окуу үчүн ADC жыйынтыгын солго тууралаңыз

ADMUX & = 0xF0;

ADMUX | = 5; // ADC0 колдонуу үчүн MUX баалуулуктарын өзгөртүү керек

ADCSRA | = (1 << ADFR); // ADCти Free-Running режимине коюңуз

ADCSRA | = (1 << ADEN); // ADC иштетүү

ADCSRA | = (1 << ADSC); // A2D конверсиясын баштоо (1) // Loop Forever

{

эгер (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // LED1 күйгүзүү

}

башка

{

PORTE & = ~ (1 << PB1); // LED1ди өчүрүү

}

}

return 0;

}

Биринчи бул окуу куралын жарыялоо Бул жерди басыңыз

Сунушталууда: