Смекни!
smekni.com

Мікропроцесорний АЦП порозрядного врівноваження із ваговою надлишковістю, що калібрується (стр. 5 из 6)

Простір вводу/виводу складається з 64 адрес для периферійних функцій процесора, таких як управляючі регістри, таймери/лічильники і інші. Доступ до простору вводу/виводу може здійснюватися безпосередньо, як до елементів пам'яті розташованих після регістрового файлу (20h- 5Fh).

Доступ до статичного ОЗП, регістровому файлу і регістрам вводу/виводу здійснюється за допомогою п'яти доступних режимів адресації підтримуваних архітектурою AVR.

Весь простір пам'яті AVR є лінійним і безперервним. Гнучкий модуль переривань має власний керуючий регістр в просторі вводу/виводу , і прапор глобального дозволу переривань в регістрі стану.

Файл регістрів загального призначення

Всі команди, що оперують з регістрами прямо адресуються до будь-якого з регістрів за один машинний цикл. Кожному регістру привласнена адреса в просторі даних, вони відображаються на перші 32 комірки ОЗУ. Хоча регістровий файл фізично розміщений поза ОЗП, подібна організація пам'яті дає гнучкий доступ до регістрів. Регістри X, У і Z можуть використовуватися для індексації будь-якого регістра. Окрім звичних функцій, регістри R26..R31 мають додаткові функції, ці регістри можна використовувати як адресні покажчики у області пам'яті даних.

Flash-пам'ять програм.

AT90S2333 містять 2К завантажувальної flash-пам'яті для зберігання програм. Оскільки всі команди займають одне 16- або 32-розрядне слово, flash-пам'ять організована як 1Kx16. Flash--пам'ять витримує не менше 1000 циклів перезапису. Програмний лічильник має ширину 10 біт і дозволяє адресуватися до 1024 слів програмної flash-пам'яті.

EEPROM пам'ять даних

AT90S2333 містять 128 байт енергонезалежної пам'яті (EEPROM). EEPROM організована як окрема область даних, кожен байт якої може бути прочитаний і перезаписаний. EEPROM витримує не менше 100000 циклів запису/стирання.

Статичний ОЗП даних

На рисунку 3.1 показана організація пам'яті даних в AT90S2333. 224 елементи пам'яті включають регістровий файл, пам'ять вводу/виводу статичний ОЗП даних.

Перші 96 адрес використовуються для регістрового файлу і пам'яті вводу/виводу , наступні 128 - для ОЗП даних.

Рисунок 3.1 – Структура пам’яті

При зверненні до пам'яті використовуються п'ять різних режимів адресації: прямий, безпосередній із зсувом, безпосередній, безпосередній з попереднім декрементом і безпосередній з постінкрементом. Регисти R26..R31 регістрового файлу використовуються як покажчики для безпосередньої адресації. Пряма адресація має доступ до всієї пам'яті даних. Безпосередня адресація із зсувом використовується для доступу до 63 комірок, базова адреса яких задається вмістом регістрів У або Z.

За допомогою будь-якого з цих режимів виробляється доступ до всіх 32 регістрів загального призначення, 64 регістрів вводу/виводу і 128 комірок ОЗП.

Розподіл адресного простору МК для пристрою здійснюється таким чином: R16 – регістр, що містить значення кількості розрядів, R17, R18 – для збереження та обчислення суми СЗР і МЗР, R19 – встановлення порта С для першого такту перетворення, а також для збереження адреси комірки пам’яті EEPROM, R20 – збереження проміжного значення ваг СЗР або МЗР i-го такту перетворення, R21 – для зчитування значень з компаратора, R22 – для переходу до адреси i-го адресу МЗР, R23, R24, R25 – для роботи таймера.

40 байт EEPROM для збереження двійкових еквівалентів надлишкових СЗР та МЗР.

3.3 Розробка програми, що керує роботою мікропроцесора

В МП АЦП порозрядного врівноваження із ваговою надлишковістю, що калібрується, МК виконує цифрове обчислення ваг розрядів. Для забезпечення основного перетворення аналог-код періодом 100мкс для 20 тактів перетворення перемикання повинно складати 100/20 – 5мкс. При тактовій частоті мікроконтролера 10 МГц його період 100 нс. Максимальне значення таймера: 216 = 65535.

Потрібно підібрати тактову частоту таймера так, щоб він рахував до 65535 за 5мкс.

При тактовій частоті 10 МГц таймер дорахує до кінця за 100 нс * 65536 = 6,6 мс, що більше 5 мкс.

