Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы со скоростью АЦП у PIC.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
angir
ДД.
Столкнулся с следуйщей проблемой: не хватает скорости АЦП у pic. Исходно задача стоит следуйщим образом: есть прерывание по таймеру, срабатывает со скоростью 12000 раз в секунду. Надо используя прерывание в том числе запускать АЦП и получать с него данные.
Алгоритм работы с АЦП у меня следуйщий: при инициализации портов и т.д. задаю режим работы - от внутреннего опорника, 0-й канал. После чего при каждом прерывании выполняется следуйщий алгоритм: начало преобразования (adcon -> go), выход из прерывания. При следуйщем прерывании - контролируем бит go - если не сбросился, ждем следуйщего прерывания и по новой.... Так вот: если прерывание идет с частотой например 1000 раз в секунду - все отлично работает. А на 12000 раз в секунду - вылетает из ацп постоянный код, не зависящий от входного напряжения. Сам сигнал на входе - очень медленно меняющийся, снаружи стоят кондеры в 0.1 и 1 мкф. Бился и так и этак. Пробывал и такую схему: в 1-ом прерывании программирую АЦП, во втором - запускаю, далее контролирую состояние бита GO/~Done, пока не снимется и по новой. Получается таже балалайка. Временные параметры на зарядку внутреннего конденсатора в пике - соблюдены.... Может кто-нибудь что-нибудь подскажет????? 2-ой день сижу с этой проблемой. Я конечно понимаю, что она, возможно и пустяковая, но тем не менее...
Сама программа - на ассемблере... оргинал кода привести сейчас не могу - по памяти боюсь ошибиться примерно вот такая конструкция.Сам пик - 16f676.... Прошу извинения за отсутствие формата - сам движок форума переформатирует нормальный формат.

start_irq

BTFSC ad_status,0
goto start_ad

movlw 0x41
movwf ADCON
BSF ad_status,0
goto next_irq

start_ad

BTFSC ad_status,1
goto wait_ad
BSF ADCON, GO
BSF ad_status,1
goto next_irq

wait_ad

BTFSC ADCON,GO
goto next_irq
MOVF adresh,w
movwf ad_result
CLRF ad_status

next_irq

retfie
greg
Да в общем то никогда вопросов не было, привожу фрагменты кода, который работает и позволяет
обновлять данные с частотой больше 12000 раз в секунду (зависит от программы интерпретации результатов иззмерения Сode_Сompare). Код приведён для Pic12f675 (тактовая частота 4 MHz).
upc2
<< После чего при каждом прерывании выполняется следуйщий алгоритм: начало преобразования (adcon -> go), выход из прерывания. При следуйщем прерывании - контролируем бит go - если не сбросился, ждем следуйщего прерывания и по новой.... >>

При таком алгоритме нет синхронизации между прерыванием таймера и преобразованием АЦП.При
кварце 4 МГц таймер прерывается каждые 83 мксек.Время преобразования АЦП ~25 мксек.
Остается 58 мксек(58 однотактных команд).Необходимо тщательно проанализировать программу , чтобы время выполнения остальных команд не превысило это время.(Морока).

АЦП работает на пределе.Таймер я бы выбросил и организовал работу по прерыванию АЦП , а не
таймера.
angir
Частота пика - 20 мегагерц, по времени преобразования - все ок. В чем дело - сам не пойму. Проверил все уже сто раз. Прерывание на время преобразования не нужно делать - я контролирую флаг done.
upc2
PIC16F676 не имеет ни одного полноценного порта.Он предназначен для построения цифровых
регуляторов. Как вы оцениваете результат измерения? Вероятно там и причина.
В вашем фрагменте вы считываете 1 байт измерения, а надо два.Где неточность?
Для чего таймер? Для использования АЦП в Sleep режиме? Но это работает на внутренний RC
генератор 4МГц.
bav
Попробуй синхронизировать АЦП от кварцевого генератора, уменьши время преобразования АЦП (не ниже рекомендуемого). Если переключаешь каналы, делай задержку перед преобразованием и т. д. (как написано в DataSheet). Проверь, не изменяются ли данные, приходящие с АЦП другими подпрограммами (может что-то не успевает выполниться).
angir
Самое интересное, что этот-же код прекрасно работает в 16f87x Серии, конечно, с учетом разницы перифирии - и на 20000 раз в секунду. Ладно, с 676 я забил. Правда, я у 676 заводские константы потер - может и в этом дело было...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.