roboforum.ru

Технический форум по робототехнике.
Текущее время: 18 фев 2025, 20:20

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Помогите отладить программу АЦП на AVR
СообщениеДобавлено: 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
AVR400.jpg [ 16.34 КиБ | Просмотров: 1965 ]
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 апр 2007, 12:12 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 апр 2007, 13:39 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Я вывел сигналы на осциллограф и добавил сигнал с выхода компаратора - VMLAB позволяет видеть и его.  Теперь нужно расставить точки останова по проге и идти пошагам и смотреть что не так.

Можнопопробовать уменьшить резистор до 10 ком.


Вложения:
ad.rar [2.76 КиБ]
Скачиваний: 35
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 апр 2007, 13:57 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Похоже в исходнике ошибюка была.

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

Reset:
     ;cbi  DDRB,1

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

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

Значит в AVR400 ошибка была ? Но там не должно быть русских комментов по идее    :lol:


Вложения:
avr123.nm.ru_AVR400_ad.rar [17.45 КиБ]
Скачиваний: 34
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 апр 2007, 13:58 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Все апноуты 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:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 апр 2007, 14:37 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 апр 2007, 15:04 
Не в сети
отсылающий читать курс
Аватара пользователя

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


DDRD  - не ошибочно наверно, к порту Д ведь подключены светодиоды.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO