[an error occurred while processing this directive]
|
Ситуация такая: режим АЦП запрограммирован на запуск каждого цикла преобразования по событию EVA (T2CNT == T2PR, f=30кГц).
Кусок кода (упрощенно, без началной инициализации) выглядит так:
;=============================================================
lar AR0, #STARTMEM
lar AR1, #LENGTH-1
mar *, AR0
ldp #T2CON>>7
splk #0h, T2CNT
SBIT1 T2CON, B6_MSK; T2 -> таймер ADC start
ldp #ADCTRL2>>7
$pram_adc_check1:
bit ADCTRL2, BIT9
bbz $pram_adc_check1
lacl RESULT0
rpt #5
sfr
sacl *+, AR1
splk #0100011100000010b, ADCTRL2; сброс секвенсора АЦП
banz $pram_adc_check1, *-, AR0
;=============================================================
На вход АЦП подается постоянное напряжение (с батарейки). При этом оцифрованный график имеет вид гармошки с амплитудой в 5 (!) младших разрядов АЦП, вместо 2х разрядов. Однако если дополнить код 2мя nop:
;=============================================================
$pram_adc_check1:
nop
nop
bit ADCTRL2, BIT9
bbz $pram_adc_check1
;=============================================================
То амплитуда гармошки сразу падает до 2х - 3х LSB. Т.е. более-менее преемлемо. При этом, если 2 nop заменить на один, или на 3 и более, - то амплитуда гармошки даже возрастает до 6 LSB.
Схему запитывал от аккумуляторов (VCCA от отдельного аккумуллятора питал), т.е. помехи исключены.
Вопрос: Каким образом результаты АЦП зависят от кол-ва этих nop ?? (причем чем больше их, тем еще хуже) и где нужно покопаться, чтобы не было такого фактора случайности.
PS: в errate написано про nop только для режимов ручного запуска и говорится про 4 и более nop перед проверкой EOC
PPS: частоту таймера менял от 30 до 5 кГц.
Спасибо.
E-mail: info@telesys.ru