Короткі теоретичні відомості

АЦП, аналогово-цифровий перетворювач – пристрій, що перетворює вхідний сигнал в дискретний код (цифровий сигнал). Як правило, АЦП – електронний пристрій, що перетворює напругу в двійковий код.

Розрядність АЦП характеризується кількістю дискретних значень, які перетворювач може видати на виході, вимірюється в бітах. Наприклад, АЦП, здатний видавати 256 дискретних значень (0…255), має розрядність 8 біт, оскільки: 28=256.

Розрядність може бути також визначена в величинах вхідного сигналу і виражена, наприклад, в вольтах. Розрядність за напругою дорівнює напрузі, що відповідає максимальному вихідному коду, який ділиться на кількість вихідних значень.

Мікроконтролер ADuC481 як і інші пристрої компанії ADI має високоточний АЦП і програмований ЦАП.

АЦП керується за допомогою регістрів спеціальних функцій ADCCON1..ADCCON3. Молодших 8 біт результату перетворення зберігаються в регістрі ADCDATAL, старших 4 біти – в молодшій тетраді регістру ADCDATAH. В старшу тетраду контролер записує номер поточного каналу.

Значення регістру ADCCON1 керує режимом запуску та роботи АЦП. Його адреса – 0xEF, початкове значення – 0x40, побітова адресація не підтримується.


 

Таблиця 6.1 – Біти регістру ADCCON1

Біт Назва Призначення
7 MD1 Ввімкнення АЦП. Якщо біт встановлений – АЦП ввімкнено
6 EXT_REF Біт встановлений – АЦП працює від зовнішнього джерела опорної напруги, Біт скинений – АЦП працює від внутрішнього джерела опорної напруги.
5 CK1

Визначають подільник тактової частоти в частоту АЦП. Частота АЦП не може перевищувати 8.38MHz

CK1 CK0 Подільник

0     0     32

0     1     4

1     0     8

1     1     2

4 CK0
3 AQ1

Визначають кількість періодів АЦП, що витрачаються на захоплення сигналу пристроєм вибірки та зберігання (апертурний час). Для високоомних джерел сигналу значення мають збільшуватися.

AQ1 AQ0 Кількість періодів

0     0     1

0     1     2

1     0     3

1     1     4

2 AQ0
1 T2C Встановлений біт дозволяє запуск АЦП при переповненні таймера 2
0 EXC Встановлений біт дозволяє запуск АЦП при низькому рівні на ліній CONVST

Молодша тетрада регістру ADCCON2 визначає обраний канал перетворення, старша керує запуском АЦП. Адреса регістру – 0xD8, початкове значення – 0x00, побітова адресація підтримується.

 

Таблиця 6.2 – Біти регістру ADCCON2

Біт Назва Призначення
7 ADCI Переривання АЦП. Встановлюється контролером вкінці єдиного АЦП перетворення або вкінці блоку перетворень в режимі DMA
6 DMA Вмикає режим DMA
5 CCONV Запускає режим послідовних перетворень. Після закінчення кожного перетворення розпочинається нове, доти, доки не користувач не скине біт DMA.
4 SCONV Запускає одне перетворення. Після його завершення біт автоматично скидається
3 CS3

Визначає активний канал АЦП

CS3 CS2 CS1 CS0 Канал

0     0     0     0     ADC0

..........................................................

0     1     1     1     ADC7

1     0     0     0     Датчик температури (не менше 1мкс для захоплення)

1     0     0     1     DAC0 (ЦАП 0)

1     0     1     0     DAC1 (ЦАП 1)

1     0     1     1     AGND (аналоговий спільний)

1     1     0     0     VREF (опорна напруга)

2 CS2
1 CS1
0 CS0

 

Регістр ADCCON3 керує процедурою калібрування і не розглядається в даній лабораторній рободі.

Перед тим, як запускати аналогово-цифрове перетворення слід ввімкнути АЦП – записати в регістр ADCCON1 байт ініціалізації. Наприклад ввімкнемо АЦП з такими параметрами:

Опора – внутрішня (EXT_REF=0)

Подільник – 2 (CK1=1 CK0=1) (fADC=fCLK/2=5.5299МГц)

Апертура – 4 періоди (AQ1=1 AQ0=1)

Запуск від спрацювання таймера 2 та зовнішнього сигналу заборонені (T2C=0 EXC=0). Таким чином байт ініціалізації рівний 101111002=18810=BC16. Записуємо його в регістр ADCCON1.

Далі, щоб провести одиничне вимірювання, потрібно записати в ADCCON2 номер каналу і біти запуску. Так для запуску одиничного перетворення з 7 каналу в ADCCON2 слід записати байт 0x17.

Після запуску дані будуть готові через 17-20 тактів АЦП (в залежності від апертурного часу, встановленого бітами AQ1-AQ0). Якщо подільник частоти АЦП рівний двом (біти CK1=1 CK0=1), то це складе 34-40 тактів мікроконтролера. Взнати точний час завершення аналогово-цифрового перетворення можна опитуючи біт ADCI – вкінці циклу перетворення контролер встановить його.

Результат перетворення знаходитиметься в регістрах ADCDATAH:ADCDATAL.


Приклад програми для лабораторної роботи №6

Під час руху джойстика запалюється точка на матриці світлодіодів.


ADCCON1 DATA 0EFH ;ADC CONTROL

ADCCON2 DATA 0D8H ;ADC CONTROL

ADCDATAL DATA 0D9H ;ADC DATA LOW BYTE

ADCDATAH DATA 0DAH ;ADC DATA HIGH BYTE

