Вы находитесь на странице: 1из 9

7/1. Принцип и особенности работы модуля 10-разрядного АЦП.

Сначала нужно, в общем виде, разобраться с "базой" аналого – цифрового


преобразования.
Уже из названия понятно, что аналоговый сигнал преобразуется в "цифирь", то есть,
осуществляется перевод сигнала из аналоговой в цифровую форму ("оцифровка").
Это необходимо для обеспечения дальнейшей обработки аналогового (изначально)
сигнала в цифровых системах.
В простейшем случае, "оцифровка" аналогового сигнала производится при его
"протаскивании" через пороговые устройства типа триггера Шмидта.
В этом случае, речь идет о простейшем аналого – цифровом преобразовании, в
результате которого дается ответ на такой же простейший вопрос: "Уровень
аналогового сигнала находится ниже или выше порогового уровня".
В зависимости от ответа на него, "железяка" сформирует либо уровень нуля, либо
уровень единицы.
Такой способ АЦП приемлем, если нужно произвести банальный подсчет количества
превышений порогового уровня.
Если же нужно "оцифровать" форму аналогового сигнала, то с помощью такого
"примитива", как не старайся, этого сделать нельзя.
Собственно говоря, имеется только один приемлемый вариант "оцифровки" формы
аналогового сигнала, вокруг которого и "кипят страсти", - вариант с использованием
так называемых выборок.
Выборок чего?
Выборок уровней аналогового сигнала, происходящих в коротком интервале времени.
В интервале времени текущей выборки, уровень аналогового сигнала, имеющий место
быть в этом интервале времени, считывается с аналогового входа в некий элемент
памяти, после чего электрическое соединение этого элемента памяти, с аналоговым
входом, разрывается.
Далее начинается само аналого – цифровое преобразование.
Чего в чего?
Того, что "лежит на хранении" в элементе памяти (уровня), в "цифирь" той или иной
разрядности.
Преобразовали. Дальше что?
А дальше - "на колу мочало, начинаем все сначала" (следующая выборка и т.д., "до
посинения").
Казалось бы, самый натуральный "детский сад", но при дальнейшем "углублении и
расширении", эта иллюзия быстро улетучивается.
Давайте разбираться.
Что такое выборка?
В ее временном представлении, это интервал времени, в начале которого элемент
памяти подключается к аналоговому входу, а в его конце - отключается.
Процедура АЦП всегда должна начинаться с выборки, так как, по здравому
разумению, сначала нужно заиметь предмет "оцифровки" ("заложить" текущий уровень
аналогового сигнала в элемент памяти), а только после этого ее производить.
Должно быть понятно, что, если речь идет об "оцифровке" формы сигнала, то выборок
должно быть много, и они должны следовать друг за другом не "абы как", а "строго
по ранжиру", то есть, периодически.
Период связан с частотой.
Следовательно возникает вопрос: "Какова должна быть максимальная частота
выборок"?
Для того чтобы понять, что следующая выборка должна быть произведена только
после окончания цикла АЦП уровня текущей выборки, много ума не нужно.
Продолжительность отработки цикла АЦП уровня текущей (одной) выборки (Тц):
Тц = Тв + Тацп
Тв - интервал времени в течение которого производится выборка.
Тацп - интервал времени аналого – цифрового преобразования.
Следовательно, максимальная частота выборок (Fд.макс):
Fд.макс = 1 / Тв + Тацп
1
Частоту выборок часто называют частотой дискретизации (стандартное название).
Например, в цифровой телефонии, частота дискретизации выбирается, как минимум, в
2 раза большей, чем максимальная частота частотного диапазона обрабатываемого
аналогового сигнала.
А вообще, в идеале, с учетом пропускной способности канала связи, чем выше
частота дискретизации, тем лучше, так как от этого напрямую зависит качество
восстановленного, на приемной стороне, сигнала.
Конечно, не плохо было бы "задрать ее до заоблачных высот", но любое аналого
-цифровое преобразование инерционно, и поэтому имеет "потолок" скорости (см. расчет
Тц), да и пропускную способность канала связи нужно учитывать.
Эта тема достаточно "сильна & могуча", и в мои планы пока не входит ее "копание".
Пример приведен только с целью акцентирования Вашего внимания на таком важном
параметре АЦП, как частота дискретизации.
Такими делами лучше заниматься после того, как станет ясен технический аспект
практической реализации АЦП. Последнее сейчас более актуально.
"Падаю" на выборку и сразу же "упираюсь" в "элемент памяти".
Что за "ужасный зверь"?
А никакого "ужасного зверя" и в помине нет.
Есть обычный, качественный (с малым током утечки) конденсатор емкостью 120 пф.
Разработчики его назвали Chold.
Этот конденсатор электрически подключается к тому выводу ПИКа, который, при
настройке модуля АЦП, назначен активным, аналоговым входом.
Аналоговых входов может быть несколько, но активным может быть только один из
них хотя бы по той причине, что конденсатор Hold один-разъединственный.
Конденсатор отключается от активного, аналогового входа только на время
осуществления аналого – цифрового преобразования, либо в случае перевода
аналогового входа из активного в пассивное состояние (конденсатор переключается на
тот аналоговый вход, который назначен активным).
Обращаю Ваше внимание на то, что любой конденсатор является так называемым
пассивным элементом.
Проще говоря, его не нужно запитывать как, например, транзистор (активный элемент).
Его можно либо зарядить, либо разрядить.
Этот заряд/разряд происходит в интервале времени выборки.
Если аналоговый уровень текущей выборки выше аналогового уровня предыдущей
выборки, то конденсатор будет заряжаться.
Если аналоговый уровень текущей выборки ниже аналогового уровня предыдущей
выборки, то конденсатор будет разряжаться.
Через что?
Через выходное сопротивление источника аналогового сигнала.
Вывод: номинал выходного сопротивления источника аналогового сигнала имеет
большое значение.
Примечание: так как речь идет или о заряде, или о разряде, то лучше "привязаться" к
слову "перезаряд", и считать, что под этим словом подразумевается или то, или
другое.
Чем выше выходное сопротивление источника аналогового сигнала, тем медленнее
будет происходить перезаряд.
В контексте сказанного, должно быть понятно, что величина интервала времени
выборки должна быть такой, чтобы к концу выборки, напряжение на конденсаторе
успело уравняться с напряжением источника аналогового сигнала, подключенного к
аналоговому входу ПИКа.
А еще лучше, чтобы был еще и "ефрейторский, временной зазор" (конечно же, в
пределах разумного. Меру нужно знать).
В противном случае, конденсатор не успеет перезарядиться и результат АЦП будет не
соответствовать расчетному ("вранье").
Вывод: после подключения конденсатора к аналоговому входу ПИКа, нужно
сформировать фиксированную задержку, и не "абы какую", а расчетной
величины, с учетом "ефрейторского зазора".
После окончания интервала времени выборки, конденсатор быстренько отключается от
аналогового входа.
2
Каким образом? Ведь момент окончания фиксированной задержки, для аппаратной
части ПИКа, - "пустой звук"?
Разработчики придумали специальный, управляющий бит, выставление единицы в
котором "запускает" процесс АЦП.
Назвали его битом статуса модуля АЦП.
В этом случае, проблема решается очень просто: после отработки фиксированной
задержки, бит статуса устанавливается в 1 (всего 1 м.ц.).
Как только это произойдет, сразу "делаются 2 дела":
- конденсатор отключается от активного, аналогового входа ПИКа (100 нс.) и
подключается к входу устройства аналого – цифрового преобразования,
- "запускается механизм" АЦП.
Примечание: ток разряда конденсатора, отключенного от активного, аналогового входа
ПИКа, настолько мал, что им можно пренебречь.
Предположим, что это произошло.
Что получилось?
А получилось то, что конденсатор "запомнил" уровень напряжения текущей выборки, и
к нему подключился очень высокоомный (чтобы минимизировать разряд) вход
устройства АЦП, которое и преобразует этот уровень напряжения в N-разрядное,
двоичное слово.
Это преобразование осуществляется побитно (последовательно), и время его
осуществления зависит как от разрядности ("битности") аналого – цифрового
преобразования, так и от значения тактовой частоты.
Что при этом творится в "дебрях" ПИКа, знать вовсе не обязательно.
А вот настройки знать нужно (об этом позднее).
Вопрос: "Каков критерий завершенности АЦП"?
Ответ: состояние все того же бита (флага) статуса модуля АЦП.
По окончании АЦП, в нем устанавливается 0.
Вывод: после "запуска механизма" АЦП (то есть, после "принудительного" поднятия
флага статуса), за состоянием флага статуса нужно, при помощи "плавающей"
задержки, "зорко" и "бдительно" следить.
Предположим, что аналого – цифровое преобразование завершилось, и рабочая точка
программы вышла из "плавающей" задержки.
Далее, нужно просто "снять сливки", то есть, скопировать результат АЦП в заранее
"заготовленные" регистры оперативной памяти, с целью его (результата)
использования в дальнейшем.
Что дальше?
Далее, нужно перейти на следующий цикл АЦП, ведь для того чтобы перевести в
цифровую форму протяженный во времени аналоговый сигнал, нужно отработать
большое количество циклов АЦП.
Почти всегда, на практике, одной, циклической процедурой аналого – цифрового
преобразования "дело не ограничивается", ведь аналого – цифровое преобразование это
не самоцель.
Оно делается не для самого себя, а для чего-то.
Таким образом, кроме процедуры АЦП, в программе присутствует "нечто".
Выполнение этого "нечто" требует времени, часто значительно превышающего время
одного цикла аналого – цифрового преобразования.
А если это так, то какой практический смысл держать включенным модуль АЦП тогда,
когда он не нужен?
Чтобы он, "бездельник", "казенные харчи уминал" (в смысле, драгоценный ток
потреблял)?
Отключить, и дело с концом, а когда потребуется, то включить.
По-моему, это вполне хозяйский подход к делу.
Итак, процедура АЦП отработана, модуль АЦП выключен, началось отрабатываться
"нечто".
Отработалось.
Теперь нужен "свисток" в виде команды перехода на начало процедуры АЦП (а если в
общем виде, то на начало полного цикла программы), и все "завертится по новой".
И т.д., и т.п. (вспомните про "связку" типа "кол – мочало").

3
Вот собственно говоря и все основные "штрихи к портрету" принципа работы модуля
АЦП, с учетом "встроенности" в работу программы.
Как видите, ничего суперсложного и непомерно заумного нет.
А вот теперь можно, "со спокойной совестью и с чувством глубокого удовлетворения"
(какой – никакой, а "скелетик-то" имеется), "направить орлиный взор" на детали.
Здесь и далее, речь пойдет о PIC16F873A: объем памяти программ 4096 слов, объем
EEPROM памяти данных 128 байт, 3 порта, 28 выводов.
PIC16F873A имеет в своем составе модуль 10-разрядного АЦП.
"10-разрядного" означает то, что такой модуль АЦП способен преобразовывать уровни
аналогового напряжения в 10-разрядные, двоичные слова.
Это соответствует количеству числовых градаций от 0 до 1023.
Чем выше уровень выборки (в пределах заданного диапазона напряжений), тем
большее число будет результатом АЦП.
В PIC16F87хх имеется до 8-ми каналов АЦП.
Вход каждого из каналов АЦП (а это и есть входы модуля АЦП) "привязан" к
конкретному выводу порта А.
Таким образом, можно последовательно осуществить до 8-ми АЦП (преобразовать в
цифровую форму уровни до 8-ми различных аналоговых сигналов).
Это очень даже "зер гут" (открываются "голубые дали" & "дух захватывает").
А если говорить конкретно, то в PIC16F873A имеется не 8, а 5 каналов АЦП
(остальные 3 не задействуются).
Примечание: именно к выводу канала АЦП (RA0…3,5) подключается выход внешнего
источника аналогового сигнала, и именно к выводу канала АЦП, в интервале времени
осуществления текущей выборки, подключается конденсатор Hold.
Естественно, с учетом последовательного принципа работы с каналами АЦП, должна
быть обеспечена возможность выбора того или иного канала, что и имеет место быть
(об этом - ниже).
Сразу же после выбора того или иного канала АЦП (перевода канала в активное
состояние), конденсатор Hold подключается к тому выводу порта А, который
является входом выбранного канала АЦП.
А теперь ближе к делу.
Модуль АЦП имеет 2 управляющих, доступных для записи и чтения, регистра: AdCon0
(0-й банк, адрес 1Fh) и AdCon1 (1-й банк, адрес 9Fh).
Настройку модуля АЦП нужно начинать с "конфигурирования начинки" регистра AdCon1,
так как настройка должна начаться с определения функций выводов RA0…3,5.
Именно в регистре AdCon1 "эти дела и делаются".

Регистр AdCon1 (для PIC16F873A и …876А).

Бит №7 : формат сохранения 10-разрядного результата


(ADFM) 1 -> правое выравнивание,
0 -> левое выравнивание.

Биты №№6,5,4 : не используются (читаются как 0).

Биты №№3,2,1,0 : биты настройки каналов АЦП


(PCFG3,2,1,0)

№ PCFG3..0 RA5/AN4 RA3/AN3 RA2/AN2 RA1/AN1 RA0/AN0 +Uоп -Uоп


1 0000 A A A A A +Uп GND
2 0001 A +Uref A A A RA3 GND
3 0010 A A A A A +Uп GND
4 0011 A +Uref A A A RA3 GND
5 0100 D A D A A +Uп GND
6 0101 D +Uref D A A RA3 GND
7 011х D D D D D +Uп GND
8 1000 A +Uref -Uref A A RA3 RA2
9 1001 A A A A A +Uп GND
10 1010 A +Uref A A A RA3 GND

4
11 1011 A +Uref -Uref A A RA3 RA2
12 1100 A +Uref -Uref A A RA3 RA2
13 1101 D +Uref -Uref A A RA3 RA2
14 1110 D D D D A +Uп GND
15 1111 D +Uref -Uref D A RA3 RA2

В строках, закрашенных серым цветом, Вы видите повторяющиеся настройки, на


которые можно просто не обращать внимания.
Наличие этих повторений обусловлено тем, что в PIC16F873A (876A) используется не
8, а 5 каналов АЦП.
При работе с PIC16F874A (877A), имеющем 8-канальный модуль АЦП, эти строки
игнорировать нельзя (таблица будет содержать на 3 столбца больше), так как
повторений не будет.
- буква А указывает на то, что соответствующий вывод порта А будет работать как
аналоговый вход (чтение состояния аналогового входа дает ноль).
- буква D указывает на то, что соответствующий вывод порта А будет работать как
цифровой канал ввода/вывода, а проще говоря, он будет работать в обычном,
"штатном" режиме, в котором "АЦП-дела ему по барабану".
Таким образом, при помощи битов PCFG3…0, можно задействовать от нуля и до пяти
каналов АЦП.
Соответственно, после назначения той или иной комбинации битов PCFG3…0,
становится понятным, к какому выводу порта А нужно подключить выход внешнего
источника аналогового сигнала (или "к каким выводам", если речь идет о нескольких
источниках аналогового сигнала).
Это лучше "утрясти" на начальной стадии конструирования.
Теперь нужно разобраться с опорным напряжением (в таблице - Uоп).
Необходимость "введения в оборот" такого понятия, как "опорное напряжение",
обусловлена необходимостью "привязки" результата аналого – цифрового
преобразования к какому-то диапазону напряжений, в пределах которого происходит
изменение мгновенных значений напряжений аналогового сигнала (его "ширина" и
"координаты" могут быть различными).
А как же без этого?
Без этого - "бардак" и "непонимайки".
Рассуждаю в общем виде.
Любой аналоговый сигнал, "живущий" в положительной области напряжений (ПИКи
работают в этой области), имеет "потолок" амплитуды.
Это есть точка верхнего экстремума (наибольшего значения).
Примечание: экстремум это математическое понятие - наибольшее и наименьшее
значение функции.
И точка нижнего экстремума (наименьшего значения) имеется.
То, что располагается между ними, и есть диапазон изменения мгновенных значений
напряжений аналогового сигнала.
Далее идет "ветвление" на варианты.
В простейшем и самом удобном случае, нижний экстремум принимается равным нулю
вольт (-Uоп = 0).
Если принять значение верхнего экстремума равным напряжению источника питания, то
вообще получается "красота и ляпота".
Например, при Uп. = 5 вольт, шаг квантования по уровню (стандартное определение)
получается равным 5/1024 (для 10-разрядного АЦП) = 0,0048828 вольта.
Как-то "рогато" получается.
А если принять Uп. = 5,12 вольта?
Получается 5,12/1024 = 0,005 вольта (5 мв.).
Это "смотрится гораздо симпатичнее".
А если взять в руки паяльник и припаять, между выходом источника аналогового
сигнала и входом активного канала АЦП, делитель напряжения с Кдел = 20?
Шаг квантования по уровню, приведенный ко входу делителя, увеличится до 0,005 х 20
= 0,1 вольта.
Это вообще прекрасно, так как осуществилась "десятичная привязка" результата
аналого – цифрового преобразования к уровню аналогового сигнала (того, что на входе
5
делителя напряжения), с точностью 0,1 вольт (шаг замера напряжения, определяющий
погрешность измерения).
Если нужно "привязаться" к точности (погрешности) в 0,01 вольт, то потребуется
делитель напряжения с Кдел = 2, а если нужно "привязаться" к точности 1 вольт, то
потребуется делитель напряжения с Кдел = 200.
Если, в данном случае, речь идет о цифровом вольтметре, то нужно "протащить"
результат АЦП через ПП 2/10 преобразования и вывести результат 2/10
преобразования на индикацию, не забыв при этом выставить, в нужном месте,
запятую.
Если речь идет об одном канале АЦП, то луше всего использовать настройку строки
14 (см. таблицу).
Если имеет место быть эта настройка, то внутри ПИКа, автоматически (аппаратно)
"выставляется" диапазон квантования по уровню от 0 вольт (GND) до значения
напряжения, которым запитывается ПИК (+Uп.).
То же самое происходит и при выставлении настроек строк 1, 5, 7 (с учетом А и D).
Практический смысл настройки строки 7 достаточно "туманен" (аналоговых входов нет).
Можно предположить, что эта настройка применяется либо в случае нежелательности
отключения модуля АЦП, либо в случае, когда нужно, на какое-то время,
задействовать вывод (выводы) аналогового входа (входов) как цифровой канал
ввода/вывода (в жизни всякое бывает).
Следующий вариант, посложнее.
А если, по сравнению с диапазоном напряжения от 0 до +Uп., диапазон изменений
мгновенных значений напряжений аналогового сигнала узок?
Например, при Uп. = 5 вольт, нижний экстремум равен 2-м вольтам, а верхний
экстремум равен 4-м вольтам.
Следовательно, при наличии любой из настроек, ориентированных на диапазон
квантования по уровню от 0 в. До 5 в., диапазон нижней "мертвой зоны" будет
составлять 2 в., а диапазон верхней "мертвой зоны" будет составлять 1 в.
"Мертвыми" я их назвал потому, что в этих "зонах" не будет производиться аналого –
цифрового преобразования по той простой причине, что, в данном случае, это не есть
"ареал обитания" аналогового сигнала (он "обитает в другом месте").
А "ресурсы-то под это дело выделены". И немалые.
Как-то не хорошо, не по-хозяйски получается.
Гораздо "симпатичнее смотрится" тот случай, когда ширина диапазона квантования
равна (или почти равна) ширине диапазона изменений мгновенных значений
напряжений аналогового сигнала, и они "наложены" друг на друга.
Как "навести в этом безобразии марафет" ("сердце кровью обливается")?
Разработчики оказались людьми с пониманием. Вошли в положение.
Они придумали нечто обозначенное как +Uref и -Uref.
Анализируя содержимое таблицы, не трудно догадаться, что к +Uref "привязан" вывод
RA3, а к -Uref "привязан" вывод RA2.
То есть, +Uref и -Uref это какие-то уровни напряжений, поступающие в модуль АЦП
извне (через RA3 и/или RA2).
Разумно предположить, что с их помощью можно "подвигать границы", и привести тем
самым диапазон квантования в какое-то соответствие диапазону изменений мгновенных
значений напряжений аналогового сигнала: либо уравнять, либо соблюсти какую-то
пропорцию, либо еще что-то.
Это зависит от конкретной задумки, в том числе и от результатов расчетов шага
квантования по уровню и Кдел. внешнего делителя напряжения.
+Uref есть верхняя "граница" диапазона квантования по уровню, а -Uref есть нижняя
"граница" диапазона квантования по уровню.
Задавая значения +Uref и -Uref, можно:
- задать ширину диапазона квантования по уровню (квантуется тот диапазон
напряжений, который расположен между +Uref и -Uref). При этом, он автоматически
(аппаратно) "разбивается" на 1024 равные части,
- сместить диапазон квантования по уровню (по оси напряжений) таким образом, что
он, в той или иной степени, "наложится" на диапазон изменений мгновенных
значений напряжений аналогового сигнала (совмещение или "накладка").

6
Что касается последнего, то часто нижним экстремумом считается нулевой уровень
напряжения.
В этом случае, задается только +Uref (настройки строк №№2 и 6), а -Uref аппаратно
"сидит на корпусе" (GND).
Будет "проквантован" диапазон напряжений от 0 в. до значения напряжения, поданного
на вывод RA3 (+Uref)
В случаях наличия настроек строк №№8, 13, 15, будет "проквантован" диапазон
напряжений, расположенный между +Uref и -Uref.
В указанном выше случае (-Uref = 2 в., +Uref = 4 в.), будет "проквантован" диапазон
напряжений от 2-х до 4-х вольт (шаг квантования = {4 – 2}/1024 = 0,0019531 в).
В целях обеспечения качественного аналого – цифрового преобразования, опорные
напряжения, подаваемые на выводы RA3 и RA2, должны быть стабильными по уровню
напряжения (чем стабильнее, тем лучше).
Примечание: хотя и допускается выход +Uref и -Uref за пределы диапазона
напряжений от 0 в (GND) до +Uп (не более чем на 0,3 вольта), но лучше этого не
допускать, а выбирать +Uref и -Uref только в диапазоне напряжений от 0 в (GND) до
+Uп (береженого Бог бережет).
То же самое относится и к диапазону изменения напряжений аналогового сигнала (не
того, что на входе внешнего делителя напряжения, а того, что на выводах RA0…3,5).
Теперь давайте разберемся с выравниванием.
Но перед этим, нужно разобраться с тем, куда помещается результат АЦП ("закрома").
Имеет место быть 10-разрядный результат АЦП.
Это один байт целиком и 2-битный "хвостик".
Так как ПИКи "хвостики в упор не признают", то результат АЦП "разместится" в двух
байтах.
Это байты регистров специального назначения с названиями AdresH (0-й банк, адрес
1Eh) и AdresL (1-й банк, адрес 9Eh).
Они образуют 2-байтный регистр результата АЦП AdresH/AdresL (AdresH - регистр
старшего байта, AdresL - регистр младшего байта).
Из-за наличия 2-битного "хвостика", имеет место быть 6 "свободных"
(незадействованных) битов.
Куда их "прислонить, чтобы не мешались"?
С целью "наведения порядка в этом вопросе", разработчики "рубанули": правое и
левое выравнивание, "и никаких гвоздей". Точка.
В этом я с ними категорически согласен.
"Правила игры" нужны (в "железячных вопросах" все должно быть "строго
перпендикулярно"). Они такие:

1. Правое выравнивание имеет место быть в случае "загона" 6-ти "свободных" битов
в "левый угол" 2-байтного регистра результата АЦП.
В этом случае, 2-байтный регистр результата АЦП принимает вид
AdresH,1,0/AdresL7,6,5,4,3,2,1,0 (биты AdresH,7,6,5,4,3,2 читаются как 0).

2. Левое выравнивание имеет место быть в случае "загона" 6-ти "свободных" битов
в "правый угол" 2-байтного регистра результата АЦП.
В этом случае, 2-байтный регистр результата АЦП принимает вид
AdresH,7,6,5,4,3,2,1,0/AdresL7,6 (биты AdresL,5,4,3,2,1,0 читаются как 0).

На мой взгляд, наиболее востребованным (привычным) является правое выравнивание,


хотя можно применить и левое. Это каждый решает для себя.
После "конфигурирования" содержимого управляющего регистра AdCon1, нужно заняться
"конфигурированием" содержимого управляющего регистра AdCon0.

Регистр AdCon0 (для PIC16F873A и …876А).

Биты №№7,6 : выбор источника тактового сигнала


(ADCS1,0) 00 -> Fт = Fosc/2
01 -> Fт = Fosc/8
10 -> Fт = Fosc/32
7
11 -> Frc (внутренний RC генератор модуля АЦП)

Биты №№5,4,3 : выбор аналогового канала.


(CHS2,1,0) 000 -> канал 0 (RA0/AN0)
001 -> канал 1 (RA1/AN1)
010 -> канал 2 (RA2/AN2)
011 -> канал 3 (RA3/AN3)
100 -> канал 4 (RA5/AN4)

Бит №2 : бит (флаг) статуса модуля АЦП


(GO/-DONE) активен, если модуль АЦП включен (ADON = 1)
1 -> "запуск" аналого – цифрового преобразования
0 -> состояние ожидания (в конце АЦП - аппаратный сброс).

Бит №1 : не используется (читается как 0)

Бит №0 : бит вкл./выкл. модуля АЦП


(ADON) 1 -> модуль АЦП включен
0 -> модуль АЦП выключен и не потребляет тока

Биты №№7 и 6 "отвечают" за выбор источника тактового сигнала.


А как же иначе, ведь "жизнеутверждающие пинки" для процесса АЦП архинужны (это
все равно что телега без лошади).
Между частотой тактирования и скоростью АЦП существует прямо пропорциональная
зависимость.
Через 100 нс (мизер. Можно не учитывать) с момента разрешения АЦП (программное
поднятие флага статуса модуля АЦП), конденсатор Hold аппаратно отключается от
активного аналогового входа и подключается к входу устройства АЦП.
После этого начинается аналого – цифровое преобразование.
По времени, один цикл АЦП состоит из 11-ти равных друг другу интервалов времени.
10 из них есть интервалы времени последовательного формирования уровней битов
10-битного слова результата АЦП, и один интервал времени является
"технологическим" (он "проходит" первым).
Время формирования уровня одного бита (или время преобразования одного бита)
это важный параметр АЦП.
Его назвали Tad, и его значение напрямую зависит от длительности периода тактового
сигнала (кратно ему).
Существует вполне определенный диапазон возможных значений Tad, в "границах"
которого разработчики гарантируют качественную работу модуля АЦП и за "границы"
которого "заходить" нельзя.
Левая "граница" этого диапазона определяется максимальным быстродействием модуля
АЦП, и она равна 1,6 мкс.
Правая "граница" диапазона Tad равна 8 мкс.
Реально (с учетом "перестраховки") нужно обеспечить "втискивание" Tad в диапазон
от 2 мкс. до 6 мкс.
Успешность этого "втискивания", в комплексе с обеспечением заданного быстродействия
аналого – цифрового преобразования, архизависит от выбора частоты источника
тактового сигнала (биты №№7,6 регистра AdCon0, о которых и идет речь).
Так что, "это дядя серьезный", и его нужно всячески уважать.
Биты с №№5,4,3 "рулят" выбором активного, аналогового канала АЦП.
При этом, должен выбираться только тот канал, который настроен (в AdCon1) как
аналоговый вход.
За один "присест", можно выбрать только один аналоговый канал АЦП (сделать его
активным), и не более того (конденсатор-то один).
Если нужно работать с несколькими каналами АЦП, то в программе нужно
организовать последовательный опрос этих каналов (порядок опроса задает
программист).

8
Делается это достаточно просто: организуется кольцевой счетчик, "гоняющий по малому
кольцу" (напоминаю про максимум в 5 каналов), который инкрементируется (или
декрементируется) до или после опроса активного (текущего) канала АЦП.
В зависимости от результата инкремента/декремента, выбирается сценарий опроса
(активизации) следующего канала АЦП, и т.д.
В данном случае (PIC16F873A), может быть опрошено до пяти каналов включительно.
Теперь о подключении/отключении конденсатора Hold.
Он "ориентирован" на активный канал АЦП и подключается только к его входу.
Но не на все время этой активности.
От входа активного канала АЦП конденсатор Hold отключается через 100 нс. после
программного поднятия флага статуса модуля АЦП, и он будет отключен от входа
активного канала АЦП в течение всего времени аналого – цифрового преобразования
уровня текущей выборки.
После окончания аналого – цифрового преобразования, он снова, аппаратно
подключается к входу активного канала АЦП.
При смене активного канала АЦП, конденсатор Hold переключается на вход этого
активного канала.
Бит №2 есть бит (флаг) статуса модуля АЦП ("начальник с большущим статусом").
После его программной установки в 1, начинается аналого – цифровое преобразование
того уровня выборки, который "запомнился" в конденсаторе Hold.
По окончании АЦП, в бите статуса, аппаратно (программно сбрасывать его не нужно),
устанавливается 0, что и есть "сигнал" завершения АЦП, на который нужно всячески
ориентироваться.
Пока бит статуса модуля АЦП "находится в нуле", никаких "АЦП-телодвижений" не
происходит.
Это соответствует состоянию ожидания следующего цикла АЦП.
Флаг (бит) статуса модуля АЦП "функционирует" только тогда, когда модуль АЦП
включен.
Бит №0 есть "рубильник", которым включается/выключается модуль АЦП.
А что может быть мудреного в "рубильнике"?
Про бит №1 вообще даже и не заикаюсь ("мусор").

То что Вы прочитали, есть "база".


Естественно, что существуют различные нюансы, которые я, в целях обеспечения
"нерастрепанности мыслей", не стал "валить в одну, общую кучу".
Дойдет дело и до них.
Сейчас же важно сформировать общую ("стратегическую") "картину" работы модуля
АЦП, с учетом его "встроенности" в некую "гипотетическую железяку" (тайные
стремления и задумки есть у всех).
Первое что приходит на ум - цифровой вольтметр, а если говорить в общем виде -
преобразователь уровня.
Его и буду "терзать" в следующем подразделе.
А по ходу дела, и с нюансами будут "разборки", и "скелет" полезной "железяки"
обозначится.

"Практикум по конструированию устройств на PIC контроллерах"      http://ikarab.narod.ru       E-mail: karabea@lipetsk.ru