Потрібно встановити Bit1, Bit0 TCCR1B без коефіцієнту поділу частоти TCCR1B = 0b00000001

Визначимо число, що буде завантажено до OCR1A з яким буде порівнювати компоратор поточний стан таймера.

Підрахуємо кількість тактових імпульсів за час 5 мкс: 5мкс / 100нс = 50

Затримка у 5мкс дорівнює 50 імпульсів. Саме це число завантажимо у OCR1A. Цей регістр складається з двох 8 бітних регістрів OCR1AH та OCR1AL. Перетворемо 50 у шестнадцяти розрядне число й завантажимо його до OCR1AH (старша частина) та OCR1AL (молодша частина).

50(10) = 32(16).

OCR1AH = $00

OCR1AL = $32

Цифрове обчислення коду здійснюється за допомогою двійкових еквівалентів надлишкового коду на виході РПН у ЦОП шляхом підсумовування двійкових еквівалентів ваг розрядів, які виявилися включеними після зрівноважування вхідного аналогового сигналу та зберігаються в EEPROM. Для

НПСЧ на основі “золотої пропорції“ двійкові еквіваленти являють собою двохбайтові числа, які наведено в таблиці 3.1.

Таблиця 3.1 – Двійкові еквіваленти надлишкового коду ЦАП

№ розряду Двійковий код № розряду Двійковий код
СЗР МЗР СЗР МЗР
1 $00 $01 11 $00 $7B
2 $00 $02 12 $00 $B7
3 $00 $03 13 $01 $42
4 $00 $04 14 $02 $09
5 $00 $08 15 $03 $4B
6 $00 $0B 16 $05 $53
7 $00 $12 17 $08 $A2
8 $00 $1D 18 $0D $FF
9 $00 $2F 19 $16 $B0
10 $00 $4B 20 $24 $C8

Програмна реалізація МП АЦП порозрядного врівноваження із ваговою надлишковістю, що калібрується доцільно розробити за допомогою компілятора мови асемблера. Лістинг програми має вигляд:

.include"2333def.inc"

;ПІДГОТОВКА ДО РОБОТИ

.defCOUNTER=R16

.defSZR=R17 ;старші розряди

.defMZR=R18 ;молодші розряди

.defZDVUG=R22 ;перехід до МЗР

CLRSZR

CLRMZR

LDICOUNTER,$13

LDIZDVUG,$14

LDIR19,$0E

OUTDDRC,R19

SBIPORTC,2 ;ВСТАНОВЛЕННЯ CИГНАЛУ S

SBIPORTC,1 ;ВСТАНОВЛЕННЯ CИГНАЛУ D

SBIPORTC,3 ;ВСТАНОВЛЕННЯ CИГНАЛУ C

CBIPORTC,3 ;СКИД СИГНАЛУ C

CBIPORTC,1 ;СКИД СИГНАЛУ C

RJMPSTART

; ПІДПРОГРАМА ЗЧИТУВАННЯ ЦИФРОВИХ ЕКВІВАЛЕНТІВ СЗРІ МЗР З EEPROM

.def ADR=R19

.def VAGA=R20

EEPROM_READ:

OUTEEAR,ADR

SBIEECR,0

INVAGA,EEDR

RET

START:

; ВИКОНАННЯ ЗЧИТУВАННЯ ЗНАЧЕННЯ З КОМПАРАТОРА

M2:INR21,$1

ANDIR21,$1

BREQL1

SBIPORTC,3

CBIPORTC,3

RJMPL2

;ПЕРЕВІРКА ЛІЧИЛЬНИКА КІЛЬКОСТІ ТАКТІВ ПЕРЕТВОРЕННЯ

L2:TSTCOUNTER

BRNEM1

DECCOUNTER

RJMPM2

;ВИКОНАННЯ ЦИФРОВОГО ОБЧИСЛЕННЯ ВАГ РОЗРЯДІВ

L1:

.def TEMP =R23

.def TEMP1 =R24

;ВЕКТОРИ ПЕРЕРИВАНЬ

RJMP RESET

RJMP INT0

RJMP INT1

RJMP TIMER1_CAPT

RJMP TIMER1_COMP1

RJMP TIMER1_OVF

RJMP TIMER0_OVF

RJMP SPI_STC

RJMP UART_RX

RJMP UART_UDRE

RJMP UART_TX

RJMP ADC

RJMP RDY

RJMP COMP

;RESET:

INT_0:

INT_1:

TIMER1_CAPT:

;TIMER1_COMP1

TIMER1_OVF:

TIMER0_OVF:

SPI_STC:

UART_RX:

