ADLAR – выравнивание результата преобразования. Если ADLAR=1, результат преобразования выравнивается по левой границе 16-разрядного слова (младшие 6- разрядов регистра ADCL – незначащие). Режим применяется в случае достаточности 8-разрядного преобразования. При этом, полученный код можно считать только из регистра ADCH.
MUX4 .. MUX0 – выбор входного канала. Биты MUX4 .. MUX0 задают номер опрашиваемого канала АЦП в двоичном коде. Биты MUX4 .. MUX3 применяются при использовании входов АЦП в дифференциальном режиме.
1.3. Регистры данных
После завершения преобразования (при установке в 1 флага ADIF регистра ADCSRA) его результат сохраняется в регистрах данных АЦП. Поскольку результат преобразования 10-разрядный, он физически размещается в двух регистрах ввода\вывода ADCH и ADCL.
По умолчанию результат преобразования выравнивается в право (старшие 6-разрядов регистра ADCH – незначащие).
Для считывания результата, сначала необходимо прочитать регистр ADCL, а затем -ADCH. Пока ADCH не будет прочитан, запись в регистры данных для АЦП блокируется.
Если результат преобразования выровнен влево, предварительной установкой бита ADLAR=1 регистра ADMUX, достаточно считать только содержимое регистра ADCH.
2. Порядок работы с АЦП без использования прерываний
1. Задать номер опрашиваемого канала в регистре ADMUX.
2. Разрешить работу АЦП, запустить АЦП на преобразования, установить коэффициент деления предделителя. (C6(H)→ADCSRA)
3. Ожидать окончания преобразования, опрашивая бит ADIF регистра ADCSRA.
4. Считать данные из регистров данных АЦП.
Пример на ассемблере:
;Опрос канала ADC1 (бит PF1 порта F)
;Вход AREF не подключен
.include <m128def.inc>
ldi r19,0x10 ;Инициализация стека
out SPH,r19
ldi r19,0xFF
out SPL,r19
ldi r19, 0b11111111 ;Порт A на вывод
out DDRA, r19
;Опрос АЦП с выравниванием вправо (бит ADLAR=1 в рег. ADMUX)
;С помещением результата в r18
ldi r16,0b01100001 ; выбор канала 1 и выравнивание
out ADMUX,r16 ; результата вправо, ИОН=AVcc
Start:
ldi r16, 0b11000110 ; запуск преобразования
out ADCSRA, r16 ; частота преобразования 7.37/64=115кГц
FinPr:
in r17, ADCSRA ; задержка до окончания преобразования
andi r17, 0x10 ; опрос бита ADIF регистра ADCSRA
breq FinPr
ldi r16, 0x10 ;очистка бита ADIF
out ADCSRA, r16
in r18, ADCH ;чтение 8 старших битов результата
mov r19, r18 ;вывод 8 старших битов результата в порт A
com r19 ;инверсия содержимого регистра r19
out PORTA, r19
rjmp Start
Пример на Cи:
#include <MEGA128.H>
#include <delay.h>
unsigned char D=0;
void main(void)
{
//****Инициализация портов
DDRA=0xff;
DDRB=0x00;
DDRC=0x00;
DDRD=0xff;
SPH=0x10; SPL=0xFF;//Инициализация стека
//****Инициализация АЦП
//Выбор канала 1,Выравнивание результата вправо (бит ADLAR=1
// в рег. ADMUX), ИОН=AVcc
ADMUX=0b01100001;
while (1)
{
//Опрос АЦП
ADCSRA=0b11000110;//запуск преобразования
//частота преобразования 7.37/64=115кГц
while (!(ADCSRA & 0x10));// Проверка завершения преобразования
//(опрос бита ADIF регистра ADCSRA)
ADCSRA |= 0x10; // Очистка бита ADIF записью в него "1"
D = ADCH; //чтение 8 старших битов результата
D= D^0xFF; // Инверсия при помощи XOR
PORTA=D;
delay_ms(1000);
}
}
1. Реализовать программу опроса потенциометра ADC0 подключенного к нулевому каналу встроенного АЦП.
2. Реализовать программу управления технологическим процессом согласно варианту. В качестве датчиков аналогового сигнала использовать потенциометры ADC0, ADC1 подключенных к одноимённым входам встроенного АЦП. Варианты заданий:
а)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.