ADCI BIT 0DFH ;ADCCON2.7 - ADC INTURRUPT FLAG

SCONV BIT 0DCH ;ADCCON2.4 - SINGLE CONVERSION ENABLE

;DACCON DATA 0FDH;DAC CONTROL REGISTER

;CFG841  DATA 0AFH;GENERAL FLASH/PWM CONTROL REGISTER

dat     EQU R0

adr     EQU R1

Temp1 EQU R2

Temp2 EQU R3

dat1 EQU R4

Segm EQU 0x02


CSEG

ORG 0x0000

jmp begin

ORG 0x0033

begin:

  mov p1, 0xFF

  mov ADCCON1, #0ECh

  call off

  mov TCON, #11111111b

  mov TMOD, #11001100b

beg1:

  call diagonal

  jmp beg1

vboky:

vbik1:

  call rezult1

  cjne R5, #00000000b, vbik2

  cjne R7, #00001110b, vboky

  mov dat1, #00010000b

  jmp vbokend

vbik2:

  call rezult1

  cjne R5, #01001001b, vbik3

  cjne R7, #00001001b, vboky

  mov dat1, #00001000b

  jmp vbokend

vbik3:

  call rezult1

  cjne R5, #00001000b, vbik4

  cjne R7, #00000111b, vboky

  mov dat1, #00000100b  

  jmp vbokend

vbik4:

  call rezult1

  cjne R5, #10010010b, vbik5

  cjne R7, #00000100b, vboky

  mov dat1, #00000010b  

  jmp vbokend

vbik5:

  call rezult1

  cjne R5, #00000000b, vbik1

  cjne R7, #00000000b, vboky

  mov dat1, #00000001b

  jmp vbokend

vbokend:

Ret

diagonal:

; JB p3.2, diagonal

; call vboky

run:

kavalok1:

call rezult2

  cjne R5, #00000000b, kavalok2

  cjne R6, #00000000b, run

  call vboky

  call lampa1

kavalok2:

  call rezult2

  cjne R5, #01001001b, kavalok3

  cjne R6, #00000010b, run

  call vboky

  call lampa2

kavalok3:

  call rezult2

  cjne R5, #10010010b, kavalok4

  cjne R6, #00000100b, run

  call vboky

  call lampa3

      

kavalok4:

  call rezult2

  cjne R5, #00001000b, kavalok5

  cjne R6, #00000111b, run

  call vboky

  call lampa4

kavalok5:

  call rezult2

  cjne R5, #01001001b, kavalok6

  cjne R6, #00001001b, run

  call vboky

  call lampa5

kavalok6:

  call rezult2

  cjne R5, #01110111b, kavalok7

  cjne R6, #00001010b, run

  call vboky

  call lampa6

kavalok7:

  call rezult2

  cjne R5, #00000000b, kavalok1

  cjne R6, #00001110b, run

  call vboky

  call lampa7

jmp run

Ret

rezult1:

  mov ADCCON2, #6h

  clr ADCI

  setb SCONV

  jnb ADCI,$

  mov b, adcdatal

  mov a, adcdatah

  clr acc.7

  clr acc.6

  clr acc.5

  clr acc.4

  mov Tl0, b

  mov TH0, a

  mov R5, TL0

  mov R7, Th0   

Ret

rezult2:

  mov ADCCON2, #7h

  clr ADCI

  setb SCONV

  jnb ADCI,$

  mov b, adcdatal

  mov a, adcdatah

  clr acc.7

  clr acc.6

  clr acc.5

  clr acc.4

  mov Tl1, b

  mov TH1, a

  mov R5, TL1

  mov R6, Th1   

Ret

lampa7:     

  mov dat, #10111111b

  mov adr, #00000101b

  call strob

; mov dat, #00000100b

  mov adr,#00000110b

  call strob1

Ret

lampa6:     

  mov dat, #11011111b

  mov adr, #00000101b

  call strob

; mov dat, #00000100b

  mov adr,#00000110b

  call strob1

Ret

lampa5:     

  mov dat, #11101111b

  mov adr, #00000101b

  call strob

; mov dat, #00000100b

  mov adr,#00000110b

  call strob1

Ret

lampa4:     

  mov dat, #11110111b

  mov adr, #00000101b

  call strob

; mov dat, #00000100b

  mov adr,#00000110b

  call strob1

Ret

lampa3:     

  mov dat, #11111011b

  mov adr, #00000101b

  call strob

; mov dat, #00000100b

  mov adr,#00000110b

  call strob1

Ret

lampa2:     

  mov dat, #11111101b

  mov adr, #00000101b

  call strob

; mov dat, #00000100b

  mov adr,#00000110b

  call strob1

Ret

lampa1:     

  mov dat, #11111110b

  mov adr, #00000101b

  call strob

; mov dat, #00000100b

  mov adr,#00000110b

  call strob1

Ret

off:

  mov dat,#11111111b

  mov adr,#00000101b

  call strob

; mov dat,#00000000b

  mov adr,#00000110b

  call strob1

Ret

strob:

  setb P3.6

  mov P0,dat

  mov P2,adr

  mov P2,#0x00

Ret

strob1:

  setb P3.6

  mov P0,dat1

  mov P2,adr

  mov P2,#0x00

Ret

Delay:

  mov Temp1, #0xFF

loop:

  dec Temp1

  mov Temp2, #0xFF

  djnz Temp2, $

  cjne Temp1, #0x00, loop

Ret

Ldelay:

  call delay

  call delay

  call delay

  call delay

  call delay

  call delay

  call delay

  call delay

  call delay

  call delay

 

RET

END


 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: