Помогите начинающему!Пытаюсь сделать АЦП путем использования компаратора и измерении времени заряда конденсатора до значения входного напряжения.(Пример из AVR400). Моделирую пока в VMLABe.Работать не хочет.
С железом еше не связывался.
Заранее большое спасибо.
Вот программа.
- Код: Выделить всё • Развернуть
.include "C:\VMLAB\include\1200def.inc"
;***** Константы
.equ preset=192 ;Предустановленный код смещения T/C0 (256-64)
.def result=r16 ;Результат пеобразования и промежуточные данные
.def temp=r17 ;Временный регистр
.cseg
.org 0x0000
rjmp Reset
.org OVF0addr
rjmp ANA_COMP
.org ACIaddr
rjmp ANA_COMP
Reset:
cbi DDRB,1
rcall convert_init ;Инициализация АЦП
sei ; Глобальное разрешение прерываний
ldi result,0xFF
out DDRD,result
Delay:
clr result ;Очистка временного счетчика 1
ldi temp,0xf0 ;Очистка временного счетчика 2
loop1:
inc result ;Увеличение на 1 временного счетчика 1
brne loop1 ; и ожидание его переполнения
inc temp ; Увеличение на 1 временного счетчика 2
brne loop1 ; и ожидание его переполнения
rcall AD_convert ; Запуск преобразования
Wait:
brtc Wait ; Ожидание завершения преобразования
out PORTD,result ; Вывод результата на порт B
rjmp Delay ; Повтор преобразования
ANA_COMP:
in result,TCNT0 ;Загрузка значения таймера 0
clr temp ;Останов таймера 0
out TCCR0,temp
subi result,preset+1 ;Вычисление результата преобразования
cbi PORTB,PB2 ;Запуск разрядки конденсатора
set ;Установка флага завершения преобразования
reti ;Выход из прерывания
convert_init:
ldi result,0x0b ;Разрешение работы компаратора
out ACSR,result ; и разрешение его прерывания
ldi result,0x02 ;Разрешение прерывания таймера
out TIMSK,result
sbi PORTB,PB2 ;Настройка линии заряда/разряда как выход
ret
AD_convert:
ldi result,preset ;Очистка счетчика результата
out TCNT0,result ;и загрузка кода смещения
clt ;Сброс флага окончания преобразования (t)
ldi result,0x02 ;Запуск таймера 0 с предделением на 8
out TCCR0,result
sbi PORTB,PB2 ;Включение режима заряда конденсатора
ret ;Выход из процедуры
И проект VMLab
- Код: Выделить всё • Развернуть
.MICRO "AT90S1200"
.PROGRAM "AVR400.asm"
.TARGET "AVR400.hex"
.TRACE ; Activate micro trace
.POWER VDD=5 VSS=0 ; Power nodes
.CLOCK 1meg ; Micro clock
.STORE 250m ; Trace (micro+signals) storage time
R1 PB2 PB0 100k
C1 PB0 VSS 10n
V1 PB1 VSS SLIDER_1(0 2)
D1 VDD PD0
D2 VDD PD1
D3 VDD PD2
D4 VDD PD3
D5 VDD PD4
D6 VDD PD5
D7 VDD PD6