Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
28.08.2011, 16:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сообщение от putmannn
|
Сделал не непрерывное, а одиночное преобразование, так работает, но мне надо шустрее опрашивать .....
|
А смысл? Всё равно на каждое измерение идёт прерывание...
Код:
|
ADC_CC :
in temp, ADCL ; просто формальность (первым всегда читается ADCL)
in temp, ADCH ; wreg contains result читаем результат преобразования
;**************************************
cpi selacp, 1 ;если селектор АЦП =1 то идём на контроль АКБ
brne noakb ;Если не напряжение -› проверяем ток или нет
akb:
mov tacp,temp
mov t, tacp
ldi temp, 0b11100001 ; чтение, АЦП-1
rjmp sacp
;**************************************
noakb:
cpi selacp, 2 ;если селектор АЦП =2 то идём на контроль тока
brne key ;Если не напряжение и не ток -› на опрос кнопок
tok:
mov acp, temp ; wreg contains result
rcall ktok
ldi temp, 0b11100111 ; чтение, АЦП-7
rjmp sacp
;**************************************
key:
mov tacp, temp ; wreg contains result
mov t, tacp
lsr t
lsr t
lsr t
ldi temp, 0b11100000 ; чтение, АЦП-0
;**************************************
sacp:
out ADMUX, temp
ldi temp, 0b11001111 ;Запуск однократного измерения
out ADCSRA, temp
dec selacp ;селектор - 1
brne n_exit
ldi selacp,3 ;Инициализация счётчика каналов
n_exit:
reti ;выходим из прерывания |
ADC_.txt
Плохо, что rcall ktok прямо в прерывании.
Последний раз редактировалось omercury; 28.08.2011 в 16:16.
|
|
|
|
28.08.2011, 16:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сообщение от putmannn
|
Сделал не непрерывное, а одиночное преобразование, так работает, но мне надо шустрее опрашивать ..... может кто научит как корректно менять канал АЦП при непрерывном преобразовании на атмеге8 ?????
|
никто...
повышайте частоту АЦП
https://kazus.ru/forums/showpost.php...6&postcount=20
|
|
|
|
29.08.2011, 01:06
|
|
Прописка
Регистрация: 08.10.2009
Сообщений: 101
Сказал спасибо: 2
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
|
Re: Не работает АЦП mega8.
А всю прогу можно увидеть просто как то странно, что не сохраняются переменные на входе в прерывание .
|
|
|
|
29.08.2011, 09:20
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сообщение от EugenPKH
|
А всю прогу можно увидеть просто как то странно, что не сохраняются переменные на входе в прерывание .
|
Уже исправил на одиночное преобразование, той версии не осталось, не смогу.
|
|
|
|
29.08.2011, 09:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сообщение от EugenPKH
|
как то странно, что не сохраняются переменные на входе в прерывание .
|
Там ассемблер. Что сохранили ручками, то и сохранилось...
Кстати, putmannn, не забудьте добавить сохранение и восстановление SREG на входе и выходе из прерывания....
|
|
|
|
29.08.2011, 10:02
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сообщение от omercury
|
Кстати, putmannn, не забудьте добавить сохранение и восстановление SREG на входе и выходе из прерывания....
|
Зачем ? никогда не сохранял его, всё работает !!!
Это моя первая программа, недавно начал баловаться с контроллерами, насколько я понимаю если я в прерывании то прерывания по умолчанию запрещены, значит указаная выше процедура не может прервать и испортить срегистр.... а вне прерываний в главном цикле ничего нет, просто rjmp сам на себя.
Хотя я не подумал об этом, новичёк, спасибо, буду теперь всегда сохранять.
Последний раз редактировалось putmannn; 29.08.2011 в 10:18.
|
|
|
|
29.08.2011, 10:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сообщение от putmannn
|
Зачем ? никогда не сохранял его, всё работает !!!
|
Очень странно...
В прерывание МК может свалиться перед проверкой какого-либо условия, а флаги в подпрограмме изменились... Условие не выполнилось, а должно... Или наоборот. Работа программы нарушается.
Сообщение от putmannn
|
а вне прерываний в главном цикле ничего нет, просто rjmp сам на себя.
|
Это пока... Её ещё править...
|
|
|
|
29.08.2011, 10:41
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Не работает АЦП mega8.
Согласен....
|
|
|
|
29.08.2011, 20:19
|
|
Частый гость
Регистрация: 22.03.2010
Адрес: Севастополь
Сообщений: 26
Сказал спасибо: 5
Сказали Спасибо 8 раз(а) в 5 сообщении(ях)
|
Re: Не работает АЦП mega8.
Извините, что не смотрел ваш код, но хотелось бы указать на частую ошибку при использовании непрерывного преобразования. Нюанс связан с переключением каналов, а именно с тем, что регистр ADMUX обновляется сразу и только в конце преобразования. В момент входа в прерывание по завершению преобразования, уже начинается следующий цикл с текущим ADMUX! И смена канала в прерывании не приведет к его моментальному переключению. Это произойдет лишь в конце цикла, который уже начался с предыдущим ADMUX!, т.е. после смены канала в прерывании, на следующем прерывании вы получите данные не нового, а предыдущего канала.
Извините, поздно заметил, что вы это знаете, но может кому-то пригодится))
Последний раз редактировалось -Dreamer-; 29.08.2011 в 22:05.
|
|
|
|
30.08.2011, 07:23
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
|
Re: Не работает АЦП mega8.
Сообщение от -Dreamer-
|
И смена канала в прерывании не приведет к его моментальному переключению. Это произойдет лишь в конце цикла, который уже начался с предыдущим ADMUX!, т.е. после смены канала в прерывании, на следующем прерывании вы получите данные не нового, а предыдущего канала.
Извините, поздно заметил, что вы это знаете, но может кому-то пригодится))
|
Это работает при однократном преобразовании, но как ни странно как я писал выше, получаю данные именно с того канала который переключил именнто сейчас именно в этом прерывании......
Последний раз редактировалось putmannn; 30.08.2011 в 09:57.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:17.
|
|