BOTTOM Signalize that TCNTn has reached minimum value (zero).
По коду. Херь какая-то.
BOTTOM Signalize that TCNTn has reached minimum value (zero).
Код: Выделить всё
;
.include "m8def.inc"
.cseg
.org 0
;ВЕКТОР ПРЕРЫВАНИЙ
RESET:
rjmp initial
.org 0x0E
ADC_COMPLETE:
in XL, ADCL
in XH, ADCH
RET
;*************************************************
initial:
CLI
ldi R16,low(RAMEND)
out SPL,R16
ldi R16,high(RAMEND)
out SPH,R16
GO:
LDI R16,1<<SE|1<<SM2 ; ADC NOISE
OUT MCUCR,R16
ldi R16, 0b00000000
out ADMUX, R16
main:
LDI R16,1<<ADEN|1<<ADSC|1<<ADIE|1<<ADIF|1<<ADPS2 ;/16
OUT ADCSRA, R16
SEI
sleep ; здесь надо заснуть, что-бы работе АЦП ничего не мешало
; NOP
;ldi R16, 0b00000000
;out ADMUX, R16
;ldi R16, 0b11001100
;out ADCSRA, R16
; здесь надо проснуться
; in XL, ADCL
; in XH, ADCH
mov R17, XL
mov R18, XH
SBI ADCSRA,ADSC
SEI
sleep ; здесь надо опять заснуть, что-бы работе АЦП ничего не мешало
; NOP
m7:
; ldi R16, 0b00000000
;out ADMUX, R16
;ldi R16, 0b11001100
;out ADCSRA, R16
; здесь надо опять проснуться
;in XL, ADCL
;in XH, ADCH
cp XL, R17
cpc XH, R18
brne GO
cp XL, YL
cpc XH, YH
breq GO
brlo m3
rcall vpravo
rjmp GO
m3:
rcall vlevo
rjmp GO
VPRAVO:
RET
VLEVO:
RET
.EXIT
±2 LSB Absolute Accuracy
если "мсек" это МИЛЛИсекунды, то 10 - это очень много! это очень большая задержка по МК-шным меркам. и тут явно что-то не так в схемотехнике, раз нестабильность показаний лечится таким способом...shonty писал(а):Помогла установка после некоторых команд небольших (10мсек) задержек или просто nop-ов
, когда тактирование ядра, портов ввода-вывода останавливается и обслуживаются только разрешенные прерывания.ADC Noise Reduction
±2 LSB Absolute Accuracy
Желательно все 10 бит. Хочу условно разбить угол поворота переменного резистора на 1024 шага