Команды и директивы компилятора 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.
Настроенные как цифровой вход каналы будут преобразовывать входные аналоговые уровни в цифровые, что однако не окажет влияния на точность преобразования в других каналах настроенных как входные аналоговые.