Специальные функции

7-11-2013, 17:49
Просмотров: 2011
Микроконтроллер 16F690 содержит два компаратора напряжения, каждый - с собственной схемой управления и конфигурационным регистром.
В случае компаратора 1 (С1) этот регистр называется CM1CON0 и расположен по адресу 119h в банке 2. Мы рассмотрим только программирование С1, поскольку компаратор С2 программируется аналогично.
Специальные функции

Свойства компаратора микроконтроллера типично для схем сравнения. У него - два входа: C1VP (положительный ) и C1VN (отрицательный или инвертирующий вход). Сигнал на вход поступает с вывода RA0 (19) или от внутреннего Источника опорного напряжения, которому соответствует несколько Различных уровней. Сигнал на инвертирующий вход поступает через из четырех аналоговых каналов: 7, 6, 5 или 1.
Выход компаратора C10UT может считываться как напряжение на выводе 17 или значение разряда 6 регистра CM1CON0. Для инвертировании состояния выхода используется разряд контроля полярности. Опорное напряжение устанавливается с помощью управляющего регстра VRCON (адрес 118h). Соответствующая процедура поясняется ниже.
В качестве примера настроим С1 следующим образом:
• на неинвертирующий вход сигнал подается через вывод RA0 (19);
• на инвертирующий вход сигнал подается через вывод RA1 (18);
• результат направляется в разряд 6 регистра CMCON0.
Полярность должна быть неинвертированной. При работе с микросхемой обычного аппаратного компаратора типа LM311 подключения должны.
После сброса все разряды регистра CM1CON0 устанавливаются в 0. 1 Нам необходимы следующие установки:
• = 1 - включение компаратора;
• = 0 - выходной разряд;
• = 0 - результат - в CM1CONO, а не на вывод 17;
• = 0 - для неинвертированной полярности;
• = 0 - без функции;
• = 1 - используется внутреннее опорное напряжение;
• =00 - вход - вывод 18.
Установки для приема сигналов с других входов: 01 - вывод 15; 10 - вывод 14; 11 - вывод 7. Для того чтобы сконфигурировать компаратор согласно представленному выше описанию, двоичный байт 10000100 (шестнадцатеричное 84) должен быть сохранен.
Аналогично, для компаратора 2 байт 10000101 (или 85h) сохраняйся по адресу 11 Ah, что соответствует приему входного сигнала с вывода 15.
Поскольку мы используем внутреннее опорное напряжение, это должно быть запрограммировано в регистре VRCON.
Он может обеспечивать постоянное опорное напряжение 0,6 В или переменное в диапазоне от 0 В до 0,71875 х.
Опорное напряжение подается на инвертирующий вход.
Для настройки обоих компараторов на переменное внутреннее опорное напряжение разряды в VRCON должны быть установлены следующим образом:
=1 - использование переменного опорного напряжения для компаратора 1;
=1 - использование переменного опорного напряжения для компаратора 2;
=0 - выбор нижнего диапазона (1 - для верхнего диапазона);
= 0 - постоянное опорное напряжение блокировано.
- четыре разряда выбора диапазона переменного опорного напряжения. В нижнем диапазоне опорное напряжение равно (данная величина)/24 х VDD, а в верхнем - VDD/4 + (данная величина), х VDD.
Например, слово 11001100 (CCh), сохраненное по адресу 118h, настроит оба компаратора на использование переменного опорного напряжения в нижнем диапазоне. Разряды содержат 1100 (десятичное 12), поэтому опорное напряжение равно 12/24 х VDD, т.е. половине напряжения питания.
На выходе компаратора бит 0 или 1, который можно считать в разряде регистров CM1CON0 и CM2CON0. Оба выхода можно одновременно считывать как разряды и третьего регистра: CM2CON1, адрес HBh.
Также как и в случае с регистрами, непосредственно связанными с компараторами, мы должны активизировать входы для аналоговых напряжений.
Это реализуют через регистр ANSEL, адрес 11 Eh.
Вывод 18 - вход AN1, а вывод 15 - вход AN5, поэтому мы устанавливаем в 1 разряды и . Соответствующий байт будет иметь вид 00100010 или 22h.
Все регистры, связанные с компараторами, находятся в банке 2, по-1 этому программа настройки компараторов 1 и 2 при опорном напряжении, равном половине напряжения питания, будет иметь вид:
Кстати говоря, все листинги предполагают, что адреса регистров были объявлены с использованием директивы equ в начале программы, или же что они определены компилятором. Если при запуске данной подпрограммы микроконтроллер уже находится в режиме страницы 1, то вначале должен быть обнулен разряд 5 регистра STATUS.
Для опроса выхода компаратора 1 используйте следующие строки:
Операция логического "И" устанавливает или сбрасывает разряд нуля регистра STATUS, который затем может быть опрошен обычным способом для определения дальнейших действий.
Специальные функции

Аналого-цифровые преобразователи
Аналоговый входной сигнал подается на преобразователь через любой из 14 каналов. Сейчас мы будем использовать только канал AN0, которому соответствует вывод 19. При подаче питания все выходные каналы микроконтроллера PIC автоматически устанавливаются входы. Регистр выбора аналоговых входов ANSEL, который находится в банке 2, используется для установки каналов в качестве цифровых входов.
Если разряд содержит 1, то AN0 (вывод 19) -' аналоговый вход. В то же время это отключает слабое подтягивающее сопротивление, а также прерывание по изменению состояния.
Следующий шаг - выбор входного канала и других функций с помощью регистра ADCON0. Установки, используемые в этой книге, имеют вид:
=о - результат преобразования выравнивается по левому краю;
- использование напряжения питания в качестве опорного; = 0000 - выбор AN0 в качестве входного канала (вывод 19) (эти разряды могут принимать и другие шестнадцатеричные значения для каналов от AN0 до AN11 - 1011);
= 1 - установите этот разряд для начала преобразования, а затем считайте его; он остается в единичном состоянии, пока выполняется преобразование, а затем переходит в нулевое состояние, когда преобразование завершено (разряд GO/DONE); , =1 - включает преобразователь (0 - выключение).
В общем случае, установка настраивает преобразователь на канал AN0, а установка начинает преобразование.
Заключительный шаг - выбор тактовой частоты для преобразования. За это отвечают разряды регистра ADCON1.
В наших схемах не требуется высокого быстродействия, поэтому мы можем использовать невысокую тактовую частоту, т.е. разряды ADC0N1 можно оставить в нулевом состоянии, как после сброса. Другими словами, в отношении тактовой частоты преобразования никаких действий не требуется.
Результат преобразования - 10-разрядный, поэтому для его сохранения требуются два регистра: ADRESH и ADRESL.
При выбранном выравнивании по левому краю, восемь старших разрядов находятся в ADRESH, а два младших - в разрядах регистра ADRESL.
Разряды считываются в ADRESL как 000000. Вот как это выглядит:
ADRESH ADRESL
ХХХХХХХХ XX000000 110-разрядный результат
Если высокая точность не требуется (или невозможна), то содержимое ADRESL можно проигнорировать.
Это дает восьмиразрядную точность (т.е. 1/256 или приблизительно 0,4 %), что выше точности, которую могут обеспечить большинство датчиков.
Использование канала AN0 и чтение результата меньшей точности оказывается довольно простым делом, поскольку ничего не нужно делать с рядом регистров. Единственные регистры, которые должны быть Установлены, - это ANSEL в банке 2 и ADCON0 в банке 0. Результат учитывается из регистра ADRESH, который также находится в банке 0. Соответствующая простая подпрограмма:

Передача данных с помощью USART
Микроконтроллер 690 содержит встроенный универсальный синхронно-асинхронный приемопередатчик (сокращенно - USART).
Мы используем его для последовательной (т.е. побитной) передачи байта данных в USART другого микроконтроллера PIC.
Второй USART получает последовательные данные побитно и преобразует их в байт, который может быть считан из регистра.
Передача данных может осуществляться по одному проводу (если линия 0 В будет общей для обоих PIC) или по радиоканалу.
Выход USART - RB7 (вывод 10), а вход - RB5 (вывод 12). Доступны синхронный и асинхронный режимы работы USART, однако мы рассмотрим только асинхронный, в котором один USART ожидает неопределенный период времени получения информационного сигнала от другого USART.
Как передатчик, USART управляется регистром TXSTA, расположенным в банке 1. Настройки, которые мы используем, имеют следующий вид:
• = 0 - для асинхронного режима не используется;
• = 0 - восьмибитная передача;
• = 1 - разрешение передачи; . =0 - асинхронный режим;
• = 0 - отключение бита символа окончания;
• =0 - низкая скорость;
• - устанавливается в 1, если сдвиговый регистр передачи пуст, и в 0, если он заполнен;
• = 0 - девятый бит, если он используется.
Все, что мы должны сделать для передачи байта, - поместить его в регистр данных TXREG и установить разряд регистра TXSTA-
Поскольку мы используем устанавливаемый по умолчанию асинхронен режим, нет никакой необходимости настраивать регистр скоростью обмена (BAUDCTL).
При выходе из этой подпрограммы z = 1, если в регистре w содержится новый корректный байт.
Вызовите ее, проверьте z и используйте байт в w или вызовите подпрограмму опять, и так - до тех пор, пока не будет получен корректный байт.
Представленные подпрограммы иллюстрируют настройку USART и передачу/прием данных. Другой вопрос - как вписать их в программу для реализации обмена данными с другим микроконтроллером, не прекращая выполнение программы.

Память данных
Микроконтроллер 16F690 предоставляет 256 байт памяти данных EEPROM, которая может хранить данные долгое время.
В отличие от обычной памяти SRAM, используемой в качестве временного хранилища, данные в памяти EEPROM могут храниться не менее 40 лет или до момента перезаписи.
Самое важное - данные в этой памяти не теряются при выключении питания, поэтому она очень полезна в роботах, которые могут обучаться или же другими способами узнавать о наилучших способах реакции на сложившуюся ситуацию.
Они не забывают то, что они узнали, и могут переносить приобретенные знания из одного сеанса работы в следующий.
Память данных адресуется в диапазоне. Считать данные из нее проще, чем записать. Подпрограмма для чтения данных из памяти выглядит следующим образом:

Регистры PIR1 и PIR2
Два регистра запросов на прерывание от периферийных устройств (PIR) полезны, когда необходимо знать текущее состояние встроенных периферийных устройств микроконтроллера PIC. К ним относятся аналого-цифровые преобразователи (АЦП), приемник и передатчик USART и компараторы.
При возникновении прерывания микроконтроллер PIC переходит к подпрограмме обслуживания прерывания и считывает данные из нескольких источников, чтобы выяснить причину прерывания. Однако чтение из этих устройств до того, как они завершили текущую операцию, дает неправильный результат. Мы должны позволить им завершить операцию, и в этом помогают регистры PIR.
Регистр PIR1 содержит три флага, указывающих на готовность или неготовность в данный момент времени АЦП, приемника и передатчика. Разряд (ADIF - флаг прерывания от АЦП) устанавливается в когда текущее преобразование завершено. Если при его считывании обнаруживается, что он содержит 0, то это означает, что опрос следует повторить позже. Разряд (RCIF), устанавливается в 1, когда буфер приемника полон, а 0 указывает на то, что данные все еще накапливаются в буфере, поэтому попытку следует повторить позже. Этот флаг автоматически сбрасывается после чтения данных буфера из регистра RCREG.
Разряд (TXIF) устанавливается в 1, когда буфер передатчика пуст и ожидает получения очередных данных. В противном случае этот разряд содержит 0, указывая на то, что буфер заполнен и ожидает передачи данных.
Регистр PIR2 содержит два флага, указывающих на то, что изменился сигнал на выходе компаратора. Разряд (C2IF) устанавливается в 1 при изменении выходного сигнала компаратора 2, а разряд (С 1 IF) - компаратора 1.
Эти разряды остаются в единичном состоянии до тех пор, пока не будут обнулены с помощью соответствующей команды.
Это означает, что нам не обязательно опрашивать их сразу же после завершения операции сравнения. Это можно сделать в любой момент позже.
Однако, если данные разряды необходимо использовать для контроля последующих операций сравнения, то их следует заранее обнулить на некотором этапе.
Все перечисленные флаги устанавливаются при возникновения событий независимо от того, разрешены прерывания или нет, поэтому их можно использовать даже тогда, когда не используются прерывания. Они сообщают о возможности безопасного считывания данных из соответствующих периферийных устройств. Однако, если далее в программе разрешаются прерывания, не забудьте предварительно сбросить все флаги.
Регистр INTCON
Этот регистр управляет обработкой прерываний. Интерес представляют следующие разряды:
(GIE) - 1 - прерывания разрешены; 0 - прерывания запрещены. Этот разряд используется для разрешения или запрета всех прерываний одной командой.
(PEIE) - 1 - разрешение прерываний от периферийных устройств, 0 - запрет таких прерываний.
(TOIE) - 1 - разрешение прерывания по переполнению таймера TR0, 0 - запрет этого прерывания.
(INT) - 1 - разрешение прерывания по входу INT, 0 - запрет этого прерывания. Прерывание по входу INT - внешнее, возникающее при изменении состояния вывода RA2. Направление изменения, вызывающее прерывание, зависит от состояния разряда INTE (6) регистра OPTION: 1 - прерывание по нарастающему фронту, 0 - прерывание по ниспадающему фронту. По умолчанию INTE = 1.
(RABIE) - 1 - разрешает прерывание по изменению состояния порта А и порта В. Можно выбирать, какие разряды порта А активируют функцию прерывания по изменению состояния, устанавливая один либо большее число разрядов регистра ЮСА.
Младшие три разряда являются флагами:
(T0IF) - устанавливается, когда переполняется таймер ТМО;
(INTF) - устанавливается при возникновении прерывания по входу INT (см. выше);
(RABIF) - устанавливается при возникновения прерывания по изменению состояния порта А или В.
Как и флаги регистров PIR, эти флаги остаются в единичном состоянии до тех пор, пока не будут обнулены.

Источник: delete-it.ru
Автор: ziko
Опубликовано пользователем: 81 (смотреть все)
Комментарии: