Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
12.09.2011, 00:21
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Некорректно работает АЦП Atmega 8
Здравствуйте. Контроллер Атмега-8.
При прерывании по завершению преобразования АЦП мы приходим сюда.
Код:
|
ADC_CC :
cpi selacp, 1 ;если селектор АЦП =1 то идём на контроль тока
breq tok
cpi selacp, 2 ;если селектор АЦП =2 то идём на опрос кнопок
breq key
cpi selacp, 3 ;если селектор АЦП =3 то идём на опрос кнопок
breq akb
akb: ldi selacp, 1
in temp, ADCL ; просто формальность (первым всегда читается ADCL)
in temp, ADCH ; wreg contains result
mov akk, temp
ldi temp, 0b11001111
out ADCSR, temp
ldi temp, 0b11100001 ;запуск преобразования АЦП-1 для тока на диодах
out ADMUX, temp
reti
key: ldi selacp, 3
in temp, ADCL ; просто формальность (первым всегда читается ADCL)
in tacp, ADCH ; wreg contains result
mov t, tacp
lsr t
lsr t
lsr t
ldi temp, 0b11001111
out ADCSR, temp
ldi temp, 0b01100000 ;запуск преобразования АЦП-0 для аккумулятора
out ADMUX, temp
reti
tok: ldi selacp, 2
in temp, ADCL ; просто формальность (первым всегда читается ADCL)
in temp, ADCH ; wreg contains result
mov acp, temp
ldi temp, 0b11001111
out ADCSR, temp
ldi temp, 0b11100111 ;непрерывное чтение, АЦП-0
out ADMUX, temp
reti |
При первом вхождении selacp = 1, и мы попадает по метке tok, то что в регистрах АЦП для первого раза думаю не важно. В этой метке мы присваиваем selacp=2, читаем что в регистрах АЦП и стартуем новое преобразование для канала 7 с опорным 2.56 вольт. Выходим из прерывания.
При окончании преобразования снова по прерыванию приходим сюда, selacp=2 значит идём на key, там присваиваем selacp=2, читаем регистры АЦП и стартуем новое преобразование для 0 канала с опорным 5 вольт. Выходим из прерывания.
При окончании преобразования снова по прерыванию приходим сюда, selacp=3 значит идём на akb, там присваиваем selacp=1, читаем регистры АЦП и стартуем новое преобразование для 1 канала с опорным 2.56 вольт. Выходим из прерывания.
Ну и так по кругу.
Всё работает. Переменная akb отображается у меня на цифровом индикаторе, реагирует на кнопки, поддерживает заданный ток.
Неприятность в том, что как только я нажимаю кнопку и на ADC7 появляется некое напряжение, то переменная akk принимает значение 7-го канала, хотя в предыдущем входе в прерывание преобразование было запущено для 0-вого канала. Стоит отпустить кнопку и снова заряд АКБ корректно отображается на индикаторе.
Всю голову сломал, не могу понять в чём дело.
Заметил одну тонкость. Если в момент чтения 0-вого канала там значение превышает значение 7-го канала, то показывает корректно. Получается при появлении отличного от нуля сигнала на ноге ADC7 , он попадёт в в ADC0 если выше его.
Пробовал подключать не 7, а 3 канал, вдруг на плате где коротит, то же самое.
Последний раз редактировалось putmannn; 12.09.2011 в 00:34.
|
|
|
|
12.09.2011, 07:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Некорректно работает АЦП Atmega 8.
Что и как изменяет нажатие на кнопку? Приведите обработку нажание кнопки, схему подключения . Чудес не бывает, если измеряется 7-й канал, значит устанавливает selacp =2!
И еще, не стоит менять опорный источник через раз, иначе показания могут быть неверными, на что намекает сам производитель.
Цитата:
|
. If no external voltage is applied to the AREF pin, the user may switch
between AVCC and 2.56V as reference selection. The first ADC conversion result after switching reference voltage source may be inaccurate, and the user is advised to dis-
card this result.
|
|
|
|
|
12.09.2011, 08:01
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Re: Некорректно работает АЦП Atmega 8
Делал и так, не менял показания, везде было 2.56, то же самое.
Пока ни одна кнопка не нажата нога ацп висит на земле через 100ком, когда нажимается одна из кнопок , через делитель подаётся напряжение 1, 2, 3 вольта.
Обработку нажатия кнопки вообще убирал, не она влияет.
Последний раз редактировалось putmannn; 12.09.2011 в 08:08.
|
|
|
|
12.09.2011, 08:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Некорректно работает АЦП Atmega 8
Выложите ,пожалуйста, схему , а то я уже ничего не понимаю. Вы так и не ответили как меняется переменная selacp. И почему у Вас выбор канала идет после старта АЦП, должно быть наоборот.
Цитата:
|
In Single Conversion mode, always select the channel before starting the conversion.
The channel selection may be changed one ADC clock cycle after writing one to ADSC.
However, the simplest method is to wait for the conversion to complete before changing
the channel selection.
|
|
|
|
|
12.09.2011, 08:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Некорректно работает АЦП Atmega 8
и комментарии какие то невнятные...
|
|
|
|
12.09.2011, 08:51
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Re: Некорректно работает АЦП Atmega 8
Схемы на работе нет, выложу как дома буду, вечером.
Насколько я понимаю преобразование начинается записью 1 в шестой бит регистра ADCSR, у меня это делается после чтения регистров АЦП перед выходом из прерывания, чтобы запустившись в следующий раз прочитался другой канал.
|
|
|
|
12.09.2011, 09:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Некорректно работает АЦП Atmega 8
Сообщение от putmannn
|
Насколько я понимаю преобразование начинается записью 1 в шестой бит регистра ADCSR, у меня это делается после чтения регистров АЦП перед выходом из прерывания, чтобы запустившись в следующий раз прочитался другой канал.
|
Это понятно, но ведь прежде чем запустить АЦП надо выбрать канал (ADMUX). И как я уже написал в своем первом посте, менять каждый раз опорное напряжение нельзя. Думаю, вот это поможет Вам понять в чем Ваша проблема и как ее решить, просто пропустите первое измерение, после смены канала и все.
Цитата:
|
In Single Conversion mode, always select the channel before starting the conversion.
The channel selection may be changed one ADC clock cycle after writing one to ADSC.
However, the simplest method is to wait for the conversion to complete before changing
the channel selection.
|
|
|
|
|
12.09.2011, 09:37
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Re: Некорректно работает АЦП Atmega 8
Ой, может и правда поменять строчки местами ....
ldi temp, 0b11001111
out ADCSR, temp
и
ldi temp, 0b01100000 ;запуск преобразования АЦП-0 для аккумулятора
out ADMUX, temp
если так, то как же у меня тогда нужные значения читаются без нажатия кнопки, если запускается преобразование в данном прерывании, а нужный канал включается только в следующем прерывании... странно
Последний раз редактировалось putmannn; 12.09.2011 в 09:40.
|
|
|
|
12.09.2011, 09:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Некорректно работает АЦП Atmega 8
Вам все равно придется сделать пропуск после смены опорного напряжения (неужели нельзя обойтись без этого?).
Сообщение от putmannn
|
если так, то как же у меня тогда нужные значения читаются без нажатия кнопки, если запускается преобразование в данном прерывании, а нужный канал включается только в следующем прерывании... странно
|
Ничего странного в этом нет, изменение канала происходит в следующей выборке АЦП.
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
12.09.2011, 10:06
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Re: Некорректно работает АЦП Atmega 8
Cпасибо, попробую поменять местами.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:37.
|
|