Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 12.09.2011, 00:21  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Некорректно работает АЦП 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.
putmannn вне форума  
Непрочитано 12.09.2011, 07:44  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию 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.
nonamedov вне форума  
Непрочитано 12.09.2011, 08:01  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: Некорректно работает АЦП Atmega 8

Делал и так, не менял показания, везде было 2.56, то же самое.
Пока ни одна кнопка не нажата нога ацп висит на земле через 100ком, когда нажимается одна из кнопок , через делитель подаётся напряжение 1, 2, 3 вольта.
Обработку нажатия кнопки вообще убирал, не она влияет.

Последний раз редактировалось putmannn; 12.09.2011 в 08:08.
putmannn вне форума  
Непрочитано 12.09.2011, 08:43  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию 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.
nonamedov вне форума  
Непрочитано 12.09.2011, 08:45  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Некорректно работает АЦП Atmega 8

и комментарии какие то невнятные...
nonamedov вне форума  
Непрочитано 12.09.2011, 08:51  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: Некорректно работает АЦП Atmega 8

Схемы на работе нет, выложу как дома буду, вечером.
Насколько я понимаю преобразование начинается записью 1 в шестой бит регистра ADCSR, у меня это делается после чтения регистров АЦП перед выходом из прерывания, чтобы запустившись в следующий раз прочитался другой канал.
putmannn вне форума  
Непрочитано 12.09.2011, 09:16  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию 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.
nonamedov вне форума  
Непрочитано 12.09.2011, 09:37  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: Некорректно работает АЦП Atmega 8

Ой, может и правда поменять строчки местами ....

ldi temp, 0b11001111
out ADCSR, temp

и

ldi temp, 0b01100000 ;запуск преобразования АЦП-0 для аккумулятора
out ADMUX, temp

если так, то как же у меня тогда нужные значения читаются без нажатия кнопки, если запускается преобразование в данном прерывании, а нужный канал включается только в следующем прерывании... странно

Последний раз редактировалось putmannn; 12.09.2011 в 09:40.
putmannn вне форума  
Непрочитано 12.09.2011, 09:53  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Некорректно работает АЦП Atmega 8

Вам все равно придется сделать пропуск после смены опорного напряжения (неужели нельзя обойтись без этого?).
Сообщение от putmannn Посмотреть сообщение
если так, то как же у меня тогда нужные значения читаются без нажатия кнопки, если запускается преобразование в данном прерывании, а нужный канал включается только в следующем прерывании... странно
Ничего странного в этом нет, изменение канала происходит в следующей выборке АЦП.
nonamedov вне форума  
Сказали "Спасибо" nonamedov
putmannn (12.09.2011)
Непрочитано 12.09.2011, 10:06  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: Некорректно работает АЦП Atmega 8

Cпасибо, попробую поменять местами.
putmannn вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает PD4 в ATTINY 4313 HeatSink Микроконтроллеры, АЦП, память и т.д 37 14.06.2011 17:46
АЦП AT91sam7s256 Uragan90 Микроконтроллеры, АЦП, память и т.д 10 25.04.2011 13:30
Стабилизация измерения АЦП ATMega8535 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 41 02.03.2011 13:25
Получение результата с АЦП xxparadoxx Электроника - это просто 2 28.12.2010 15:55
АЦП и UART Jasper Микроконтроллеры, АЦП, память и т.д 9 02.07.2006 07:53


Часовой пояс GMT +4, время: 22:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot