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

6/1.

Объяснение работы модуля компараторов и модуля источника опорного


напряжения (во всех режимах их работы) PIC16F628A, с “привязкой” к практике.

Первичное представление о модуле компараторов, входящем в состав PIC16F628A,


дано в подразделе 1/4 “Самоучителя по программно – аппаратному анализу” (см. стр. 6
… 8, просьба перечитать).
В данном случае, речь шла о работе одного из двух компараторов, входящих в состав
модуля компараторов PIC16F628A, причем, в динамическом режиме (надобность в
задействовании внутреннего или внешнего источника опорного напряжения отсутствует).
Но кроме режима работы с задействованием только одного компаратора, существуют и
другие режимы.
Они задаются битами CM2 … CM0 регистра CMCON (см. стр. 54 даташита
PIC16F628A).
Для того чтобы стало понятно, что к чему, на стр. 55 даташита, есть таблица режимов
работы модуля компараторов.
Сразу обращаю Ваше внимание на опечатку (ошибку), допущенную в “толковище”
функций битов регистра CMCON, в части касающейся бита №3 (см. стр. 54).
Следует читать не “Если CM2 … CM3 = 001/010”, а “Если CM2 … CM0 = 001/010”.
Разбираемся с режимами работы.

1. Сброс компараторов.

При любом виде сброса PIC16F628A, во всех битах регистра CMCON, автоматически,
устанавливаются нули (см. рис. 1).
По ходу исполнения “рабочей” части программы, в которой задействуется модуль
компараторов, этот режим практически не применяется, так как после программного
сброса компараторов, их нужно настраивать под “нужды программы”, что не является
оптимальным решением (зачем 2 раза настраивать режимы, когда достаточно одной
настройки).
Может быть и есть какие-то “экзотические” случаи программного сброса компараторов
(не путать с аппаратным, то есть, автоматическим сбросом), но мне они как-то на
глаза не попадались.
А вот на аппаратный сброс (например, сброс POR, а также и другие) нужно обратить
внимание в связи с тем, что после сброса, в регистре CMCON, устанавливаются
настройка по умолчанию (все нули).
В соответствии с этой настройкой, к выводам RA0 … RA3 будут подключены входы
компараторов.
Если эти выводы (или даже один из них) задействуются в программе под нужды, не
связанные с применением компараторов, то работа программы (устройства) будет
нарушена (функциональность выводов/вывода не соответствует требуемой).
Получится “непонимайка” типа “я тебе толкую про Фому, а ты мне про Ерему”.
Вывод: в начале полных циклов программ (в большинстве своем, в ПП START),
составленных под PIC16F628A, обязательно нужно производить настройку модуля
компараторов.
Будет ли это какое-то конкретное конфигурирование модуля компараторов (модуль
задействуется) или это будет отключение модуля компараторов (модуль не
задействуется), определяется конкретной задумкой программы, но в любом случае, в

1
начале полного цикла программы, составленной под PIC16F628A, обязательно должна
присутствовать процедура той или иной “настройки” битов регистра CMCON.
В противном случае, в соответствии с настройками по умолчанию, к выводам RA0 …
RA3 будут подключены входы не работающих компараторов, что, как сами понимаете,
не есть хорошо, и особенно в тех случаях, когда один или несколько этих выводов
задействуются под функциональность, отличную от функциональности модуля
компараторов.
Исключение - выводы RA0 … RA3 не задействуются и модуль компараторов не
используется. В этом случае, в ПП START, настройку модуля компараторов (его
отключение) производить не нужно.
А какой смысл? Пусть будет настройка по умолчанию.
В данном случае, от этого “не жарко и не холодно”.
Далее возникает следующий вопрос общего плана (раз уж повод подвернулся): “По
аналогии с настройками модуля компараторов, обязательно ли нужно, в начале
полного цикла программы, программно производить отключение остальных модулей
PIC16F628A (в случаях, если они не используются в программе), не входящих в состав
PIC16F84A”?
Ответ: нет, не обязательно.
После сброса POR (по включению питания), а также после других сбросов, настройки
по умолчанию таковы, что все упомянутые выше модули (источник опорного
напряжения, USART, TMR1, TMR2, CCP) просто - напросто выключаются и лишний раз
подтверждать их выключение, в некоторых случаях, не стоит.
Что значит “в некоторых случаях”?
Представьте себе то, что, в начале полного цикла программы, произведена только
одна настройка модуля компараторов, а упомянутые выше модули не задействуются и
настроены по умолчанию (выключены).
Если сбоев в работе программы (устройства) нет, тогда “все мягко и пушисто”.
А если есть?
А если они повлияли на настройки модулей PIC16F628A, о которых идет речь?
Возможен “висяк”, выйти из которого, при условии отсутствия сбросов, можно только
организовав сброс POR, а проще говоря, выключив, а затем включив питание.
Такое “счастье” и даром не нужно.
Из этого следуют 2 достаточно незамысловатых вывода:
1. В случаях задействования в программе WDT (сброс по срабатыванию WDT – самый
“ходовой” вид сброса), в начале полного цикла программы, достаточно произвести
только одну настройку модуля компараторов (регистр CMCON), а настроек модулей
источника опорного напряжения, USART, TMR1, TMR2, CCP, не производить (по
умолчанию, они выключаются).
В этих случаях, при возникновении всяких “бяк” (сбоев), сработает WDT, после чего
все настройки восстановятся (без манипуляций с выключателем питания).
Именно это я и “провернул” в 1-м разделе “Самоучителя по программно – аппаратному
анализу”.
2. Если WDT в программе не используется, то, в “перестраховочных” целях, в начале
полного цикла программы, лучше произвести настройки всех модулей PIC16F628A, не
входящих в состав PIC16F84A, причем так, чтобы они подтверждались не только на
первом “витке” полного цикла программы, но и на последующих.
Посмотрите в текст программы 84_828.asm (24-й раздел “Самоучителя по
программированию PIC контроллеров для начинающих”). Это как раз тот случай.
Если WDT в программе не используется, то конечно же, можно и рискнуть (сработать
по п. 1), но только в случае разработки какого-то “локального” устройства.
В случае же массового тиражирования устройства, лучше либо “перестраховаться” в
соответствии с п. 2, либо задействовать WDT.
Примечание: под настройкой модуля понимается как его включение (перевод в
активное состояние), так и его выключение (перевод в пассивное состояние).
Первичная настройка любого модуля (настройка по умолчанию) производится при
сбросе POR (“штатная” инициализация ПИКа при включении питания).
Если настройка по умолчанию не соответствует той, которая требуется (а это имеет
место быть в подавляющем большинстве случаев), то эта требуемая настройка
производится в “рабочей” части программы (в основном - в ПП START).
2
2. Выключение компараторов.

Главное отличие этого режима (CM2 … CM0 = 111) от предыдущего (CM2 … CM0 = 000)
состоит в том, что входы компараторов отключаются от выводов RA0 … RA3, что есть
большой “зер гут”.
Именно этот режим применяется в том случае, когда модуль компараторов в
программе вообще не задействуется или задействуется не на все время полного цикла
программы, а на время части (частей) полного цикла программы.
Из последнего следует то, что, по ходу исполнения программы, модуль компараторов
можно включать (по мере появления необходимости в его задействовании), а также и
выключать (если необходимости в его задействовании нет).
Это выгодно в том смысле, что, на время выключения модуля компараторов,
высвобождаются соответствующие выводы порта А, которые можно использовать для
решения каких-либо задач, не связанных с “оцифровкой” аналогового сигнала
(вывод/выводы порта с совмещенной функциональностью).
Если компараторы выключены, то так же, как и после сброса компараторов, биты №
№6 и 7 регистра CMCON (состояния выходов компараторов) будут всегда читаться как
нули.
При этом, состояния битов регистра CMCON с №№3,4,5 могут быть любыми.
Следует также отметить то, что в выключенном состоянии, модуль компараторов
потребляет минимальный ток, и поэтому, если нет необходимости выхода из спящего
режима (SLEEP) по прерыванию от компараторов (а возможность такового существует),
то перед переходом в спящий режим, в целях минимизации потреблемого в этом
режиме (SLEEP) тока, модуль компараторов выгодно отключить, а после выхода из
спящего режима, его нужно включить тогда, когда он потребуется.
Соответственно, если из спящего режима нужно выйти по прерыванию от компараторов
(они должны быть разрешены), то модуль компараторов отключать не нужно.
Если модуль компараторов активен (включен), то переход в спящий режим никак не
влияет на его работу: как он работал “до того”, так он будет работать и “после того”.

3. Работает один компаратор.

3
Это тот случай, который был рассмотрен в 1-м разделе “Самоучителя по программно –
аппаратному анализу”.
“Расширяю и углубляю”.
Синим цветом выделены состояния битов, “рулящих” компаратором №1 (биты №4 –
C1INV и бит №6 – C1OUT), а так как он отключен, то их состояния не важны (могут
быть любыми).
Бит №3 (CIS) работает только при настройках CM2 …CM0 001 и 010.
Так как настройка 101 “не лезет в эти ворота”, то, в данном случае, бит №3
настраивать не нужно, и в нем, так же, как и в битах №№4,6, “от балды”, можно
выставить или 0, или 1 (см. значек “х”).
Ноль в бите №6 я указал с целью обращения Вашего внимания на то, что с выхода
не работающего компаратора всегда считывается 0.
При настройке регистра CMCON, в биты №6 и №7 можно записать все что угодно (0
или 1).
Толку от этого никакого, так как состояния этих битов можно только считать.
Поэтому такая запись (в части касающейся битов №№6,7) является формальной и
необходимость ее обусловлена тем, что ПИКи обрабатывают “полноценные” байты
(более подробно - см. 1-й раздел “Самоучителя по программно – аппаратному
анализу”).
Для работающего компаратора, эти состояния определяются соотношениями уровней
напряжений на выводах RA1 и RA2.
Если же компаратор отключен, то с его выхода всегда будет считываться 0.
В данном случае, 0 всегда будет считываться с выхода отключенного компаратора №1.
По этой простой причине, в данном случае, чтение бита №6 является достаточно
“идиотским” занятием.
Итак, в данном случае, при настройке модуля компараторов, в биты регистра CMCON
с №3,4,6 можно писать “все что угодно” (0 или 1).
Об остальных битах этого сказать нельзя.
С первыми тремя “активными” битами все понятно, это выбор режима работы
компаратора.
А вот что определяет бит №5?
Объяснение для электронщиков: как известно, если на один из входов (управляющий
вход) сумматора по модулю 2 (“Исключающее ИЛИ”) подать управляющее напряжение,
а на другой вход (сигнальный вход) подать некую импульсную последовательность, то
в зависимости от уровня управляющего напряжения (0 или 1), на выходе сумматора
по модулю 2 будет присутствовать та же импульсная последовательность, только в
одном случае она будет синфазна входной импульсной последовательности (прямой
выход), а в другом случае - противофазна (инверсный выход).
Так вот, можно представить себе, что состояние бита №5 и есть этот сигнал
управления.
В одном случае, сигнал с физического выхода компаратора не инвертируется (прямой
выход), а в другом случае инвертируется (инверсный выход).
Состояния же физического выхода этого сумматора по модулю 2 и определяют
состояния бита №7 регистра CMCON.
То есть, выходом компаратора считается не его физический выход, а физический
выход сумматора по модулю 2.
Схемотехника всего этого “хозяйства” может быть и иной (хотя, навряд ли), но принцип
один и тот же.
Чтобы это было понятно, приведу пример.
1. Настройка регистра CMCON в случае работы одного компаратора (№2).
Выход – прямой.
В регистр CMCON следует записать 0000 0101 (бит №5=0).
В этом случае, бит №7 установится в 1 при выполнении неравенства U+ > U-,
а в 0 - при выполнении неравенства U+ < U-.
2. Настройка регистра CMCON в случае работы одного компаратора (№2).
Выход – инверсный.
В регистр CMCON следует записать 0010 0101 (бит №5=1).
В этом случае, бит №7 установится в 1 при выполнении неравенства U+ < U-,
а в 0 - при выполнении неравенства U+ > U-.
4
Чтобы стало еще понятнее, посмотрите на рис. 4.
На этой картинке “разрисованы” не только 2 указанных выше варианта работы одного
компаратора (эпюры А и С), но и другие варианты его работы в “статическом” режиме
(о “статическом” режиме - см. стр. 8, 4-го подраздела, 1-го раздела “Самоучителя по
программно – аппаратному анализу”).

Как видите, одной и той же цели (пары эпюр A,C и B,D) можно добиться двумя
способами. Таким образом, существует даже возможность выбора.
То же самое, с учетом специфики (например, выход компаратора - CMCON,6 и т.д.),
относится и к компаратору №1, если он включен (например, если CM2 … 0 = 100. Об
этом – ниже.) и задействуется.
Теория теорией, но проверочка не помешает.
С этой целью я “родил” простенькое устройство и такую же простенькую программу
под него, с названием CMCON.asm.

;************************************************************************
; CMCON.asm Учебная программа 6-го раздела "Практикума по
; конструированию устройств на PIC контроллерах".
; Корабельников Е.А. http://ikarab.lipetsk.ru E-Mail: karabea@lipetsk.ru
;************************************************************************
; Режим работы: CM2 ... CM0 = 101 (работает один компаратор №2).
5
;************************************************************************
; Частота кварца 4000 кГц.
;========================================================================
LIST p=16F628A ; Определение типа микроконтроллера.
__CONFIG 03F25H ; Биты конфигурации: защита выключена,
; WDT включен, стандартный XT –
; генератор, PWRT включен.
;========================================================================
; Определение положения регистров специального назначения.
;========================================================================
PC equ 02h ; PC.
Status equ 03h ; Status.
PortA equ 05h ; Порт A.
TrisA equ 05h ; Tris A - банк1.
IntCon equ 0Bh ; IntCon.
CMCON equ 1Fh ; CMCON. Модуль компараторов.
;========================================================================
; Назначение названий битам.
;========================================================================
RP0 equ 5 ; Бит выбора банка.
;========================================================================
org 0 ; Начать выполнение программы с PC=0.
;************************************************************************

;************************************************************************
; Подготовительные операции.
;========================================================================
clrf IntCon ; Запрет всех прерываний.
clrf PortA ; Сброс в 0 защелок порта А.

bsf Status,RP0 ; Переход в 1-й банк.


movlw b'00000110' ; RA1 и RA2 работают на вход,
movwf TrisA ; остальные - на выход.
bcf Status,RP0 ; Переход в 0-й банк.
;---------------------------------------
; Настройка компаратора №2.
;---------------------------------------
movlw b'00000101' ; Работает один компаратор
movwf CMCON ; №2, выход - прямой.
;========================================================================
; "Переправка" результата работы компаратора №2 на вывод RA3 и
; "закольцовка" рабочей точки программы в "вечном", проверочном кольце.
;========================================================================
SNOVA btfsc CMCON,7 ; Проверка состояний бита №7 регистра
goto $+3 ; CMCON (выхода компаратора).
bcf PortA,3 ; Если CMCON,7=1, то на RA3 выводится
goto $+2 ; 1 (светодиод горит), а если
bsf PortA,3 ; CMCON,7=0, то на RA3 выводится 0
; (светодиод погашен).
; В любом из этих случаев - переход
; на команду clrwdt.
clrwdt ; Сброс WDT.
goto SNOVA ; Переход на следующее кольцо
; проверки.
;************************************************************************
end ; Конец программы.

Эта программа (и последующие) рабочая, проверена в “железе”.

6
Ничего особо выдающегося в ней нет, только обратите внимание на то, что после
завершения всех необходимых программных настроек, компаратор “в услугах
программы больше не нуждается”.
После этих настроек, программа может работать как угодно (до следующей настройки,
влияющей на режим работы компаратора), и даже вообще прекратить свою динамику
(например, уйдя в режим SLEEP).
Компаратору на это “глубоко начихать”. Он работает “сам по себе” (то же самое
относится и к последующим режимам работы), лишь бы в оперативной памяти ПИКа
сохранились настройки модуля компараторов.
Это “начихание” я и продемонстрировал, “закольцевав” рабочую точку программы в
“вечном кольце” ПП SNOVA.
Она там может “крутиться до скончания века” (только не “предпринимая попыток”
перестройки компаратора), в том числе и “делая различные полезные дела” (что,
кстати, и имеет место быть).
На работу компаратора это не влияет.
В данном случае, опорное напряжение подается на вход компаратора U+ (RA2).
Оно снимается с делителя R1R2 и равно примерно половине значения напряжения
питания (примерно +2,5в).
Аналоговый сигнал имитирует напряжение, снимаемое с контакта движка переменного
резистора R6.
Оно подается на вход компаратора U- (RA1).
Соответственно, выводы RA1 и RA2 должны быть настроены на работу “на вход”.
Выход - прямой.
Далее, можно поэкспериментировать (покрутить движок R6 с соответствующими
замерами Uсигн.).
В данном случае, единица на выходе компаратора (светодиод “горит”) появляется в
том случае, если U+ > U- (Uоп. > Uсигн.).
При U+ < U- (Uоп.< Uсигн.), на выходе компаратора будет ноль (светодиод “погашен”).
Это соответствует случаю, показанному на эпюре А рис. 4.
Если, при настройке компаратора, “прописать” movlw b'00100101' (C2INV=1), то будет
иметь место быть случай, показанный на эпюре D (инверсный выход).
Если перепаять (поменять местами) цепи, подключаемые к выводам RA1, RA2 и
произвести указанные выше манипуляции, то будут иметь место быть случаи,
показанные на эпюрах B и C.
Вот теперь в мозгах порядок: и внял, и пощупал, и с умом “за сиську дернул” (а то
ведь можно и “копытом в лоб заработать”), и на практике убедился, что “корова дает
молоко” и не “брыкается”.
“Надоил” пока маловато, но ничего, “еще не вечер”…

4. Два независимых (отдельных) компаратора.

В этом случае (CM2 …0 = 100), работают оба компаратора, причем, электрически, они
“развязаны” друг от друга.
С их помощью, можно произвести “оцифровку” двух аналоговых сигналов, причем, с
установкой двух различных уровней опорного напряжения (под каждый аналоговый
сигнал свое Uоп).
7
На рис. 5 показан вариант настройки регистра CMCON, для случая организации прямых
выходов.
Естественно, в зависимости от конкретной задачи (с учетом рис. 4), настройка битов
№4 (C1INV) и №5 (C2INV) может быть иной.
В бит №3 (CIS) можно записать любое значение (0 или 1), так как данная настройка
CM2 …0 = 100 не есть настройка 001 или 010.
Под этот режим можно “сваять” проверочное устройство, аналогичное описанному
выше.
В этом случае, при настройке компараторов (обратите внимание на множественное
число), изначально, нужно “прописать” movlw b'00000100' и в ПП SNOVA организовать
две последовательные проверки состояний выходов компараторов (CMCON,6 и
CMCON,7 Об этом - ниже).
Так как RA3 задействуется под вход U+ компаратора №1, то нужно убрать с него
Д1R4 и настроить его на работу “на вход”.
Этот светодиод (индикация состояния выхода компаратора №2), а также и еще один
дополнительный светодиод (индикация состояния выхода компаратора №1), лучше
всего “перебросить” в порт В, не забыв настроить его выводы на работу “на выход”.
Выводы RA0 и RA3 (а также и RA1, RA2) должны работать “на вход”, и к ним, так
же, как и к выводам RA1 и RA2, должны быть подключены источники Uоп. и Uсигн. (в
простейшем случае, такие же, как и на рис. 3А).
Далее, можно от души поэкспериментировать (по образу и подобию “эксперимента”,
описанного выше).
Все то же самое, только компараторов не один, а два (подчеркиваю, два отдельных
компаратора).

5. Два компаратора с общим источником опорного напряжения.

В этом случае (CM2 …0 = 011), также работают оба компаратора, но они, электрически,
“привязаны” друг к другу посредством внутреннего, электрического соединения выводов
U+.
При этом, вывод RA3 в “компараторных делах” не задействуется (плюс этого режима).
Данная схема включения компараторов применяется в тех случаях, когда нужно
“оцифровать” два различных аналоговых сигнала по одному “эталону” (общий источник
опорного напряжения).
На рис. 6 показан вариант настройки регистра CMCON, для случая организации прямых
выходов (для последующих режимов - так же).
Естественно, в зависимости от конкретной задачи (с учетом рис. 4), настройка битов
№4 (C1INV) и №5 (C2INV) может быть иной.
В бит №3 (CIS) можно записать любое значение (0 или 1), так как данная настройка
(CM2 …0 = 011) не есть настройка 001 или 010.
Обращаю Ваше внимание на то, что, де - факто, опорное напряжение может
подаваться не только на вывод U+, но и на вывод U-.
В данном случае, если подать два опорных напряжения различной величины на
выводы U-, а на точку соединения выводов U+ подать аналоговый сигнал, то можно
программно реализовать двухпороговый, аналоговый компаратор, в частности,

8
срабатывающий при попадании уровня аналогового сигнала в “сектор” напряжений,
ограниченный величинами опорных напряжений.
Можно сделать и наоборот (срабатывание вне этого “сектора”).
Примечание: то же самое относится и к двум следующим режимам работы.
Под “дойку этой коровы”, я “сваял” проверочное устройство (см. рис. 6А) и программу к
нему (см. CMCON_1.asm).
Все это “сооружение” прекрасно работает. Можете убедиться сами:

;************************************************************************
; CMCON_1.asm Учебная программа 6-го раздела "Практикума по
; конструированию устройств на PIC контроллерах".
; Корабельников Е.А. http://ikarab.lipetsk.ru E-Mail: karabea@lipetsk.ru
;************************************************************************
; Режим работы: CM2 ... CM0 = 011 (работают 2 компаратора с общим
; источником Uоп.).
;************************************************************************
; Частота кварца 4000 кГц.
;========================================================================
LIST p=16F628A ; Определение типа микроконтроллера.
__CONFIG 03F25H ; Биты конфигурации: защита выключена,
; WDT включен, стандартный XT –
; генератор, PWRT включен.
;========================================================================
; Определение положения регистров специального назначения.
;========================================================================
PC equ 02h ; PC.
Status equ 03h ; Status.
PortA equ 05h ; Порт A.
TrisA equ 05h ; Tris A - банк1.
IntCon equ 0Bh ; IntCon.
CMCON equ 1Fh ; CMCON. Модуль компараторов.
;========================================================================
; Назначение названий битам.
;========================================================================
RP0 equ 5 ; Бит выбора банка.
;========================================================================
org 0 ; Начать выполнение программы с PC=0.
;************************************************************************

;************************************************************************
; Подготовительные операции.
;========================================================================
9
clrf IntCon ; Запрет всех прерываний.
clrf PortA ; Сброс в 0 защелок порта А.
bsf Status,RP0 ; Переход в 1-й банк.
movlw b'00000111' ; RA0, RA1 и RA2 работают на вход,
movwf TrisA ; остальные - на выход.
bcf Status,RP0 ; Переход в 0-й банк.
;---------------------------------------
; Настройка компараторов.
;---------------------------------------
movlw b'00000011' ; Работает 2 компаратора,
movwf CMCON ; общий источник Uоп.
;========================================================================
; "Переправка" результатов работы компараторов на выводы RA3, RA4 и
; "закольцовка" рабочей точки программы в "вечном", проверочном кольце.
;========================================================================
SNOVA btfsc CMCON,6 ; Проверка состояний бита №6 регистра
goto $+3 ; CMCON (выхода компаратора №1).
bcf PortA,4 ; Если CMCON,6=1, то на RA4 выводится
goto $+2 ; 1 (светодиод горит), а если
bsf PortA,4 ; CMCON,6=0, то на RA4 выводится 0
; (светодиод погашен).
; В любом из этих случаев - переход
; на команду btfsc CMCON,7.
btfsc CMCON,7 ; Проверка состояний бита №7 регистра
goto $+3 ; CMCON (выхода компаратора №2).
bcf PortA,3 ; Если CMCON,7=1, то на RA3 выводится
goto $+2 ; 1 (светодиод горит), а если
bsf PortA,3 ; CMCON,7=0, то на RA3 выводится 0
; (светодиод погашен).
; В любом из этих случаев - переход
; на команду clrwdt.
clrwdt ; Сброс WDT.
goto SNOVA ; Переход на следующее кольцо
; проверки.
;************************************************************************
end ; Конец программы.

Программа CMCON_1.asm составлена по образу и подобию программы CMCON.asm,


только с учетом рассматриваемого режима работы.
Соответственно, в ПП SNOVA, организована не одна, а две проверки состояний
выходов компараторов.
“Транспортировка” ее результатов осуществляется на выводы RA3 (компаратор №2) и
RA4 (компаратор №1).
Так как вывод RA4 имеет открытый сток, он подтянут (нагружен) к +Uпит. резистором
R10.
В данном виде, имеет место быть логика работы, отображенная на эпюре А рисунка 4
(для любого из компараторов).
Естественно, можно поэкспериментировать с выходами (прямой или инверсный) или
даже “сваять” двухпороговый компаратор с одним выходом.
Для этого нужно поменять местами R1R2 и R5R6 (или R1R2 и R7R8).
После этого, вывод RA2 (U+) будет считаться сигнальным.
Uоп. на выводе RA1 будет фиксированным (+2,5в), а Uоп. на выводе RA0 можно
задать (например, 1в).
В ПП SNOVA, сначала нужно выяснить состояния битов №№6 и 7 регистра CMCON, а
затем обработать эти состояния с целью вывода результата этой обработки на один
вывод порта (к которому подключен контрольный светодиод).
В зависимости от логики обработки, можно сделать так, чтобы светодиод “загорался”
либо при попадании уровня аналогового сигнала в диапазон напряжений от 1 до 2,5в,

10
либо при попадании уровня аналогового сигнала в “секторы”, находящиеся вне этого
диапазона (справа и слева от него).

6. Два компаратора с общим источником опорного напряжения и внешним


выходом.

По существу, это то же самое, что и предыдущий режим, только к выводу RA3


электрически подключается выход компаратора №1, а к выводу RA4 электрически
подключается выход компаратора №2.
Это позволяет, без дополнительных, программных “телодвижений” (опросы CMCON,6 и
CMCON,7 с “переправкой” их результатов на выводы порта, хотя и это можно
сделать), вывести “наружу” результаты работы компараторов.
RA3 и RA4 должны быть настроены на работу “на выход”.
Напоминаю, что вывод RA4 нужно подтянуть резистором (Rнагр.) к плюсу источника
питания (создать нагрузку для каскада с открытым стоком).
Схема проверочного устройства под этот режим работы точно такая же, как и схема,
изображенная на рис. 6А.
А это программа под него:
;************************************************************************
; CMCON_2.asm Учебная программа 6-го раздела "Практикума по
; конструированию устройств на PIC контроллерах".
; Корабельников Е.А. http://ikarab.lipetsk.ru E-Mail: karabea@lipetsk.ru
;************************************************************************
; Режим работы: CM2 ... CM0 = 110 (работают 2 компаратора с общим
; источником Uоп. и внешним выходом).
;************************************************************************
; Частота кварца 4000 кГц.
;========================================================================
LIST p=16F628A ; Определение типа микроконтроллера.
__CONFIG 03F25H ; Биты конфигурации: защита выключена,
; WDT включен, стандартный XT –
; генератор, PWRT включен.
;========================================================================
; Определение положения регистров специального назначения.
;========================================================================
PC equ 02h ; PC.
Status equ 03h ; Status.
PortA equ 05h ; Порт A.
TrisA equ 05h ; Tris A - банк1.
IntCon equ 0Bh ; IntCon.
CMCON equ 1Fh ; CMCON. Модуль компараторов.
;========================================================================
; Назначение названий битам.
;========================================================================
RP0 equ 5 ; Бит выбора банка.
;========================================================================
11
org 0 ; Начать выполнение программы с PC=0.
;************************************************************************

;************************************************************************
; Подготовительные операции.
;========================================================================
clrf IntCon ; Запрет всех прерываний.
clrf PortA ; Сброс в 0 защелок порта А.
bsf Status,RP0 ; Переход в 1-й банк.
movlw b'00000111' ; RA0, RA1 и RA2 работают на вход,
movwf TrisA ; остальные - на выход.
bcf Status,RP0 ; Переход в 0-й банк.
;---------------------------------------
; Настройка компараторов.
;---------------------------------------
movlw b'00000110' ; Работает 2 компаратора, общий
movwf CMCON ; источник Uоп., внешний выход.
;========================================================================
; "Закольцовка" рабочей точки программы в "вечном кольце".
;========================================================================
SNOVA clrwdt ; Сброс WDT.
goto SNOVA ; "Закольцовка" в "вечном кольце".
;************************************************************************
end ; Конец программы.

Ознакомившись с текстом программы CMCON_2.asm, сразу можно понять преимущество


этого режима по сравнению с остальными - малое количество команд.
И в самом деле, биты с №№6 и 7 регистра CMCON опрашивать не нужно и ничего
“транспортировать” тоже не нужно.
Выходы компараторов напрямую коммутируются на выводы RA3 и RA4.
При этом, результат работы компараторов точно такой же, как и в предыдущем
режиме работы. Вот и весь сказ.
Нужно только отметить, что в этом режиме работы нет запрета на работу с битами №
№6 и 7 регистра CMCON. Правда, практического смысла в такой работе - “кот
наплакал”, но мало ли … (всякие “выкрутасы” бывают). “В хозяйстве все пригодится”.

