roboforum.ru

Технический форум по робототехнике.


Помогите отладить программу АЦП на AVR

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Помогите отладить программу АЦП на AVR

Сообщение Alex48 » 13 апр 2007, 08:58

Всем доброго дня суток!
Помогите начинающему!Пытаюсь сделать АЦП путем использования компаратора и измерении времени заряда конденсатора до значения входного напряжения.(Пример из 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
Вложения
AVR400.jpg
Alex48
 

Сообщение Vovan » 13 апр 2007, 12:12

Не знаю как насчёт VMLAB, но эта программа, у меня, работает в Протеусе.
Только нужно: в RESET: out DDRD, result заменить на out DDRB, result
и в Wait: out PORTD, result заменить на out PORTB, result
ЗЫ: проверил, в АВРСтудио тоже нормально.
ЗЫЫ: а какие виды (планы) на практическое применение этой программы? (если не секрет, конечно)
___________
С уважением
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Сообщение avr123.nm.ru » 13 апр 2007, 13:39

Я вывел сигналы на осциллограф и добавил сигнал с выхода компаратора - VMLAB позволяет видеть и его.  Теперь нужно расставить точки останова по проге и идти пошагам и смотреть что не так.

Можнопопробовать уменьшить резистор до 10 ком.
Вложения
ad.rar
(2.76 КиБ) Скачиваний: 35
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение avr123.nm.ru » 13 апр 2007, 13:57

Похоже в исходнике ошибюка была.

заменил бесмысленую строчку    cbi  DDRB,1

Reset:
     ;cbi  DDRB,1

     sbi  DDRB,PB2   ; сделать ВЫходом PB2

Похоже заработало, диаграмки пошли рисоваться в SCOPE.

Значит в AVR400 ошибка была ? Но там не должно быть русских комментов по идее    :lol:
Вложения
avr123.nm.ru_AVR400_ad.rar
(17.45 КиБ) Скачиваний: 34
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение avr123.nm.ru » 13 апр 2007, 13:58

Все апноуты AVR находятся внизу страницы - avr123.nm.ru/07.htm

В частности  "AVR400: Low Cost A/D Converter (6 pages, revision B, updated 5/02)
This Application Note targets cost and space critical applications that need an ADC."

=======

Действительно у АТМЕЛ в исходнике ошибка - нет настройки PB2 на выход.  Надо письмишко им написать.  :lol:
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Vovan » 13 апр 2007, 14:37

Строчка про PB1 или PB2, в RESET - ваще не нужна, её можно выкинуть, потому что есть
ldi result, 0xFF
и
out DDRB, result (тока в исходнике ошибочно DDRD написано)
И там где вместо порта В про порт D написано - это ошибка (опечатка скорее всего).
___________
С уважением
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Сообщение avr123.nm.ru » 13 апр 2007, 15:04

Vovan писал(а):Строчка про PB1 или PB2, в RESET - ваще не нужна, её можно выкинуть, потому что есть
ldi result, 0xFF
и
out DDRB, result (тока в исходнике ошибочно DDRD написано)
И там где вместо порта В про порт D написано - это ошибка (опечатка скорее всего).
___________
С уважением
Vovan


DDRD  - не ошибочно наверно, к порту Д ведь подключены светодиоды.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14