Команды и директивы компилятора PROTON
RCIn
Синтаксис:
Variable = RCIn Pin, State
По этой команде происходит измерение интервала времени в течение которого, выбранный вывод находится в указанном состоянии.
Параметры:
Примечания
Разрешающая способность команды RCIn зависит от частоты задающего генератора. Если используется кварц на частоту 4 МГц, то минимальное время, которое может быть измерено будет не более 10 мкс. При частоте в 20 МГц это время уже составляет - 2 мкс. Декларирование в тексте программы используемой тактовой частоты (XTAL) не влияет на работу команды RCIn, а разрешающая способность зависит от фактической скоростью тактового генератора. Если логическое состояние вывода не изменяется, то в переменную будет записано значение 0.
Команда RCIn может использоваться, для измерения времени заряда или время разряда RC-цепи. Это позволяет производить измерение сопротивления резистора или емкости конденсатора, в качестве которых могут использоваться термисторы или емкостные датчики и т.п. В более широком смысле, команда RCIn может также служить быстрым, точным секундомером для событий очень малой продолжительности.
Обычно команда RCIn используется для измерения времени заряда/разряда RC-цепочки.
На рисунках 1 и 2 приведены две схемы RС цепей подходящие для использования с командой RCIn. Схема на рисунке 2 является предпочтительной, в ней изменяемое напряжения на конденсаторе имеет больший динамический диаппазон, чем в схеме приведенной на рисунке 1.
У PIC-микроконтроллеров порог логической единицы составляет примерно 1,5 вольт, это означает, что в начальный момент измерения из-за предварительно разряженного конденсатора напряжение на входе порта начнет убывать с 5V (см. рис. 2), а затем, по мере заряда конденсатора, снизится до 1,5V. В этот момент PIC-микропроцессор зарегистрирует уровень логического нуля и остановит выполнение команды RCIn. Рабочий промежуток измерения времени будет определяться интервалом в 3,5V и в этом случае он будет гораздо большим чем в первой схеме.
В схеме же приведенной на рисунке 1 напряжение на конденсаторе и соответственно на входе PIC-микроконтроллер начинает расти с 0V и, достигнув 1,5V, микроконтроллер зарегистрирует изменение уровня на его входе с логического нуля до уровня логической единицы и остановит выполнение команды. RCIn.
Рис.1. Схема для измерения времени заряда RC-цепочки |
Рис.2. Предпочтительная схема для измерения времени заряда RC-цепочки |
Пример 1
На рисунке 3. приведена схема действующей модели rcin1.DSN, которые иллюстрируют работу команды RCIn при построении измерительной RC-цепи согласно рисунку 1. Модель работает под управлением программы rcin1.bas.
Листинг программы rcin1.bas
Device = 16F873A | ' Произвести код для микроконтроллера 16F873A |
XTAL = 4 | ' Установить ччастоту генератора равной 4 МГц |
'------------------------------------------Настройки подключения ЖКИ-------------------------------------------- | Declare LCD_TYPE ALPHA | ' Тип ЖКИ - буквенно-цифровой |
Declare LCD_DTPIN PORTB.4 | ' Порт данных ЖКИ |
Declare LCD_ENPIN PORTB.3 | ' Управление линией E |
Declare LCD_RSPIN PORTB.2 | ' Управление линией RS |
Declare LCD_INTERFACE 4 | ' Разрядность шины данных |
Declare LCD_COMMANDUS 2000 | ' Задержка перед посылкой команды |
Declare LCD_DATAUS 50 | ' Задержка перед посылкой данных |
Declare LCD_LINES 4 | ' Количество строк ЖКИ |
'---------------------------------------------Объявление переменных------------------------------------------------ | |
DIM Result As Word | ' Создать переменную для хранения результатов измерений |
'------------------------------------------------Главная программа--------------------------------------------------- | |
Loop: | ' Начало цикла измерений |
Low PORTB.0 | ' Разрядить конденсатор |
DelayMS 1 | ' Пауза 1 мсек |
Result = RCIn PORTB.0 , Low | ' Измерить время заряда RC-цепочки |
Print At 1, 1, "Primer Comand RCIn" | ' Отобразить на ЖКИ фразу "Primer Comand RCIn" |
Print At 2, 1, "Result= ", Dec Result, " " | ' Вывести десятичное значение измеряемой величины |
Print At 3, 1, "Result= ", BIN12 Result | ' Вывести двоичное значение измеряемой величины |
Print At 4, 1, "Result= ", HEX Result | ' Вывести шестнадцатеричное значение измеряемой величины |
GoTo Loop | ' Повторить процесс измерения |
Пример 2
При построении измерительной цепи согласно рисунку 2 следует главную часть программы изменить следующим образом:
'------------------------------------------------Главная программа--------------------------------------------------- | |
Loop: | ' Начало цикла измерений |
High PORTB.0 | ' Разрядить конденсатор |
DelayMS 1 | ' Пауза 1 мсек |
Result = RCIn PORTB.0 , High | ' Измерить время заряда RC-цепочки |
Print At 1, 1, "Primer Comand RCIn" | ' Отобразить на ЖКИ фразу "Primer Comand RCIn" |
Print At 2, 1, "Result= ", Dec Result, " " | ' Вывести десятичное значение измеряемой величины |
Print At 3, 1, "Result= ", BIN12 Result | ' Вывести двоичное значение измеряемой величины |
Print At 4, 1, "Result= ", HEX Result | ' Вывести шестнадцатеричное значение измеряемой величины |
GoTo Loop | ' Повторить процесс измерения |
На рисунке 4. приведена схема действующей модели rcin2.DSN, которые иллюстрируют работу команды RCIn при построении измерительной RC-цепи согласно рисунку 2.
При одних и тех же параметрах R и C, схема на рис 2 показывает более лучшие результаты, и поэтому предпочтительна.
Перед выполнением команды RCIn, конденсатор С должен быть переведен в состояние, указанном в атрибуте State (HIGH или LOW) команды RCIn. Например, в схеме 2, перед началом каждого измерения конденсатор С должен быть разряжен подачей на него +5V из порта PORTB.0 через резистор R1 ограничивающий выходной ток PORTB.0 . Пока обе обкладки конденсатора находятся под потенциалом +5V он разряжается.
Это может показаться странным, что при подаче на него +5V он будет разряжен, но нужно помнить, что конденсатор заряжается при наличии разницы потенциалов (напряжения) между его пластинами. Когда обе пластины конденсатора находятся под потенциалом +5 вольт, конденсатор считается разряженым. А если на одну пластину конденсатора подать + 5 вольт, а на другую -5 вольт от одного и того же источника питания, то конденсатор зарядится до напряжения 5 вольт.
Использовать команду RCIn для измерения времени заряда RC-цепи очень просто, за исключением одной детали: Для данных R и С, какое значение команда RCIn будет отправлять в переменную Result?
На самом деле это довольно легко рассчитать используя понятие постоянной времени RC-цепи. Постоянная времени RC-цепи обозначается символом . Читается как тау.
Тау представляет собой время, необходимое для заряда RC-цепи от нуля до 63 процентов величины питающего эту цепь напряжения Uпит. Например, если напряжение питания измерительной цепи равняется 5 вольт, то за время конденсатор зарядится до 3,15 вольта. За время равное трем конденсатор заряжается до 95%. Тем кто задастся вопросом почему это так, необходимо заглянуть в учебники по основам электротехники. Там вы найдете ответы на этот, и многие другие вопросы.
Произведение RxC есть не что иное, как .
Строго говоря постоянная времени определяет время, в течении которого свободная составляющая тока или свободная составляющая напряжения в цепи уменьшается (или увеличивается) в е раз.
Само же время T будет равно
В этой формуле е это натуральный логарифм.
Пример 3
Предположим, измерительная цепь состоит из резистора R = 10 Ком и конденсатора С величиной 1 мкФ . Определить .
Итак, постоянная времени этой RC-цепи составляет 10 миллисекунд.
Теперь вычислим время Т, необходимое для заряда с 1,5V до 5V RC-цепи изображенной на рисунке 2.
При использовании 20MHz кварца разрешающая способность команды составляет 2 мкс. Разделив на разрешающую способность команды RCIn
получаем число 6019 которое команда RCIn должна возвратить в переменную Rezult.
Значения Vinitiai и Vfinai не изменяются, следовательно можно использовать упрощенные правила большого пальца для проведения измерений при комощи команды RCIn.
Например, если команда RCIn возвратила в переменную число равное 800 при известном R, то легко определить неизвестную емкость С и наоборот.
Необходимо несколько слов сказать о назначении резистора R1=220Ω. В обеих схемах он играет роль ограничителя тока текущего через PORTB.0.
На примере работы схемы 2 (см. рис. 2) рассмотрим его роль. В тот момент времени, когда конденсатор полностью заряжен и его требуется разрядить, на нижнюю обкладку конденсатора С, которая находится под потенциалом -5 вольт, через PORTB.0 подается потенциал напряжения равный +5 вольт. Следовательно через резистор R1 и PORTB.0, по закону Ома будет протекать ток равный
Если бы резистор R1 отсутствовал, то через порт PORTB потек бы очень большой ток и вывел PIC-микроконтроллер из строя. По техническим условия ток через любой порт PIC-микроконтроллера не должен превышать 25 мА.