Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 1 1 . Аналоговый компаратор и АЦП 305 ются равными нулю. Чтение этих регистров производится, начиная с младшего ADCL, после чего регистр доен блокируется, пока не будет прочитан. Следовательно, даже если момент между чтением регистров попал на фронт 1 4-го такта АЦП, ко­ гда данные в них должны меняться, значения прочитанной пары будут соответст­ вовать друг другу, пусть и результат текущего преобразования пропадет. В проти­ воположном порядке читать эти регистры не рекомендуется . Но бит ADLAR (бит 5 регистра домuх ) предоставляет интересную возможность - если его установить в 1, то результат преобразования в регистрах ADCH : ADCL выравнивается влево : бит 9 результата окажется в старшем бите доен, а незначащими будут младшие 6 битов регистра ADCL. В этом случае, если хватает 8-разрядного разрешения результата, можно прочесть только значение ADCH. Выбор каналов и режимов их взаимодействия в АЦП производится пятью битами мuхо . . 4 в регистре Аомuх. В некоторых моделях (семейство Tiny) этих битов всего три ( мuхо . . 2), а, например, в ATmega8 - четыре ( мuхо . . з), в зависимости от обще­ го числа каналов. В любом случае их значения от О до максимального номера кана­ ла (которых в большинстве случаев 8, так что значения оказываются в пределах от ооо до 1 1 1 , а старшие биты, если они есть, равны О) выбирают нужный канал в обычном (недифференциальном) режиме, когда измеряемое напряжение отсчиты­ вается от «земли» (аналоговой) . А последние два значения этих битов для семейст­ ва Mega ( 1 1 1 0 и 1 1 1 1 для ATmega8) выбирают режимы, когда вход АЦП подсоеди­ няется к опорному источнику компаратора ( 1 ,22 В) или к «земле», соответственно, что может использоваться для автокалибровки устройства. В имеющих АЦП моде­ лях Tiny такого режима нет. Наконец, остальные комбинации разрядов мuх предназначены для установки раз­ личных дифференциальных режимов - в тех моделях, где они присутствуют (ATmega8535 ), в других случаях эти биты зарезервированы (в ATmega8 и, между прочим, в «ардуиновских» АTmega88/ l 68/328) . В дифференциальном режиме АЦП измеряет напряжение между двумя выбранными выводами (например, между ADCO и ADC 1 ). В том числе дифференциальные входы АЦП можно подключать к одному и тому же входу для коррекции нуля - в дальнейшем значение выхода при соединенных входах можно просто вычесть из результата преобразования . Среди дифференциальных режимов АЦП есть такие, когда к некоторым парам вы­ водов подключается встроенный усилитель с коэффициентом 1 Ох и 200х . Входы и их режимы допускается переключать в любой момент, потому что эффект это даст все равно только после окончания текущего преобразования, - так можно менять каналы «на ходу» в режиме непрерывного преобразования . Только при этом следует учесть, что в дифференциальном режиме из-за наличия усилителя показа­ ния установятся только через 1 25 мкс, результаты до истечения этого срока ока­ жутся недостоверными. Для недифференциального режима АЦП, когда напряжение отсчитывается от «Зем­ ли», результат преобразования определяется формулой: Ка = 1 024И0x l Иrer, где Ка - значение выходного кода АЦП, Ивх и Иrer- входное и опорное напряжения .

RkJQdWJsaXNoZXIy MTExODQxMg==