UART_UDRE:

UART_TX:

ADC:

RDY:

COMP:

RETI

;ІНІЦІАЛІЗАЦІЯ ТАЙМЕРА

RESET:

LDI TEMP,0B01000000 ;ДОЗВІЛ ПЕРЕРИВАННЯ КОМПАРАТОРА

OUT TIMSK,TEMP

LDI TEMP,0B00000001 ;ТАКТОВИЙ СИГНАЛ = CK

OUT TCCR1B,TEMP

LDI R25,$00 ;ІНІЦІАЛІЗАЦІЯ КОМПАРАТОРА

OUT OCR1H,R25

LDI TEMP,$32

OUT OCR1L,TEMP

LDI TEMP,RAMEND ;УСТАНОВКА ВКАЗІВНИКА СТЕКА

OUT SPL,TEMP

LDI TEMP,0 ;СКИД ТАЙМЕРА

OUT TCNT1H,TEMP

OUT TCNT1L,TEMP

SEI ;ДОЗВІЛ ПРЕРИВАННЯ

;ВИКОНАННЯ ЦИФРОВОГО ОБЧИСЛЕННЯ ВАГ СЗР

MOVADR,COUNTER

RCALLEEPROM_READ

ADDSZR,VAGA

;ВИКОНАННЯ ЦИФРОВОГО ОБЧИСЛЕННЯ ВАГ МЗР

ADDADR,ZDVUG

RCALLEEPROM_READ

ADDMZR,VAGA

; ОБРОБЛЮВАЧ ПЕРЕРИВАННЯ КОМПАРАТОРА

TIMER1_COMP1:

LDI TEMP,0 ;СКИД ТАЙМЕРА

OUT TCNT1H,TEMP

OUT TCNT1L,TEMP

SBIPORTC,1

SBIPORTC,3

CBIPORTC,3

RJMPL2

;ВИВЕДЕННЯ ВАГ РОЗРЯДІВ У ВИГЛЯДІ ПАРАЛЕЛЬНОГО ДВІЙКОВОГО КОДУ НА ПОРТИ (ПОРТ D - СЗР; ПОРТ B - МЗР)

M1:.def TEMPP =R16

LSR MZR

LSR MZR

LDI TEMPP,$FF

OUT DDRD,TEMPP

OUT DDRB,TEMPP

OUT PORTD,SZR

OUT PORTB,MZR

NOP


4. Моделювання роботи

Моделювання даного пристрою виконується в програмі моделювання Proteus 7 Professional. за відсутності програмних еквівалентів електронних компонентів, доцільно виконати моделювання роботи МК, яке полягає в тому, щоб забезпечити наявність на вході PC.0 рівнів сигналів, що відповідають рівням при перетворенні на і-му такті та свідчать про стан “вмикання“ чи “вимикання“ певного розряду. В даному випадку від наявності рівня логічного 0 чи логічної 1 відбувається виконання обчислення кодової комбінації двійкового еквіваленту аналогового сигналу на основі цифрових еквівалентів надлишкових ваг розрядів ЦАП. Для отримання кінцевого результату у вигляді двійкового 14-розрядного коду, що є цифровим представленням аналогової величини, що підлягала перетворенню, використовується 14 світлодіодів. Загоряння світлодіодів свідчить про наявність стану “ввімкнено“ і-го розряду. Для прикладу скористаємося рядом сигналів виду 00010000000101110110, що свідчить про вмикання 2,3,5,6,7,9,17 розрядів. Цифрове обчислення коду здійснюється за допомогою двійкових еквівалентів надлишкового коду у ЦОП, які наведено в таблиці 3.1. Для початку програма МК в ЦОП обраховує суму СЗР, а потім МЗР та зберігає їх в регістрах R17, R18 для подальшого виведення у вигляді 14-розрядного двійкового коду на вихідну шину.

Для вище вказаного випадку кодових комбінацій отримуємо, що сума СЗР буде рівна $08, для МЗР – $FB.

Представляючи у двійкових еквівалентах та враховуючи зсув МЗР на 2 біти, отримаємо: 00001000 111110.


Висновки

В роботі було розроблено МП АЦП порозрядного врівноваження із ваговою надлишковістю, що калібрується, а також програму, що керує роботою МК. Програма наочно демонструє принцип роботи пристрою, який дозволяє зручно та якісно виконувати режим основного перетворення аналог-код з програмною корекцією ваг розрядів надлишкового ЦАП, а також передбачає можливість корекції роботи АЦП шляхом перезаписування надлишкових ваг розрядів у двійкових еквівалентах в EEPROM.