И так в моделях atmega8, 16, 32 и др присутсвует 10-битный АЦП. АЦП(аналого-цифровой преобразователь)-позволяет сравнивать нам узнавать напряжение, которое мы подаем на ножку МК. Это умеют не все ножки МК, в ДШ они подписаны в скобочках как(ADC x, где x-номер АЦП порта). Внимательно все изучите, в конце статьи будет пример с использованием, что должно поставить все на свои места.
И так для того что бы запрограммировать АЦП мы должны узнать 2 регистра. 1 из них называется ADMUX . Разберем его подробнее.
*Биты записывают с конечного по начальный, то есть 7,6...0. Иначе говоря в порядке как я их описываю.
1)Биты 7,6 отвечают за выбор напряжения, с которым МК будет сравнивать то, что вы на него подали. Таких вариантов всего 3.
а) 00 AREF. -Подаем питание с VCC на него напрямую б) 01 AVCC с внешним конденсатором на AREF в) 11 Внутренний калибрированный источник на 2,56 Вольт, с конденсатором 22 пФ , связанным с AREF и GND
2)Бит 5 . Если просто-он определяет точность измерения. Если 1- менее точно, если 0- более
3) Как видно из таблицы 4 бит не используется. Просто 0
4)Биты 3-0. Определяют pin(ADC x) к которому вы подводите напряжение.
0000 ADC0
0001 ADC1
0010 ADC2
0011 ADC3
0100 ADC4
0101 ADC5
0110 ADC6
0111 ADC7
Итого. Если вы хотите: 1)Сравнивать с внутренним источником на 2,56в - 11 2)Более точные измерения-0 3)0 4)Используете порт (ADC1(в atmega16 и 32 это порт A1) -0001 Получается - 11000001 Что бы вписать его в CVAVR сделайте так- ADMUX=0b11000001;
Второй регистр называется ADCSRA. Он отвечает за контроль и состояние АЦП. Разберем и его.

*Правила записи такие же как в прошлом регистре.
1)Бит 7 а) 1 АЦП включен (думаю понятно что если он вам нужен, лучше бы включить) :) б) 0 АЦП выключен
2)Бит 6. Запуск преобразования а) 0 Преобразование завершено v б) 1 Начать преобразование
3)Бит 5. Режим работы АЦП а) 0 Режим однократного преобразования б) 1 Режим непрерывного преобразования
4)Бит 4. 0, бит(1) устанавливается, когда преобразование совершено
5)Бит 3. Разрешить прерывания от АЦП а) 0 Прерывания запрещены б) 1 Прерывания разрешены
6)Биты 2-0. Частота АЦП 000 СК/2
001 СК/2
010 СК/4
011 СК/8
100 СК/16
101 СК/32
110 СК/64
111 СК/128
Например частота вашего МК 8мгц. Если вы хотите, что бы частота АЦП была меньше 200 кГц (чем ниже частота измерений, тем меньше ошибок будет, около 120-150 кГц) то 8 вы должны поделить на 64 (получается 125кГц), это вариант СК/64 (110). Итого. Если вы хотите: 1)Включить АЦП (1) 2)0 3)Иметь режим однократного преобразования (0) 4)0 5)Разрешить прерывания АЦП (1) 6)Выберете частоту АЦП, например (110) Получается 10001110 Что бы вписать его в CVAVR сделайте так- ADCSRA=0b10001110;
Что бы перевести результат в вольты, мы должны вычислить его по формуле: *adc_data - то, что мы считываем из АЦП *Питание-сколько мы подали на опорное напряжение (см ADMUX пункт 1). Например если вы выбираете 2,56в (вариант в)-подставляете 2,56 *1023-код максимального или БОЛЬШЕГО чем макс напряжение (в АЦП это 5 вольт). V=adc_data * питание / 1023 По этой формуле вы можете узнать сколько вольт подали на АЦП.
Ссылка на статью с примером АЦП, с использованием дальномера Sharp GP2D120 и узнаем как использовать обработчик прерывания.
Спасибо! Подготовленно с помощью этой статьи.
|