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
0 комментариев