Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
28.08.2011, 13:44
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Не работает АЦП mega8
Здравствуйте, по прерыванию о завершении преобразования я последовательно опрашиваю АЦП каналы 0,1 и 7.
Если опрашивать 2 любых канала то всё работает, но как только в самом первом цикле начинаю заходить на опрос третьего канала то там и в двух до этого нормально работающих каналах мусор.
Подскажите, что у меня не так ?
Цитата:
|
;******** Обработка прер.по АЦП *************************************
ADC_CC :
cpi selacp, 1 ;если селектор АЦП =1 то идём на контроль АКБ
breq akb
cpi selacp, 2 ;если селектор АЦП =2 то идём на контроль тока
breq tok
cpi selacp, 3 ;если селектор АЦП =3 то идём на опрос кнопок
breq key
sacp: inc selacp ;селектор + 1
cpi selacp, 3 ;если завершили все опросы то
breq vozv ;идём на vozv
reti ;иначе выходим из прерывания
vozv: ldi selacp, 1 ;тут обнуляем селектор (=1)
reti ;и выходим из прерывания
akb:
ldi temp, 0b11100000 ;непрерывное чтение, АЦП-0
out ADMUX, temp
in temp, ADCL ; просто формальность (первым всегда читается ADCL)
in tacp, ADCH ; wreg contains result
mov t, tacp
rjmp sacp
key:
ldi temp, 0b11100111 ;непрерывное чтение, АЦП-7
out ADMUX, temp
in temp, ADCL ; просто формальность (первым всегда читается ADCL)
in tacp, ADCH ; wreg contains result
mov t, tacp
lsr t
lsr t
lsr t
rjmp sacp
tok:
ldi temp, 0b11100001 ;;непрерывное чтение, АЦП-1
out ADMUX, temp
in temp, ADCL ; просто формальность (первым всегда читается ADCL)
in acp, ADCH ; wreg contains result
rcall ktok
rjmp sacp
|
|
|
|
|
28.08.2011, 14:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Не работает АЦП mega8.
Что пишете в ADCSRA ?
|
|
|
|
28.08.2011, 14:09
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Re: Не работает АЦП mega8.
После смены канала нужна пауза перед опросом АЦП.
__________________
Не ошибается лишь тот, кто ни чего не делает!
|
|
|
|
28.08.2011, 14:11
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сообщение от omercury
|
Что пишете в ADCSRA ?
|
ldi temp, 0b11101111
out ADCSR, temp
|
|
|
|
28.08.2011, 14:19
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Не работает АЦП mega8.
мне вообще не понятно как у меня корректно работает с 2-мя каналами.
Допустим происходит прерывание АЦП, селектор =1, значит идём на метку tok, по идее в ADCL, ADCН должно находиться значение от предыдущего преобразования, а значит не из 1-го канала, а из 7-го.
Перед чтением этих переменных у меня стоит
ldi temp, 0b11100001
out ADMUX, temp
и каким то образом из них читается то что в первом канале, как это, ведь прерывание пришло когда завершилось предыдущее преобразование 7-го канала..
бред какой то
Преобразование у меня непрерывное, прочитал что с одиночным проще, меняешь канал и запускаешь преобразование и так же в прерывании снимаешь значение.
Но одиночные в 2 раза медленнее выборка, нужно сделать с непрерывным преобразованием.
Помогите =((((
Последний раз редактировалось putmannn; 28.08.2011 в 14:21.
|
|
|
|
28.08.2011, 14:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сообщение от putmannn
|
ldi temp, 0b11101111
out ADCSR, temp
|
Просто пытаюсь понять, зачем нужен Free Running Mode, если после каждого измерения меняется канал.
Если по-простому, то смена номера канала не произойдёт, пока флаг прерывания не сброшен (надо либо сбрасывать вручную, либо менять после выхода из прерывания). А ещё может случиться, что программа слишком долго находится в прерывании...
Попробуйте перезапуск АЦП. Тогда и ADFR устанавливать смысла нет.
|
|
|
|
28.08.2011, 14:36
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сбрасываю флаг ADIF в прерывании, не работает. Попробую переключать канал вне прерывания.
Вне прерывания меняю канал, то же самое, если по очереди читаю 2 канала всё работает, как только начинаю читать 3 то не работает.
Последний раз редактировалось putmannn; 28.08.2011 в 14:46.
|
|
|
|
28.08.2011, 14:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Не работает АЦП mega8.
Флаг сбрасывается записью "1" в регистр.
|
|
|
|
28.08.2011, 15:15
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Не работает АЦП mega8.
И 0 и 1 туда пишу, без изменений.
|
|
|
|
28.08.2011, 15:26
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сделал не непрерывное, а одиночное преобразование, так работает, но мне надо шустрее опрашивать ..... может кто научит как корректно менять канал АЦП при непрерывном преобразовании на атмеге8 ?????
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:31.
|
|