Простір вводу/виводу складається з 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 – Структура пам’яті
За допомогою будь-якого з цих режимів виробляється доступ до всіх 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.