7. Два компаратора с общим источником опорного напряжения и возможностью


коммутации входа U- компаратора №1.

Это то же самое, что и режим №5, но только с возможностью переключения входа U-


компаратора №1 между выводами RA0 и RA3.
В этом случае, начинает работать бит №3 (CIS) регистра CMCON, так как именно он
“рулит” этими переключениями.
На рис. 8 показан случай коммутации входа U- компаратора №1 на вывод RA0 (CIS=0).
Если CIS = 1, то вход U- подключится к выводу RA3.

12
На мой взгляд, “механика” этого переключения так проста и незамысловата, что я не
стал, под этот режим, “ваять” проверочное устройство (и программу).

8. Два компаратора с общим источником опорного напряжения, подаваемого от


внутреннего источника опорного напряжения и возможностью коммутации
входов U- компараторов №1 и №2.

В данном случае, имеет место быть аналогия со спаренным, двухпозиционным


переключателем с двумя группами контактов. На рис. 9 Вы видите случай, когда CIS=0.
Если CIS=1, то оба переключателя будут находиться в нижнем положении.
А теперь обращаю Ваше внимание на то, что ранее речь шла о внешнем источнике
опорного напряжения.
В данном же случае, речь идет о внутреннем источнике опорного напряжения.
Режим №8 это единственный режим работы модуля компараторов, в котором возможна
работа с внутренним источником опорного напряжения.

Модуль источника опорного напряжения.

В идеале, любой источник опорного напряжения (и внешний, и внутренний) должен


формировать требуемое и абсолютно стабильное значение напряжения.
Как сами понимаете, это что-то типа утопии, навевающей грустные мысли о кладбище.
В реальной жизни этим и не пахнет.
Всегда существует какая-то погрешность, и задача сводится к ее минимизации.
Внутренний источник опорного напряжения PIC16F628A - не исключение.

13
“Сердцем” модуля источника опорного напряжения является обычный резисторный
делитель напряжения, с отводами от точек соединений резисторов.
Если модуль источника опорного напряжения включен, то этот делитель, через
открытый транзисторный ключ, подключается между корпусом и +Uпит.
Соответственно, стабильность опорного напряжения будет зависеть от стабильности
Uпит.
Естественно, что и “начинка” модуля источника опорного напряжения, в этом
отношении, тоже не безгрешна, но стараниями разработчиков, количество этих “грехов”
минимизировано.
Включение или выключение модуля происходит при помощи ключа 1, который
управляется уровнями бита №7 регистра VRCON (см. стр. 65 даташита PIC16F628A) с
названием VREN.
Если VREN = 0, то источник опорного напряжения выключен (потребление тока
минимально).
Если VREN = 1, то источник опорного напряжения включен (на него подано Uпит.).
Этот вариант Вы и видите на рис. 10.
Модуль источника опорного напряжения позволяет сформировать один из 16-ти
уровней напряжения на каждом из двух диапазонов напряжения (нижний и верхний
диапазоны).
Переключения диапазонов осуществляются при помощи ключа 2 (он шунтирует или нет
резистор, помеченный на рис. 10 как 8R), который управляется уровнями бита №5
регистра VRCON с названием VRR.
Если VRR = 0, то источник опорного напряжения выдаст один из 16-ти уровней
напряжения верхнего диапазона.
Если VRR = 1, то источник опорного напряжения выдаст один из 16-ти уровней
напряжения нижнего диапазона.
К точкам соединений резисторов подключены 16 входов аналогового мультипрексора
(коммутатора с одного из 16-ти входов на один выход).
Какой именно из 16-ти уровней напряжения будет “транспортирован” на выход
мультиплексора, зависит от адресного кода, подаваемого на 4 его адресных входа.
Адресный код есть не что иное, как “набор” уровней битов №№3 … 0 (VR3 … VR0)
регистра VRCON.
Таким образом, задавая значения битов VR3 … VR0, можно выбрать то или иное
фиксированное значение опорного напряжения.
Всего этих уровней - 32 (по 16 на каждом диапазоне).
Допустим, что такой выбор произошел.
Теперь это фиксированное значение опорного напряжения нужно подать в модуль
компараторов.
Этим “рулит” ключ 4.
Он обеспечивает подачу уровня, присутствующего на выходе мультиплексора, в модуль
компараторов, только в единственном случае - в случае, когда в битах CM2 … CM0
регистра CMCON выставлена комбинация 010.
При любой другой комбинации битов CM2 … CM0, выход модуля источника опорного
напряжения отключен от модуля компараторов.
Кроме того, выход модуля источника опорного напряжения может быть электрически
подключен (или отключен) к выводу RA2.
Этим “рулит” ключ 3, который управляется уровнями бита №6 (VROE) регистра VRCON.
Если VROE = 0, то выход модуля источника опорного напряжения отключен от вывода
RA2.
Если VROE = 1, то выход модуля источника опорного напряжения подключен к выводу
RA2.
При работающем модуле компараторов, подключать выход модуля источника опорного
напряжения к выводу RA2 не стоит по той простой причине, что он задействуется во
всех активных режимах работы модуля компараторов.
Тогда зачем нужно это подключение?
Дело в том, что модуль источника опорного напряжения может работать как простой
цифро – аналоговый преобразователь (ЦАП) с малой разрешающей способностью.

14
Для того чтобы вывести результаты этого цифро – аналогового преобразования
“наружу”, и требуется электрическая коммутация выхода модуля источника опорного
напряжения на вывод порта.
В данном случае, это RA2 (так решили разработчики).
Это цифро – аналоговое преобразование осуществляется путем последовательной
смены комбинаций уровней битов VR3 … VR0, “с оглядкой” на состояния бита VRR
(переключение диапазонов).
В зависимости от той или иной последовательности этих комбинаций, на выводе RA2
будет формироваться “аналоговый” сигнал той или иной формы.
Слово “аналоговый” я взял в кавычки потому, что “материнский” результат любого
(даже самого крутого) цифро – аналогового преобразования, формально, не есть
аналоговый сигнал, так как “ступеньки” в “материнском” сигнале (непосредственно, на
выходе ЦАП) будут присутствовать всегда.
От них можно избавиться, “протащив” “материнский” сигнал через фильтр нижних
частот. Только после этого кавычки можно снять.
Но это так, к слову.
Если это ЦАП имеет место быть, то нужно озаботиться “буферными делами”, так как,
в данном случае, выход источника опорного напряжения имеет малую нагрузочную
способность.
Чтобы ее повысить, нужно подключить к выводу RA2 буфер с высоким входным
сопротивлением, например, операционный усилитель.
Его же выход имеет гораздо более высокую нагрузочную способность.
И еще один существенный момент, связанный с малой нагрузочной способностью
выхода источника опорного напряжения: для коммутации выхода источника опорного
напряжения на вывод RA2, нужно не только установить 1 в бите VROE, но и
настроить вывод RA2 на работу “на вход” (TRISA,2 = 1).
И это должно быть понятным, так как, в противном случае, низкое выходное
сопротивление соответствующей защелки порта А “зарежет” выходные уровни,
формируемые источником опорного напряжения.
С помощью упомянутого выше ЦАП, можно сформировать не только аналоговый сигнал
c формой, близкой к требуемой, но и, например, “пачку” импульсов как с постоянной,
так и с переменной скважностью, содержащую в своем составе требуемое количество
импульсов.
В этом случае, задача даже упрощается, так для формирования такой “пачки” нужны
всего 2 уровня напряжения (уровень, “привязанный” к 0 и уровень, “привязанный” к 1).
Поочередно (по истечении интервалов времени, величины которых заранее просчитаны
и кратны машинному циклу) переключая их, можно сформировать “пачку” импульсов с
требуемыми параметрами.
Вопрос: “Обязательно ли применение указанного выше буфера?”
Ответ: при электрической коммутации вывода RA2 на вывод порта (любого), если этот
вывод настроен на работу “на вход”, не обязательно.
В этом случае, вывод порта имеет высокое входное сопротивление и не “режет”
выходные уровни внутреннего источника опорного напряжения.
А вот если к выводу RA2 (к выходу источника опорного напряжения) будет подключен
вход, например, ключа на биполярном транзисторе, то будет большая “бяка”.
При таком “раскладе”, без буфера с высоким Rвх. и низким Rвых., не обойтись.
И еще, обращаю Ваше внимание на то, что в составе ПИКов среднего семейства, Вы
не найдете модуля ЦАП (есть АЦП), и указанный выше способ построения ЦАП
программно – аппаратными средствами ПИКа (при условии отсутствия внешнего ЦАП),
является единственным.
Если разрешающей способности такого ЦАП не достаточно, то лучше всего применить
специализированную м/схему ЦАП (внешний ЦАП).
Все эти общие рассуждения, конечно же, нужны, но конкретика есть конкретика.
Поэтому подошло время разобраться с тем, к каким именно величинам напряжений
“привязаны” градации опорного напряжения?
В пределах диапазона (VRR = 0 или 1), выбор той или иной из 16-ти градаций
осуществляется записью того или иного адресного (по отношению к мультиплексору)
кода (их тоже 16. Задействуются все возможные двоичные комбинации) в биты
VR3 … VR0 регистра VRCON.
15
Нижний диапазон (VRR = 1).

Расчет величины опорного напряжения производится по формуле, рекомендуемой


разработчиками: Uоп. = (VR3 … VR0/24) х Uпит.
Например, для Uпит. = 5в и VR3 … VR0 = 0110 (.6),
Uоп. = (6/24) х 5 = 1,25в.
Для удобства, я составил таблицу (для VRR = 1 и Uпит. = 5в).
Округление - по третьей цифре после запятой.
Таблица 1

№ градации VR3 … VR0 Расчет Номинал градации


1 0000 (.0) Uоп. = (0/24) х 5 = 0в
2 0001 (.1) Uоп. = (1/24) х 5 = 0,208 в
3 0010 (.2) Uоп. = (2/24) х 5 = 0,417 в
4 0011 (.3) Uоп. = (3/24) х 5 = 0,625 в
5 0100 (.4) Uоп. = (4/24) х 5 = 0,833 в
6 0101 (.5) Uоп. = (5/24) х 5 = 1,042 в
7 0110 (.6) Uоп. = (6/24) х 5 = 1,25 в
8 0111 (.7) Uоп. = (7/24) х 5 = 1,458 в
9 1000 (.8) Uоп. = (8/24) х 5 = 1,667 в
10 1001 (.9) Uоп. = (9/24) х 5 = 1,875 в
11 1010 (.10) Uоп. = (10/24) х 5 = 2,083 в
12 1011 (.11) Uоп. = (11/24) х 5 = 2,292 в
13 1100 (.12) Uоп. = (12/24) х 5 = 2,5 в
14 1101 (.13) Uоп. = (13/24) х 5 = 2,708 в
15 1110 (.14) Uоп. = (14/24) х 5 = 2,917 в
16 1111 (.15) Uоп. = (15/24) х 5 = 3,125 в

Верхний диапазон (VRR = 0).

Расчет величины опорного напряжения производится по формуле, рекомендуемой


разработчиками: Uоп. = (Uпит. Х 0,25) + (VR3 … VR0/32) x Uпит.
Например, для Uпит. = 5в и VR3 … VR0 = 0110 (.6),
Uоп. = (5 х 0,25) + (6/32) x 5 = 1,25 + (6/32) x 5 = 2,1875в.
Округление - по третьей цифре после запятой.
Таблица 2

№ градации VR3 … VR0 Расчет Номинал градации


1 0000 (.0) Uоп. = 1,25 + (0/32) х 5 = 1,25 в
2 0001 (.1) Uоп. = 1,25 + (1/32) х 5 = 1,406 в
3 0010 (.2) Uоп. = 1,25 + (2/32) х 5 = 1,563 в
4 0011 (.3) Uоп. = 1,25 + (3/32) х 5 = 1,719 в
5 0100 (.4) Uоп. = 1,25 + (4/32) х 5 = 1,875 в
6 0101 (.5) Uоп. = 1,25 + (5/32) х 5 = 2,031 в
7 0110 (.6) Uоп. = 1,25 + (6/32) х 5 = 2,188 в
8 0111 (.7) Uоп. = 1,25 + (7/32) х 5 = 2,344 в
9 1000 (.8) Uоп. = 1,25 + (8/32) х 5 = 2,5 в
10 1001 (.9) Uоп. = 1,25 + (9/32) х 5 = 2,656 в
11 1010 (.10) Uоп. = 1,25 + (10/32) х 5 = 2,813 в
12 1011 (.11) Uоп. = 1,25 + (11/32) х 5 = 2,969 в
13 1100 (.12) Uоп. = 1,25 + (12/32) х 5 = 3,125 в
14 1101 (.13) Uоп. = 1,25 + (13/32) х 5 = 3,281 в
15 1110 (.14) Uоп. = 1,25 + (14/32) х 5 = 3,438 в
16 1111 (.15) Uоп. = 1,25 + (15/32) х 5 = 3,594 в

