Команды и директивы компилятора PROTON
ADIn
Синтаксис:
Variable = ADIn channel number
Команда ADIn предназначена для преобразования аналоговой величины в цифровой код. Эта команда делает процесс аналогово-цифрового преобразования очень простым.
По команде ADIn считываются значения аналоговой величины в выбранном канале (channel number) АЦП, а затем аналоговая величина преобразуется в цифровой код и результат сохраняется в переменной Variable.
Прежде чем использовать команду ADIn, необходимо соответствующий разряд регистра TRISA установить так, чтобы нужные разряды (каналы) PORTA установились в состояние входа.
Например при использовании PORTA.5 в качестве входа для измерения аналогового сигнала следует сделать в начале программы следующую запись:
В регистре ADCON1 соответствующие разряды должны быть также установлены так, чтобы разряды (выводы) PORTA работали как аналоговые входы, а в некоторых случаях установить формат результата и источник синхронизации. Для более подробной информации об этих регистрах и как их установить в нужный режим, для определенного микроконтроллера, смотрите справочные данные приводимые в Datasheet's для конкретного PIC-микроконтроллера фирмы Microchip.
Для команды ADIn существуют три директивы (определения):
Ниже приведены определения по умолчанию:
Declare ADIN_RES = 10 | ' Установить кол-во битов в результате АЦП-преобразования ' равными 10 (можно также установить 8, 10, или 12) |
Declare ADIN_TAD = FRC | ' Установить синхронизацию от внутреннего RC генератора |
Declare ADIN_STIME = 50 | ' Установить время ожидания в 50 мкс перед началом преобразования |
Dim VAR1 As Word | ' Объявить переменную VAR1 размером WORD |
TRISA = %00000001 | ' Сделать канал (вывод) AN0 (PORTA.0) входом |
ADCON1 = %10000000 | ' Установить все выводы PORTA в режим АЦП |
VAR1 = ADIn 0 | ' Поместить результат преобразования из канала AN0 в переменную VAR1 |
Замечаниe
Если аналого-цифровые преобразования используются в пределах программы очень часто, то после команды ADIn должна использоваться маленькая задержка в несколько микросекунд:
Again: | ' Метка начала цикла |
VAR1 = ADIn 3 | ' Произвести АЦП в 3-ем канале и результат записать в переменную VAR1 |
DelayUS 1 | ' Пауза 1 мкс |
GoTo Again | ' Вновь осуществить операцию АЦП |
Эта задержка необходима, для того чтобы внутренние конденсаторы аналого-цифрового преобразователя успевали полностью разряжаться.
Чтобы изучить работу АЦП PIC-микроконтроллера Вы можете воспользоваться приведенной на рисунке 1 действующей схемой типовой установки для простого исследования аналого-цифрового преобразователя PIC-микроконтроллера.
Ниже приведен листинг программы которая производит 10-битное аналого-цифровое преобразование в канале PORTA.0 и выводит его результат на двухстрочном ЖКИ в десятичном и двоичном виде. Результаты работы этой программы приведены на рисунке 1.
Device = 16F873A | ' Cконфигурировать программу для микроконтроллера 16F873A |
XTAL = 4 | ' Установить частоту генератора равной 4 МГц |
'-------------------------------------Настройки АЦП------------------------------------- | |
Declare ADIN_RES 10 | ' Pазрядность результата преобразования АЦП = 10 |
Declare ADIN_TAD FRC | ' Источник тактирования АЦП = FRC |
Declare ADIN_STIME 50 | ' Установить время ожидания в 50 мкс перед началом преобразования |
'-------------------------------Настройки подключения ЖКИ-------------------------------- | |
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 2 | ' Количество строк ЖКИ |
'------------------------------------Настройка портов------------------------------------ | |
Declare PORTB_PULLUPS = OFF | ' Выключить подтягивающие резисторы на PORTB |
Declare ALL_DIGITAL = OFF | ' Каждый порт выполняет свою функцию по умолчанию |
TRISA = %00000001 | ' Сделать канал (вывод) AN0 (PORTA.0) входом |
ADCON1 = %10000000 | ' Установить все выводы PORTA в режим АЦП |
'---------------------------------Объявление переменных---------------------------------- | |
Dim VAR1 As Word | ' Объявить переменную VAR1 размером WORD |
'--------------------------------Главная программа--------------------------------------- | |
Again: | ' Метка начала цикла главной программы |
VAR1 = ADIn 0 | ' Произвести АЦП в 0-ом канале и результат записать в ' переменную VAR1 |
Print At 1, 1, "VAR1= " , DEC4 VAR1 | ' Вывести в первой строке ЖКИ десятичное значение VAR1 |
Print At 2, 1, "VAR1= " , BIN10 VAR1 | ' Вывести во второй строке ЖКИ двоичное значение VAR1 |
GoTo Again | ' Вновь осуществить операцию АЦП |
Замечания о настройке аналоговых входов PIC-микроконтроллеров
В PIC-микроконтроллерах регистр ADCON1 предназначен для того, чтобы выбирать, какими входами, цифровыми или аналоговыми будут вывода порта PORTA
Кроме ADCON1, также отвечают за настройку выводов АЦП и регистры TRISA и TRISE. Если выводы микросхемы настраиваются как аналоговые входы, то при этом должны быть установлены соответствующие биты в регистре TRIS. Если соответствующий бит сброшен в 0, то вывод микросхемы настроен как цифровой выход со значениями выходных напряжений Uвых0=0V или Uвых1=5V. Сам же модуль АЦП функционирует независимо от состояния битов регистров TRISA и TRISE.
Настроенные как цифровой вход каналы будут преобразовывать входные аналоговые уровни в цифровые, что однако не окажет влияния на точность преобразования в других каналах настроенных как входные аналоговые.