roboforum.ru

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

АЦП на ATmega8

АЦП на ATmega8

Izum » 21 окт 2010, 21:37

Добрый день всем!
Пишу диссертацию по одной системе, где необходимой составляющей является АЦП. Задача в первом приближении проста: необходимо преобразовать аналоговый сигнал в код и выдать его на порт. Столкнулся со следующей проблемой: независимо от того находится ли АЦП в режиме многократного преобразования или я инициализирую однократный запуск самостоятельно в цикле, преобразование аналогового сигнала в код происходит только ОДИН раз, дальше необходимо либо сбрасывать контроллер, либо отключать и подключать питание к нему заново. Помогите пожалуйста, уже не знаю что и делать, как только не пробовал. :cry:
Поскольку АЦП раньше никогда не программировал не бейте сильно за косяки, вот код:
;Подключаемые файлы:
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8def.inc"
.list

;====================================
;Начало программы:
.org $0000
rjmp Init ;Переход на секцию инициализации
rjmp ADC_Complete ;Прерывание от АЦП
.org $0030
;====================================
;Обработчик прерывания:
ADC_Complete:
in r17,ADCL
out PortD,r17
reti

;====================================
Init:
;Инициализация стека:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16


;Инициализация АЦП:
ldi r16,0x00
out admux,r16
ldi r16,0xFE
out ADCSRA,r16

;;Инициализация Портов:
ldi r16,0b11111111
out DDRD,r16

sei ;разрешение прерываний
;====================================
;Основное тело программы:
Start:

rjmp Start

Re: АЦП на ATmega8

Duhas » 21 окт 2010, 22:59

а какой там вектор у прерывания по АЦП? 0x02 чтоль?

Re: АЦП на ATmega8

Izum » 22 окт 2010, 09:43

я там ошибся чуточку. Вектор у АЦП 0х0Е. Это я уже исправил, но результат не изменился (он без исправления все равно на него попадал, только только немного кривым способом - он переходил на $000Е, а дальше добегал до адреса $0030, где и был написан обработчик прерывания, но щас я исправил и тут ошибки уже нет). Т.е. код такой должен быть:

.org $0000
rjmp Init ;Переход на секцию инициализации
.org $000Е
rjmp ADC_Complete ;Прерывание от АЦП
.org $0030

Я даже не знаю что и предположить, в чем косяк? Я попробовал уже на двух прогах написать: на AVR Studio и на AlgorithmBuilder - думал может дело в проге, результат одинаковый. Может в схеме ошибка? да вроде тоже все просто AREF=+5В, AVCC=+5В, VCC=+5В, на всход ADC0 подаю сигнал, что тут может быть не так?

Re: АЦП на ATmega8

Michael_K » 22 окт 2010, 10:59

симуляторы кривые - на железе все жужжит.

Re: АЦП на ATmega8

Victorovych » 22 окт 2010, 11:25

Маркс пишет так:
Вложения
434tr3etgerr.JPG

Re: АЦП на ATmega8

Michael_K » 22 окт 2010, 11:43

да там не в этом дело - симулятор ADСS сбрасывает, хотя во фри-раннинг не должен вроде бы...
(или что-то в таком духе - не вспомню сейчас)

а читать H - да, нужно обязательно.

Re: АЦП на ATmega8

Izum » 22 окт 2010, 14:16

Сейчас все сделал как Вы посоветовали, все работает - ОГРОМНОЕ СПАСИБО!
Я просто нигде не наткнулся на то, что надо было считывать еще и старший байт - считывал только младший чтобы проверить работоспособность АЦП, а старший хотел потом подключить - дело в том, что в конечном итоге мне не нужно будет выводить данные в порт - это я для себя, для проверки сделал. :Yahoo!:

Re: АЦП на ATmega8

Duhas » 22 окт 2010, 19:24

и я проглядел...

Re: АЦП на ATmega8

Izum » 22 окт 2010, 20:47

Да ладно, бывает..=) Главное, что общими усилиями пришли к рабочей программе=) Еще раз всем огромное спасибо!


cron
Rambler\'s Top100 Mail.ru counter