- •Микроконтроллеры msp430 Введение
- •1. Центральный процессор msp430
- •1.1. Адресное пространство микроконтроллеров msp430f1xx
- •1.2. Регистровый файл
- •1.3. Байтовая и словная формы инструкций.
- •1.4. Режимы адресации
- •1.4.1 Регистровая адресация
- •1.4.2. Индексная адресация
- •1.4.3 Символьная адресация
- •1.4.4 Абсолютная адресация
- •1.4.5. Косвенная адресация
- •1.4.6. Косвенная адресация с автоинкрементом
- •1.4.7 Непосредственная адресация
- •2. Система команд msp микроконтроллеров
- •2.1. Двухадресные команды
- •2.2 Одноадресные команды
- •2.3 Команды переходов
- •2.4. Эмулируемые команды
- •3. Периферийные устройства микроконтроллеров msp430f1xx
- •3.1 Внешние выводы микроконтроллера msp430f149
- •3.2 Система прерываний
- •3.3 Система тактирования
- •3.4 Сторожевой таймер
- •3.5 Аппаратный умножитель
- •3.6 Порты ввода/вывода
- •3.7 Таймер a3
- •3.8 Таймер b7
- •3.9 Интерфейс usart
- •3.9.1 Режим uart
- •3.9.1.1 Передача данных
- •3.9.1.2 Прием данных
- •3.9.1.3 Поддержка коммуникации в многопроцессорных системах
- •3.9.1.4 Обнаружение стартового бита при приеме
- •3.9.1.5 Скорость передачи
- •3.9.1.6 Регистры usart
- •3.9.2 Режим spi
- •3.9.3 Режим i2c
- •3.9.3.1 Общие сведения о шине i2c
- •3.9.3.2 Режимы работы usart в режиме i2c
- •3.9.3.3 Арбитраж
- •3.9.3.4 Тактирование i2c модуля
- •3.9.3.4 Инициализация модуля i2c
- •3.9.3.5 Регистры модуля usart в режиме i2c
- •3.10 Аналоговый компаратор
- •3.11 Аналого-цифровой преобразователь adc12
- •3.12 Flash контроллер
- •3.12.1 Стирание Flash памяти
- •3.12.2 Запись Flash памяти
- •3.12.3 Регистры Flash контроллера
- •3.13 Цифро-аналоговый преобразователь
- •Контроллер dma
3.11 Аналого-цифровой преобразователь adc12
Модуль ADC12 обеспечивает быстрое преобразование аналоговых напряжений в цифровой код. Модуль обладает следующими техническими характеристиками:
разрядность результирующего кода – 12 бит;
скорость преобразования – до 2*105 преобразований в секунду;
максимальная интегральная ошибка преобразования – менее 2-х единиц младшего разряда;
встроенное устройство выборки/хранения;
преобразование инициируется программно или аппаратно от таймеров A или B;
встроенный генератор опорного напряжения 1.5 или 2.5 V;
буферная память преобразования и управления, позволяющая сохранить до 16 последовательных измерений;
восемь индивидуально конфигурируемых внешних входных каналов;
каналы преобразования для внутреннего температурного сенсора и половины аналогового питания.
Структурная схема модуля АЦП приведена на рис. 12.
Основой модуля является 12-ти разрядный блок ADC последовательного приближения. Тактирование блока осуществляется частотой ADC12CLK, генерируемой от внутренних частот ACLK, MCLK, SMCLK или специального встроенного генератора ADC12OSC и деленной делителем DIV. Частота генератора ADC12OSC приблизительно равна 5MHz. В любом случае частота тактирования ADC12CLK должна находиться в диапазоне 0.45 – 6.3 MHz.
Рисунок 12. Структурная схема ADC12
Результирующий код АЦП генерируется согласно формуле
NADC = 4096 * (Vin – Vr-)/(Vr+ - Vr-)
где
Vin – входное напряжение;
Vr+ – опорное напряжение;
Vr-– общий вывод опорного напряжения.
Восемь внешних и четыре внутренних сигнала могут быть выбраны для аналого-цифрового преобразования. В качестве внешних сигналов используются выводы порта P6. Для минимизации токов утечек входных цифровых формирователей порта P6 рекомендуется назначать выводы, задействованные для АЦ преобразования, для поддержки периферийных функций через регистр P6SEL. В качестве внутренних входных сигналов АЦП могут быть использованы напряжения опоры VeREF+, VREF- и напряжения встроенного датчика температуры. Напряжение на температурном датчике Vt в вольтах определяется формулой
Vt = kt * T + 0.986
где
kt – температурный коэффициент датчика, равный 0.00355 V/0C ±3%;
T - температура в градусах Цельсия.
Требуемый канал измерения выбирается с помощью мультиплексора MUX, управляемого битами INCH (Input Channel) регистра управления.
Выходной сигнал мультиплексора поступает на вход устройства выборки/хранения SH (Sample/Hold), предназначенного для фиксации входного сигнала на время преобразования АЦП. Входной аналоговый сигнал перед началом преобразования запоминается на внутреннем конденсаторе SH. Для того чтобы конденсатор зарядился до величины входного напряжения необходимо время ts, величину которого можно оценить по формуле:
ts > (Rs + Ri) * 9.011 * Ci + 800ns
где
Rs – выходное сопротивление источника сигнала;
Ri – проходное сопротивление мультиплексора, типовое значение 2 kOm;
Ci – емкость накопительного конденсатора, типовое значение 40 pF.
Внутренний сигнал SAMPCON (Sample/Conversion) управляет периодом выборки SH и началом преобразования. Когда SAMPCON имеет высокий уровень, выборка активна. Переход сигнала SAMPCON с высокого уровня на низкий стартует аналого-цифровое преобразование, которому необходимо 13 тактов частоты ADC12CLK.
Полное время одного преобразования tADC составляет
tADC = ts + 13 * ADC12CLK
Активизация сигнала SAMPCON может быть осуществлена программно с помощью бита ADC12SC регистра управления АЦП или аппаратно при срабатывании модулей сравнения TACC1, TBCC0 или TBCC1. Выбор источника для генерации сигнала SAMPCON выбирается битами управления SHS (Sample/Hold Source). Кроме того, период выборки может быть задан напрямую этими сигналами или с помощью специального таймера TSH. Переключение между этими двумя режимами осуществляется с помощью бита управления SHP (Sample/Hold Pulse).
Модуль ADC12 содержит в своем составе встроенный источник опорного напряжения REF. Величину выходного напряжения можно задать программно с помощью бита управления REF2_5V на уровне 1.5V или 2.5V. Следует отметить, однако, что действительное значение этих напряжений может отличаться от номинальных на величину ±100/60 mV для уровней 2.5/1.5 V соответственно. Поэтому для гарантирования точности преобразования необходимо либо производить калибровку опорного напряжения, либо использовать внешний источник опоры. При использовании встроенного опорного напряжения рекомендуется между выводом VREF+ и выводом AVss подключать параллельно соединенные конденсаторы номиналом 10 µF и 100 nF.
С помощью переключателя, управляемого битами SREF можно подключить в качестве опоры Vr+ внешнее напряжение VeREF+ или аналоговое питание AVcc. С помощью переключателя, управляемого битом SREF2, можно в качестве опоры Vr- подключить внешний сигнал VREF- или напряжение аналоговой земли. В любом случае напряжение Vr+ должно находиться в диапазоне 1.4V – AVcc, а напряжение Vr- в диапазоне 0 – 1.2 V.
Начало цикла преобразования инициируется срабатыванием источника запуска АЦП при условии, что бит управления ENC (Enable Conversion) установлен в состояние 1. Результаты преобразований сохраняются в 16-ти регистрах буферной памяти преобразований ADC12MEMx. Каждый регистр ADC12MEMx конфигурируется соответствующим управляющим регистром ADC12MCTLx, содержащим информацию о номере входного канала и источнике опорного напряжения для каждого измерения. Следующие друг за другом измерения могут последовательно сохраняться в регистрах ADC12MEM0, ADC12MEM1 и т.д. Кроме того, управляющий регистр ADC12MCTLx содержит бит EOS, определяющий конец серии измерения, когда используется многоканальные режимы преобразования.
Модуль ADC12 имеет четыре основных режима работы:
Однократное одноканальное преобразование. Результат преобразования записывается в регистр ADC12MEMx, номер которого записан в поле CSTARTADDR (Conversion Start Address) регистра управления АЦП. При этом номер канала преобразования и источник опоры определяется содержимым соответствующего регистра ADC12MCTLx. Для старта следующего преобразования необходимо опять переключить ENC в состояние 01.
Однократное многоканальное преобразование. Результат первого преобразования сохраняется в ADC12MEMx, номер которого записан в поле CSTARTADDR регистра управления АЦП. Результаты следующих преобразований сохраняются в следующих регистрах ADC12MEMx. Последовательность преобразований завершается, когда очередной результат сохраняется в регистре, для которого бит EOS в соответствующем регистре ADC12MCTLx установлен в 1. Для старта следующей серии преобразований необходимо переключить ENC в состояние 01.
Повторяющееся одноканальное преобразование. Отличается от однократного одноканального преобразования тем, что измерения автоматически продолжаются после первого преобразования (нет необходимости переключать содержимое бита ENC). Содержимое регистра ADC12MEMx необходимо вычитывать до того, как будет произведено следующее преобразование. Выход из непрерывного процесса преобразований можно осуществить программной установкой бита ENC в 0.
Повторяющееся многоканальное преобразование. Отличается от однократного многоканального преобразования тем, что при достижении регистра, отмеченного установленным битом EOS, последовательность автоматически возобновляется, начиная с регистра, номер которого определен битовым полем CSTARTADDR.
Модуль ADC12 имеет дополнительные режимы работы, определяемые состоянием бита MSC (Multiple Sample and Conversion) регистра управления АЦП. Эти дополнительные режимы работают только в том случае, если не задан режим однократного одноканального преобразования и для формирования периода выборки используется таймер TSH. Если MSC=1, следующее преобразование в серии производится максимально быстро, т.е. не дожидаясь срабатывания источника старта АЦП, а непосредственно после окончания предыдущего преобразования. При установленном бите MSC логика работы АЦП меняется следующим образом.
Для однократного многоканального преобразования запуск АЦП всегда производится при срабатывании источника старта, после чего автоматически выполняется несколько измерений в зависимости от состояния бита EOS.
Для повторяющегося одноканального режима преобразования первый запуск АЦП производится при срабатывании источника старта, после чего измерение выбранного канала будет производиться постоянно, не взирая на состояние источника запуска. Выход из данного режима осуществляется установкой бита ENC в состояние 0.
Для повторяющегося многоканального преобразования логика работы аналогична описанной в предыдущем пункте, с той разницей, что постоянно производится измерения серии, начиная с канала, определенного полем CSTARTADDR и заканчивая каналом с установленным битом EOS в регистре ADC12MCTLx.
Модуль ADC12 поддерживает 18 источников прерываний. 16 источников соответствуют флагам ADC12IFG0 – ADC12IFG15, сосредоточенным в регистре ADC12IFG. Каждый флаг устанавливается аппаратно, после того как результат преобразования записывается в соответствующий регистр ADC12MEMx. Два остальных события, вызывающих прерывание, не имеют соответствующих флагов, и могут быть определены с помощью регистра ADC12IV.
Прерывание, условно называемое ADC12OV (overflow), возникает в том случае, когда результат преобразования записывается в любой регистр ADC12MEMx до прочтения предыдущего результата из этого регистра.
Прерывание, условно называемое ADC12TOV (time overflow), генерируется, когда до завершения текущего преобразования затребована другая выборка-преобразование.
Регистры модуля ADC12 представлены в таблице 16.
Таблица 16
-
Имя
Назначение регистра
Адрес
Нач.значен.
ADC12CTL0
Регистр управления 0
1A0h
0
ADC12CTL1
Регистр управления 1
1A2h
0
ADC12IFG
Регистр флагов прерываний
1A4h
0
ADC12IE
Регистр разрешения прерывания
1A6h
0
ADC12IV
Регистр идентификации прерывания
1A8h
0
ADC12MEM0
Регистр памяти результата 0
140h
?
ADC12MEM1
Регистр памяти результата 1
142h
?
ADC12MEM2
Регистр памяти результата 2
144h
?
ADC12MEM3
Регистр памяти результата 3
146h
?
ADC12MEM4
Регистр памяти результата 4
148h
?
ADC12MEM5
Регистр памяти результата 5
14Ah
?
ADC12MEM6
Регистр памяти результата 6
14Ch
?
ADC12MEM7
Регистр памяти результата 7
14Eh
?
ADC12MEM8
Регистр памяти результата 8
150h
?
ADC12MEM9
Регистр памяти результата 9
152h
?
ADC12MEM10
Регистр памяти результата 10
154h
?
ADC12MEM11
Регистр памяти результата 11
156h
?
ADC12MEM12
Регистр памяти результата 12
158h
?
ADC12MEM13
Регистр памяти результата 13
15Ah
?
ADC12MEM14
Регистр памяти результата 14
15Ch
?
ADC12MEM15
Регистр памяти результата 15
15Eh
?
ADC12MCTL0
Управляющий регистр памяти результата 0
80h
0
ADC12MCTL1
Управляющий регистр памяти результата 1
81h
0
ADC12MCTL2
Управляющий регистр памяти результата 2
82h
0
ADC12MCTL3
Управляющий регистр памяти результата 3
83h
0
ADC12MCTL4
Управляющий регистр памяти результата 4
84h
0
ADC12MCTL5
Управляющий регистр памяти результата 5
85h
0
ADC12MCTL6
Управляющий регистр памяти результата 6
86h
0
ADC12MCTL7
Управляющий регистр памяти результата 7
87h
0
ADC12MCTL8
Управляющий регистр памяти результата 8
88h
0
ADC12MCTL9
Управляющий регистр памяти результата 9
89h
0
ADC12MCTL10
Управляющий регистр памяти результата 10
8Ah
0
ADC12MCTL11
Управляющий регистр памяти результата 11
8Bh
0
ADC12MCTL12
Управляющий регистр памяти результата 12
8Ch
0
ADC12MCTL13
Управляющий регистр памяти результата 13
8Dh
0
ADC12MCTL14
Управляющий регистр памяти результата 14
8Eh
0
ADC12MCTL15
Управляющий регистр памяти результата 15
8Fh
0
ADC12CTL0 (Control 0) – содержат биты управления АЦП.
15 12 11 8
-
SHT1x
SHT0x
7 6 5 4 3 2 1 0
-
MSC
REF2_5V
REFON
ADC12ON
ADC12
OVIE
ADC12
TOVIE
ENC
ADC12SC
Биты 15…12 – SHT1 (Sample/Hold Time) – время выборки/хранения. Состояние этих бит определяет период выборки, выраженный в тактах частоты ADC12CLK, для регистров ADC12MEM8 …ADC12MEM15.
-
SHT
Циклы ADC12CLK
0000
4
0001
8
0010
16
0011
32
0100
64
0101
96
0110
128
0111
192
1000
256
1001
384
1010
512
1011
768
1100
1024
1101
1024
1110
1024
1111
1024
Биты 11…8 – SHT0 (Sample/Hold Time) – время выборки/хранения. Состояние этих бит определяет период выборки, выраженный в тактах частоты ADC12CLK, для регистров ADC12MEM7 …ADC12MEM0. Соответствие кода в этом поле количеству тактов такое же, как для битов SHT1.
Бит 7 – MSC (Multiple Sample and Conversion) – множественные выбор и преобразования.
0 – каждое новое преобразование начинается после срабатывания источника старта АЦП;
1 – следующее преобразование начинается непосредственно после окончания предыдущего.
Бит 6 – REF2_5V (Reference 2.5V) – опора 2.5V. Установка/сброс этого бита задает напряжение встроенного генератора опорного напряжения 2.5/1.5 V соответственно.
Бит 5 – REFON – включение генератора опоры. Установка/сброс этого бита включает/выключает генератор опорного напряжения.
Бит 4 – ADC12ON – включение модуля АЦП. Установка/сброс этого бита включает/выключает модуль АЦП.
Бит 3 – ADC12OVIE (Overflow Interrupt Enable) – разрешение прерывания по переполнению АЦП. Установка/сброс этого бита разрешает/запрещает прерывание, возникающее в случае, если содержимое ADC12MEMx не вычитано к моменту записи в него следующих значений.
Бит 2 – ADC12TOVIE (Time Overflow Interrupt Enable) – разрешение прерывания по переполнению времени выборки АЦП. Установка/сброс этого бита разрешает/запрещает прерывание, возникающее в случае, если до завершения текущего преобразования затребована другая выборка-преобразование.
Бит 1 – ENC (Enable Conversion) – разрешение преобразования. Установка/сброс этого бита разрешает/запрещает преобразование АЦП.
Бит 0 – ADC12SC (Start Conversion) – программный старт преобразования. Установка этого бита вызывает старт преобразования АЦП в том случае, если поле SHS регистра ADC12CTL1 установлено в 0. Если для формирования периода выборки используется таймер TSH, бит сбрасывается автоматически, в противном случае этот бит должен сбрасываться программно. В этом случае, время, в течении которого этот бит удерживается в 1, будет определять период выборки внешнего сигнала.
Примечание. Биты с 4 по 15 этого регистра могут быть модифицированы только, если бит ENC=0.
ADC12CTL1 (Control 1) – содержат биты управления АЦП.
15 12 11 10 9 8
-
CSTARTADDR
SHS 1, 0
SHP
ISSH
7 5 4 3 2 1 0
-
ADC12DIV 2,1,0
ADC12SSEL 1,0
CONSEQ 1,0
ADC12BUSY
Биты 15…12 – CSTARTADDR (Conversion Start Address) – стартовый адрес преобразования. Задает номер пары регистров – ADC12MEMx и ADC12MCTLx, начиная с которых, будет производиться преобразование.
Биты 11,10 – SHS (Sample/Hold Source Select) – выбор источника выборки/хранения.
-
SHS1
SHS0
Источник
0
0
Бит ADC12SC
0
1
Выход TACC1
1
0
Выход TBCC0
1
1
ВыходTBCC1
Бит 9 – SHP (Sample/Hold Pulse mode) – выбор режима выборки. Установка/сброс этого бита разрешает/запрещает использование таймера TSH.
Бит 8 – ISSH (Invert Signal Sample/Hold) – инвертирование сигнала выборки/хранения. Установка этого бита инвертирует сигнал, генерируемый источником, определенным битами SHS этого регистра.
Биты 7,6,5 – ADC12DIV (Divider) – делитель для частоты ADC12CLK. Состояние этих бит задают коэффициент деления тактовой частоты, определенной битами ADC12SSEL этого регистра.
-
ADC12DIV2
ADC12DIV1
ADC12DIV0
Коэф.делен.
0
0
0
1 / 1
0
0
1
1 / 2
0
1
0
1 / 3
0
1
1
1 / 4
1
0
0
1 / 5
1
0
1
1 / 6
1
1
0
1 / 7
1
1
1
1 / 8
Биты 4,3 – ADC12SSEL (Source Select) – определяют источник тактирования АЦП.
-
ADC12SSEL1
ADC12SSEL0
Источник
0
0
ADC12OSC
0
1
ACLK
1
0
MCLK
1
1
SMCLK
Биты 2,1 – CONSEQ (Conversion Sequence) – последовательность преобразования. Биты определяют режим преобразования АЦП.
-
CONSEQ1
CONSEQ0
Режим
0
0
Однократный одноканальный
0
1
Однократный многоканальный
1
0
Повторяющийся одноканальный
1
1
Повторяющийся многоканальный
Бит 0 – ADC12BUSY – индицирует активность АЦП, доступен только по чтению. Устанавливается аппаратно, если АЦП находится в состоянии выборки или преобразования, в противном случае – сбрасывается.
Примечание. Биты с 3 по 15 этого регистра могут быть модифицированы только если бит ENC=0.
ADC12MEMx (Memory) – регистры буферной памяти АЦП, предназначенные для сохранения результатов преобразования. Результат 12-ти разрядного преобразования АЦП сохраняются в младших битах регистров. Биты 15…12 всегда читаются как 0.
ADC12MCTLx (Memory Control) – регистры управления буферной памятью АЦП. 8-ми разрядные регистры, содержащие номер канала, источник опоры и признак конца последовательности для соответствующего регистра ADC12MEMx.
7 6 4 3 0
-
EOS
SREF 2,1,0
INCH
Бит 7 – EOS (End Of Sequence) – конец последовательности. Для многоканальных режимов логическая 1, установленная в этом бите, задает последнее преобразовании в серии.
Биты 6,5,4 – SREF (Select Reference) – выбор опоры. Задают тип опорного напряжения АЦП для данного преобразования.
-
SREF2
SREF1
SREF0
Опора
0
0
0
Vr+ = AVcc; Vr-=AVss
0
0
1
Vr+ =VREF+; Vr-=AVss
0
1
0
Vr+ = VeREF+; Vr-=AVss
0
1
1
Vr+ = VeREF+; Vr-=AVss
1
0
0
Vr+ = AVcc; Vr-=VREF-
1
0
1
Vr+ =VREF+; Vr-= VREF-
1
1
0
Vr+ = VeREF+; Vr-= VREF-
1
1
1
Vr+ = VeREF+; Vr-= VREF-
Биты 3…0 – INCH (Input Channel) – входной канал. Эти биты задают физический канал, напряжение которого будет сохранено в соответствующем регистре ADC12MEMx.
-
INCH
Канал
0000
A0
0001
A1
0010
A2
0011
A3
0100
A4
0101
A5
0110
A6
0111
A7
1000
VeREF+
1001
VREF-
1010
Температ. датчик
1011
(AVcc-AVss)/2
1100
(AVcc-AVss)/2
1101
(AVcc-AVss)/2
1110
(AVcc-AVss)/2
1111
(AVcc-AVss)/2
ADC12IE (Interrupt Enable) – разрешение прерывания. Регистр содержит 16 битов разрешения прерывания для записи результатов преобразования в регистры ADC12MEMx. Бит 0 – соответствует записи в регистр ADC12MEM0, бит 1 – в регистр ADC12MEM1 и т.д. Логическая 1 в битах – разрешает, а 0 - запрещает прерывание.
ADC12IFG (Interrupt Flag) – флаги прерывания. Регистр содержит 16 флагов, которые устанавливаются аппаратно при записи результата преобразования в соответствующий регистр ADC12MEMx. Сбрасываются аппаратно при чтении соответствующего регистра ADC12MEMx или программно.
ADC12IV (Interrupt Vector) – регистр идентификации прерывания. В том случае, если возникают условия для запроса прерывания, в этом регистре генерируется код, позволяющий определить индекс источника прерывания – переполнение АЦП или установка флагов в регистре ADC12IFG. Флаги переполнения автоматически сбрасываются после чтения ADC12IV. В том случае, если имеется несколько установленных флагов требования прерывания, в регистр подставляется код источника прерывания с более высоким приоритетом. После вычитывания содержимого регистра, в него подставляется код следующего источника прерывания.
-
Код ADC12IV
Источник
Приоритет
00h
Нет прерываний
02h
Память не вычитана
Высший
04h
Запрос до окончания преобразования
06h
Запись в ADC12MEM0
08h
Запись в ADC12MEM1
0Ah
Запись в ADC12MEM2
0Ch
Запись в ADC12MEM3
0Eh
Запись в ADC12MEM4
10h
Запись в ADC12MEM5
12h
Запись в ADC12MEM6
14h
Запись в ADC12MEM7
16h
Запись в ADC12MEM8
18h
Запись в ADC12MEM9
1Ah
Запись в ADC12MEM10
1Ch
Запись в ADC12MEM11
1Eh
Запись в ADC12MEM12
20h
Запись в ADC12MEM13
22h
Запись в ADC12MEM14
24h
Запись в ADC12MEM15
Низший
Техника работы с регистром ADC12IV аналогична регистру TAIV (см. п. 3.7)
ПРИМЕР
Организовать измерение напряжений подключенных к выводам A0, A2, A3 и A6. Тактирование от SMCLK – 8MHz, опора – встроенная 2.5V, выходное сопротивление источников A0, A2 и A6 – 1 kOm, A3 – 50 kOm. Измеренные напряжения, выраженные в милливольтах, записать в ОЗУ, начиная с адреса 200h.
Для нормального тактирования АЦП необходимо установить частоту, не выше 6.3 MHz. Поэтому необходимо частоту SMCLK разделить на 2, частоты для тактирования – 4 MHz.
Рассчитаем время выборки, необходимое для источников 1kOm
t1 = 9.011* (1+2)*103 * 40 * 10-12 + 800 * 10-9 ≈ 2 µs
Это время, выраженное в тактах АЦП составит
N1=t1 * 4 MHz = 2* 4 = 8
Значение N1=8 соответствует коду 0001b поля SHT регистра ADC12CTL0.
Рассчитаем время выборки, необходимое для источников 50kOm
t2 = 9.011* (50+2)*103 * 40 * 10-12 + 800 * 10-9 ≈ 20 µs
Время t2, выраженное в тактах SMCLK составит
N2 = t2 * 4 MHz = 20 * 4 = 80
Значение N2=80 соответствует коду 0101b поля SHT регистра ADC12CTL0.
Измерение будем проводить серией из 4-х преобразований (однократный многоканальный режим, множественный выбор/преобразование), с программным стартом. Т.к. имеется возможность установить разное время захвата для групп буферной памяти ADC12MEM0 – 7 и ADC12MEM8 – 15, распределим буферную память следующим образом:
- ADC12MEM5 – для канала A0, время захвата 2 µs;
- ADC12MEM6 – для канала A2, время захвата 2 µs;
- ADC12MEM7 – для канала A6, время захвата 2 µs;
- ADC12MEM8 – для канала A3, время захвата 20 µs, последнее измерение в серии.
Для расчета напряжений, выраженных в милливольтах, воспользуемся соотношением:
V = N*REF/4096
где
V – входное напряжение;
N – результирующий код преобразования;
REF – напряжение опоры.
Т.к. величина V должна быть выражена в милливольтах, значение REF подставим так же в милливольтах. Тогда
V = N * 2500 / 4096 = N * 2500 / 212
Вместо операции деления можно использовать сдвиг вправо 32-х битного результата умножения на 12 бит. Тот же результат можно более быстро получить с помощью 4-х кратного сдвига влево 32-х битного результата умножения и отбрасывания младших 16-ти бит. Однако, более эффективно, расчет по приведенной формуле можно выполнить следующим образом. Заранее вычисляется коэффициент
k= 216 * 2500 / 212 = 24 * 2500 = 40000
При расчете необходимо код преобразования АЦП умножить на 40000, тогда старшее слово продукта умножения даст требуемое значение.
#include <msp430x14x.h>
. . .
; SHT1=5, SHT0 =1, MSC=1, REF2_5V=1, REFON=1, ADC12ON=1, ENC=0
mov #51F0h, &ADC12CTL0
; CSTARTADDR=5, SHS=0, SPH=1, ADC12DIV=1,ADC12SSEL=3, CONSEQ=1
mov #523Ah, &ADC12CTL1
mov.b #10h, &ADC12MCTL5 ; SREF=1, INCH=0, EOS=0
mov.b #12h, &ADC12MCTL6 ; SREF=1, INCH=2, EOS=0
mov.b #16h, &ADC12MCTL7 ; SREF=1, INCH=6, EOS=0
mov.b #93h, &ADC12MCTL8 ; SREF=1, INCH=3, EOS=1
clr &ADC12IFG ; на всякий случай сбрасываем флаги
bis #3, &ADC12CTL0 ; старт АЦП : ENC=1, ADC12SC=1
mov #ADC12MEM5, R4 ; указатель на ADC12MEM5
mov #200h, R5 ; указатель на ОЗУ
wait: bit #100h, &ADC12IFG ; преобразование завершено?
jz wait ; если нет - цикл
mov #40000, &MPY
store: mov @R4+, &OP2 ; расчет напряжения
mov &RESHI, R12 ; читаем результат
rla &RESLO ; округляем до целого
adc R12
mov R12, 0(R5) ; сохраняем значение напряжения в ОЗУ
incd R5 ; наращиваем указатель ОЗУ
cmp #208h, R5 ; все данные записаны в ОЗУ?
jne store ; если нет -цикл
. . .