16
Как видите, разделение на нижний и верхний диапазоны достаточно условно в том
смысле, что, в обеих случаях, величины опорных напряжений выбираются из
диапазона напряжений от 1,25 в. до 3,125 в.
Этот диапазон напряжений является общим.
Я выделил все, что с ним связано, бежевым цветом.
Повторяющиеся (дублирующиеся) значения Uоп. выделены желтым цветом.
Для нижнего диапазона, шаг перестройки составляет 0,20833 в., а для верхнего
диапазона он составляет 0,15625 в.
Таким образом, разрешающая способность ЦАП, построенного на основе внутреннего
источника опорного напряжения, совсем не является высокой.
К данным таблиц 1 и 2 нужно относиться с осторожностью, так как они только
показывают общую тенденцию и не являются абсолютно точным “мерилом”.
Прежде всего, это связано с тем, что все радиодетали имеют свои температурные
коэффициенты и лучшее что можно сделать, так это использовать р/детали с малыми
температурными “разбродами и шатаниями” в комплексе с эффективной
термокомпенсацией.
Надеюсь, что разработчики должным образом озаботились как этим, так и точным
подбором номиналов резисторов делителя напряжения, являющегося “сердцем” модуля
источника опорного напряжения.
Обращаю Ваше внимание на верхнюю строку таблицы 1.
Это результат “голой математики”, но в реальности этого нет: источник опорного
напряжения никогда не выдаст 0 в. по той причине, что ключ 2 (см. рис.10), при
замыкании своих “виртуальных контактов”, не обеспечивает нулевого сопротивления.
Если говорить конкретнее, то ключ 2 это обычный транзистор, после полного
открывания которого не стоит уповать на “идеальный коротыш”.
Какое-то остаточное напряжение всегда будет присутствовать, а это, как не трудно
догадаться, совсем не ноль вольт.
То же самое можно сказать и о ключе 1 (и вообще о любом ключе).
Этим объясняется то, что источник опорного напряжения никогда не выдаст уровень,
близкий к Uпит.
В данном случае (см. таблицу 2), максимум, “на что способен” внутренний источник
опорного напряжения, так это на “выдачу” примерно 3,6 вольт (при Uпит. = 5в. Выше -
ни-ни).
Если требуется большее значение Uоп., то нужно использовать внешний источник
опорного напряжения.
Тем не менее, в большинстве случаев, из того что есть (см. таблицы 1 и 2), вполне
можно выбрать нужное значение опорного напряжения и тем самым, обойтись без
внешнего источника опорного напряжения (полезный сервис).
Математика математикой, а проверочка не помешает.
И в самом деле, что мешает, на стадии отладки, просто - напросто отключить модуль
компараторов, вывести, на вывод RA2, выход модуля источника опорного напряжения
и проконтролировать величины Uоп.?
Ничто не мешает.
Мало того, меняя адресные коды (VR3 … VR0), можно замерить все интересующие Вас
уровни опорного напряжения и составить таблицу их значений для конкретного
экземпляра PIC16F628A (в этом деле я Вам помогу, см. ниже).
Вот Вам и типичное “убийство ежика в тумане”.
Далее.
Регистр VRCON не реагирует на выход из режима SLEEP и сброс по переполнению
WDT в режиме SLEEP (не путать со сбросом по переполнению WDT в нормальном
режиме работы).
А ток-то он “кушает”.
В связи с этим, в случае задействования модуля источника опорного напряжения,
перед переходом в режим SLEEP (если таковой имеет место быть), целесообразно (но
не обязательно) отключить модуль источника опорного напряжения (bcf VRCON,7), а
после выхода из него - включить (bsf VRCON,7).
При всех остальных видах сброса (например, при сбросе по включению питания),
содержимое регистра VRCON сбрасывается в ноль.

17
В связи с рассмотрением особенностей 8-го режима работы модуля компараторов, я
“отвлекся” на модуль источника опорного напряжения.
Надеюсь, что принцип его работы понятен и в мозгах произошло некоторое
“просветление”.
Возвращаюсь к модулю компараторов (в части касающейся 8-го режима его работы).
Для того чтобы на практике проверить работу модуля компараторов, в “комплекте” с
внутренним источником опорного напряжения, я “сваял” проверочное устройство и
программу под него:

;************************************************************************
; CMCON_3.asm Учебная программа 6-го раздела "Практикума по
; конструированию устройств на PIC контроллерах".
; Корабельников Е.А. http://ikarab.lipetsk.ru E-Mail: karabea@lipetsk.ru
;************************************************************************
; Режим работы: CM2 ... CM0 = 010 (работают 2 компаратора с общим
; источником Uоп., подаваемого от внутреннего источника опорного
; напряжения и возможностью коммутации входов U- компараторов №1 и №2.).
;************************************************************************
; Частота кварца 4000 кГц.
;========================================================================
LIST p=16F628A ; Определение типа микроконтроллера.
__CONFIG 03F25H ; Биты конфигурации: защита выключена,
; WDT включен, стандартный XT –
; генератор, PWRT включен.
;========================================================================
; Определение положения регистров специального назначения.
;========================================================================
PC equ 02h ; PC.
Status equ 03h ; Status.
PortA equ 05h ; Порт A.
PortB equ 06h ; Порт B.
TrisA equ 05h ; TrisA -банк1.
TrisB equ 06h ; TrisB -банк1.
IntCon equ 0Bh ; IntCon.
CMCON equ 1Fh ; CMCON. Модуль компараторов.
VRCON equ 1Fh ; VRCON -банк1. Модуль источника Uоп.

18
;========================================================================
; Назначение названий битам.
;========================================================================
RP0 equ 5 ; Бит выбора банка.
;========================================================================
org 0 ; Начать выполнение программы с PC=0.
;************************************************************************

;************************************************************************
; Подготовительные операции.
;========================================================================
clrf IntCon ; Запрет всех прерываний.
clrf PortB ; Сброс в 0 защелок порта B.

bsf Status,RP0 ; Переход в 1-й банк.


movlw b'00001111' ; RA0, RA1, RA2 и RA3 работают
movwf TrisA ; на вход, остальные - на выход.
clrf TrisB ; Все RB работают на выход.
;-----------------------------------------
; Настройка источника опорного напряжения.
;-----------------------------------------
movlw b'10100110' ; Модуль источника Uоп. включен, его
movwf VRCON ; выход подключен к модулю
; компараторов (от RA2 отключен),
; нижний диапазон, Uоп.=1,25в.
bcf Status,RP0 ; Переход в 0-й банк.
;-----------------------------------------
; Настройка компараторов.
;-----------------------------------------
movlw b'00000010' ; Работает 2 компаратора, внутренний
movwf CMCON ; источник Uоп., Uсигн. - с RA0 и RA1.
;========================================================================
; "Переправка" результатов работы компараторов на выводы RA3, RA4 и
; "закольцовка" рабочей точки программы в "вечном", проверочном кольце.
;========================================================================
SNOVA btfsc CMCON,6 ; Проверка состояний бита №6 регистра
goto $+3 ; CMCON (выхода компаратора №1).
bcf PortB,0 ; Если CMCON,6=1, то на RB0 выводится
goto $+2 ; 1 (светодиод горит), а если
bsf PortB,0 ; CMCON,6=0, то на RB0 выводится 0
; (светодиод погашен).
; В любом из этих случаев - переход
; на команду btfsc CMCON,7.
btfsc CMCON,7 ; Проверка состояний бита №7 регистра
goto $+3 ; CMCON (выхода компаратора №2).
bcf PortB,1 ; Если CMCON,7=1, то на RB1 выводится
goto $+2 ; 1 (светодиод горит), а если
bsf PortB,1 ; CMCON,7=0, то на RB1 выводится 0
; (светодиод погашен).
; В любом из этих случаев - переход
; на команду clrwdt.
clrwdt ; Сброс WDT.
goto SNOVA ; Переход на следующее кольцо
; проверки.
;************************************************************************
end ; Конец программы.

Как видите, к настройке модуля компараторов прибавилась настройка модуля источника


опорного напряжения.
Контрольные светодиоды я “перебросил” в порт В.
19
Так как, в данном случае, модуль источника опорного напряжения выдает
Uоп. = +1,25в., то светодиоды будут “загораться” при значениях Uсигн. от +1,25в. и
менее.
При значениях Uсигн. от +1,25в и более, светодиоды будут “погашены”.
Обращаю Ваше внимание на то, что по сигнальным входам, компараторы “развязаны”
друг от друга.
Поэтому, “кручение – верчение” движка переменного резистора, работающего в “связке”
с одним компаратором, не влияет на результат работы другого компаратора.
Если заменить movlw b’00000010’ (CIS=0) на movlw b’00001010’ (CIS=1), то нужно
перепаять выходы делителей напряжения с выводов RA0, RA1 на выводы RA2, RA3
(или организовать дополнительную пару делителей напряжения).
После этого, будет наблюдаться “картина”, аналогичная описанной выше.
В связи с этим возникает следующий вопрос: “А если, например, меня устраивает
коммутация входов компараторов только на выводы RA0 и RA1, то можно или нет
использовать выводы RA2 и RA3 под другие нужды”?
Ответ на этот вопрос лучше получить на практике.

Я просто – напросто “перебросил” контрольные светодиоды с выводов RB0, RB1


порта В на выводы RA2, RA3 порта А.
Программа под это устройство:

;************************************************************************
; CMCON_4.asm Учебная программа 6-го раздела "Практикума по
; конструированию устройств на PIC контроллерах".
; Корабельников Е.А. http://ikarab.lipetsk.ru E-Mail: karabea@lipetsk.ru
;************************************************************************
; Режим работы: CM2 ... CM0 = 010 (работают 2 компаратора с общим
; источником Uоп., подаваемого от внутреннего источника опорного
; напряжения и возможностью коммутации входов U- компараторов №1 и №2.).
;************************************************************************
; Частота кварца 4000 кГц.
;========================================================================
LIST p=16F628A ; Определение типа микроконтроллера.
__CONFIG 03F25H ; Биты конфигурации: защита выключена,
; WDT включен, стандартный XT –
; генератор, PWRT включен.
;========================================================================
; Определение положения регистров специального назначения.
;========================================================================
PC equ 02h ; PC.
20
Status equ 03h ; Status.
PortA equ 05h ; Порт A.
TrisA equ 05h ; TrisA - банк1.
IntCon equ 0Bh ; IntCon.
CMCON equ 1Fh ; CMCON. Модуль компараторов.
VRCON equ 1Fh ; VRCON - банк1. Модуль источника Uоп.
;========================================================================
; Назначение названий битам.
;========================================================================
RP0 equ 5 ; Бит выбора банка.
;========================================================================
org 0 ; Начать выполнение программы с PC=0.
;************************************************************************

;************************************************************************
; Подготовительные операции.
;========================================================================
clrf IntCon ; Запрет всех прерываний.
clrf PortA ; Сброс в 0 защелок порта A.

bsf Status,RP0 ; Переход в 1-й банк.


movlw b'00000011' ; RA0, RA1 работают на вход,
movwf TrisA ; остальные - на выход.
;-----------------------------------------
; Настройка источника опорного напряжения.
;-----------------------------------------
movlw b'10100110' ; Модуль источника Uоп. включен, его
movwf VRCON ; выход подключен к модулю
; компараторов (от RA2 отключен),
; нижний диапазон, Uоп.=1,25в.
bcf Status,RP0 ; Переход в 0-й банк.
;-----------------------------------------
; Настройка компараторов.
;-----------------------------------------
movlw b'00000010' ; Работает 2 компаратора, внутренний
movwf CMCON ; источник Uоп., Uсигн. - с RA0 и RA1.
;========================================================================
; "Переправка" результатов работы компараторов на выводы RA3, RA4 и
; "закольцовка" рабочей точки программы в "вечном", проверочном кольце.
;========================================================================
SNOVA btfsc CMCON,6 ; Проверка состояний бита №6 регистра
goto $+3 ; CMCON (выхода компаратора №1).
bcf PortA,2 ; Если CMCON,6=1, то на RA2 выводится
goto $+2 ; 1 (светодиод горит), а если
bsf PortA,2 ; CMCON,6=0, то на RA2 выводится 0
; (светодиод погашен).
; В любом из этих случаев - переход
; на команду btfsc CMCON,7.
btfsc CMCON,7 ; Проверка состояний бита №7 регистра
goto $+3 ; CMCON (выхода компаратора №2).
bcf PortA,3 ; Если CMCON,7=1, то на RA3 выводится
goto $+2 ; 1 (светодиод горит), а если
bsf PortA,3 ; CMCON,7=0, то на RA3 выводится 0
; (светодиод погашен).
; В любом из этих случаев - переход
; на команду clrwdt.
clrwdt ; Сброс WDT.
goto SNOVA ; Переход на следующее кольцо
; проверки.
;************************************************************************
21
end ; Конец программы.

Проверяю. Работает, каналья!


Вот Вам и совершенно четкий ответ на заданный выше вопрос – можно.
Теперь не мешало бы “покопаться в потрохах” модуля источника опорного напряжения.
Выведу-ка я выход этого модуля на вывод RA2.

;************************************************************************
; CMCON_5.asm Учебная программа 6-го раздела "Практикума по
; конструированию устройств на PIC контроллерах".
; Корабельников Е.А. http://ikarab.lipetsk.ru E-Mail: karabea@lipetsk.ru
;************************************************************************
; К выводу RA2 подключен выход модуля внутреннего источника опорного
; напряжения. Имеется возможность программной перестройки величины Uоп.
;************************************************************************
; Частота кварца 4000 кГц.
;========================================================================
LIST p=16F628A ; Определение типа микроконтроллера.
__CONFIG 03F25H ; Биты конфигурации: защита выключена,
; WDT включен,стандартный XT –
; генератор, PWRT включен.
;========================================================================
; Определение положения регистров специального назначения.
;========================================================================
PC equ 02h ; PC.
Status equ 03h ; Status.
TrisA equ 05h ; TrisA - банк1.
IntCon equ 0Bh ; IntCon.
CMCON equ 1Fh ; CMCON. Модуль компараторов.
VRCON equ 1Fh ; VRCON - банк1. Модуль источника Uоп.
;========================================================================
; Назначение названий битам.
;========================================================================
RP0 equ 5 ; Бит выбора банка.
;========================================================================
org 0 ; Начать выполнение программы с PC=0.
;************************************************************************

;************************************************************************
22
clrf IntCon ; Запрет всех прерываний.
;-----------------------------------------
; Настройка компараторов.
;-----------------------------------------
movlw 7 ; Модуль компараторов
movwf CMCON ; отключен.
;-----------------------------------------
bsf Status,RP0 ; Переход в 1-й банк.
movlw b'00000100' ; RA2 работает на вход,
movwf TrisA ; остальные - на выход.
;========================================================================
; Настройка источника опорного напряжения.
;========================================================================
; В данном случае, установлено Uоп.=2,5в., но можно выставить
; (программно) любое из дозволенных Uоп.
;========================================================================
movlw b'11101100' ; Источник Uоп. включен и его выход
movwf VRCON ; подключен к RA2, нижний диапазон,
; Uоп.=2,5в.
bcf Status,RP0 ; Переход в 0-й банк.
;-----------------------------------------
SNOVA clrwdt ; Сброс WDT.
goto SNOVA ; "Закольцовка" в "вечном кольце".
;************************************************************************
end ; Конец программы.

Подставляя различные, двоичные комбинации в биты VR3 … VR0 регистра VRCON, а


также изменяя диапазон (бит VRR), можно получить на выводе RA2 различные
величины Uоп. (см. таблицы 1 и 2).
Еще раз обращаю Ваше внимание на очень низкую нагрузочную способность
внутреннего источника опорного напряжения.
Я его контролировал мультимером DT-830B.
В этом случае, из-за относительно невысокого Rвх. мультимера, значения Uоп. были
занижены (по сравнению с табличными значениями) на 2,5 … 3%.
В идеале, нужно, в качестве буфера, использовать повторитель (Кус.=1) на
операционном усилителе и контролировать Uоп. на его выходе.
Итак, настройки всех 8-ми его режимов “расписаны”.
Как видите, выбрать есть из чего.
Надеюсь, что эта информация окажется полезной и поможет Вам в Вашем творчестве
(с аналоговыми сигналами обязательно нужно уметь работать!!!).

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

23