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

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

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

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

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

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

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

 
Опции темы
Непрочитано 22.11.2011, 20:44  
Piknik13
Прохожий
 
Регистрация: 20.11.2011
Сообщений: 8
Сказал спасибо: 6
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Piknik13 на пути к лучшему
По умолчанию ADC- Free Running mode и мультиплексор.AVR

Проблема с автоматическим перезапуском АЦП в режиме Free Running. И с переключением мультиплексора. Порой в следующий канал влезает значение судя по всему предыдущего. Шит читал, но недопонял,
1)что минимально необходимо и в какой момент для безопасного переключения каналов..желательно пример..
2)АЦП начинает новое преобразование по установке вручную ADIF? В дебагере AVR Studio никак не хочет начинать второе преобразование, пока не выставишь еще и ADSC. Прерывания я отключил, есть только флаг.
Код:
void adc_init(void)
{
	/*компаратор отключим*/
	ACSR = (1‹‹7);//0x80; 
	/*используем внутренний опорник(2.56V), результат выравниваем вправо
	входной канал ацп - первый*/
	ADMUX = (1‹‹REFS1)|(1‹‹REFS0)|(1‹‹MUX0);//  

	/*разрешим ацп, запустим преобразование (непрерывный режим)
	без прерывний, частота преобразования 76кГц*/
	ADCSRA = 0xE3;// 11100011  / Коэффициент деления частоты = 8 
}
int main(void)
{
	current_ch = 0;
        adc_init();
        while(1)
	{
		adc_isr();
	}
	return 1;
}


//  Основная функция АЦП преобразования  
//==================================================  ======
void adc_isr(void)        
{
	if((ADCSRA››ADIF)&1)  // проверка установки ADIF - флага прер. по завершению АЦП
	{
		 
			if (num ‹ 20)   // заполнение значениями АЦП буфера канала
			{
				adc_buf[current_ch][num] = ADCL;
				adc_buf[current_ch][num] |= (ADCH‹‹8);								
				num++; 
			}
			else
			{				
			   	num = 0;
				switch_channel();  //меняем канал ,т.е. MUXы
			}	
				
		ADCSRA |= ((1‹‹ADIF); //  |(1‹‹ADSC));  // установка флага завершения АЦП   
	}
}
Реклама:
Piknik13 вне форума  
Сказали "Спасибо" Piknik13
warel (28.06.2019)
Непрочитано 22.11.2011, 21:43  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,053
Сказал спасибо: 3,042
Сказали Спасибо 3,212 раз(а) в 2,182 сообщении(ях)
ForcePoint на пути к лучшему
Стрелка Re: ADC- Free Running mode и мультиплексор.AVR

Сообщение от Piknik13 Посмотреть сообщение
2)АЦП начинает новое преобразование по установке вручную ADIF? В дебагере AVR Studio никак не хочет начинать второе преобразование, пока не выставишь еще и ADSC. Прерывания я отключил, есть только флаг.
Нет, первый запуск АЦП даётся битом ADSC, а последующие - при автоматической установке ADIF в конце преобразования.
Симулятор может глючить, почитайте раздел "known issues" в справке АВРСтудио.
Сообщение от Piknik13 Посмотреть сообщение
1)что минимально необходимо и в какой момент для безопасного переключения каналов..желательно пример..
Смена каналов производится за 1 такт АЦП до установки ADIF:
Once the conversion starts, the channel and reference selection is locked to ensure a sufficient sampling time for the ADC. Continuous updating resumes in the last ADC clock cycle before the conversion completes (ADIF in ADCSRA is set).
Т.е. менять ADMUX можно в любое время от 1 такта частоты АЦП после запуска (по ADSC или по ADIF&ADATE) и до завершения преобразования (см. рисунок "ADC Timing Diagram, Auto Triggered Conversion"). Довольно неудобно сделано, надо за временем следить...
Что касается приведённой программы, то можно посмотреть в диассемблере, в сколько команд и тактов укладывается фрагмент от "if (num ‹ 20)" до "else". Если больше 8 тактов (наверняка, т.к. вычисляются адреса в массиве и идёт обращение в ОЗУ), то менять каналы как есть сейчас. Но только не на 20 шаге, а на 19-м - т.е. уже начнётся 20-е преобразование текущего канала и запишем его смену на следующем шаге.
Как-то так.
ForcePoint вне форума  
Эти 2 пользователя(ей) сказали Спасибо ForcePoint за это сообщение:
Piknik13 (23.11.2011), warel (28.06.2019)
Непрочитано 23.11.2011, 10:07  
Piknik13
Прохожий
 
Регистрация: 20.11.2011
Сообщений: 8
Сказал спасибо: 6
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Piknik13 на пути к лучшему
По умолчанию Re: ADC- Free Running mode и мультиплексор.AVR

Сообщение от ForcePoint Посмотреть сообщение
Нет, первый запуск АЦП даётся битом ADSC, а последующие - при автоматической установке ADIF в конце преобразования.
С ADSC понятно, что он выставляется один раз для запуска. По окончании преобразования автоматически выставляется ADIF , но разве сразу же после этого автоматом начинается новое преобразование? Я так понимаю, что новое начинается, когда я вручную сниму флаг вот так: ADCSRA |= (1‹‹ADIF); ??
Piknik13 вне форума  
Сказали "Спасибо" Piknik13
warel (28.06.2019)
Непрочитано 23.11.2011, 11:16  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: ADC- Free Running mode и мультиплексор.AVR

Сообщение от Piknik13 Посмотреть сообщение
С ADSC понятно,
Ничего Вам не понятно, не обманывайте себя, для установки режима Free Running нужно установить бит ADFR в ADCSRA. Трогать бит флага не надо, он устанавливается автоматически (cleared by hardware). И , вообще, непонятно зачем манипулировать этим битом в режиме Free Running, какой смысл?
nonamedov вне форума  
Сказали "Спасибо" nonamedov
warel (28.06.2019)
Непрочитано 23.11.2011, 11:40  
Piknik13
Прохожий
 
Регистрация: 20.11.2011
Сообщений: 8
Сказал спасибо: 6
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Piknik13 на пути к лучшему
По умолчанию Re: ADC- Free Running mode и мультиплексор.AVR

Сообщение от nonamedov Посмотреть сообщение
Ничего Вам не понятно, не обманывайте себя, для установки режима Free Running нужно установить бит ADFR в ADCSRA. Трогать бит флага не надо, он устанавливается автоматически (cleared by hardware). И , вообще, непонятно зачем манипулировать этим битом в режиме Free Running, какой смысл?
Вы говорите про установку режима, я про первый пуск. ADFR, у меня он ADATA поставлен при инициализации. Про флаг : "ADIF is cleared by hardware when executing the corresponding interrupt
handling vector. Alternatively, ADIF is cleared by writing a logical one to the flag." Т.к. вектора прерываний у меня нет и прерывание отключено, как он будет автоматически стираться расскажите?
Piknik13 вне форума  
Сказали "Спасибо" Piknik13
warel (28.06.2019)
Непрочитано 23.11.2011, 11:45  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ADC- Free Running mode и мультиплексор.AVR

В ФриРуннинге следующее преобразование начинается СРАЗУ после окончания предыдущего, независимо от состояния АДИФ. Но его лучше сбрасывать вручную или обработкой прерывания - иначе как вы узнаете, что новое преобразование завершено? И вообще, переставайте бояться прерываний - они мягкие, пушистые, и совсем не страшные
niXto вне форума  
Эти 2 пользователя(ей) сказали Спасибо niXto за это сообщение:
Piknik13 (23.11.2011), warel (28.06.2019)
Непрочитано 23.11.2011, 12:16  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: ADC- Free Running mode и мультиплексор.AVR

Если это не обработка прерывания, то почему у Вас функция называется так?!
Сообщение от Piknik13 Посмотреть сообщение
void adc_isr(void)

Сообщение от niXto Посмотреть сообщение
Но его лучше сбрасывать вручную или обработкой прерывания - иначе как вы узнаете, что новое преобразование завершено?
Оно, ведь сбрасывается по выходу их функции прерывания, и как по Вашему проводить проверку окончания преобразования АЦП в режиме FreeRunning? неужели МК ничего другого не делает, или измерения по одному каналу будет по нескольку раз, пока это заметить программа???
nonamedov вне форума  
Сказали "Спасибо" nonamedov
warel (28.06.2019)
Непрочитано 23.11.2011, 13:29  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ADC- Free Running mode и мультиплексор.AVR

Сообщение от nonamedov Посмотреть сообщение
Оно, ведь сбрасывается по выходу их функции прерывания, и как по Вашему проводить проверку окончания преобразования АЦП в режиме FreeRunning?
Условия задачи
Сообщение от Piknik13 Посмотреть сообщение
вектора прерываний у меня нет и прерывание отключено
niXto вне форума  
Сказали "Спасибо" niXto
warel (28.06.2019)
Непрочитано 23.11.2011, 15:15  
Piknik13
Прохожий
 
Регистрация: 20.11.2011
Сообщений: 8
Сказал спасибо: 6
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Piknik13 на пути к лучшему
По умолчанию Re: ADC- Free Running mode и мультиплексор.AVR

Сообщение от nonamedov Посмотреть сообщение
Если это не обработка прерывания, то почему у Вас функция называется так?!

Оно, ведь сбрасывается по выходу их функции прерывания, и как по Вашему проводить проверку окончания преобразования АЦП в режиме FreeRunning? неужели МК ничего другого не делает, или измерения по одному каналу будет по нескольку раз, пока это заметить программа???
Это просто функция, обработчик прерываний иначе выглядит. Окончание - по флагу АДИФ судя по всему. это плата АЦП, у нее других функций особо нет.
Piknik13 вне форума  
Сказали "Спасибо" Piknik13
warel (28.06.2019)
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
adc avr operator Proteus, KiCAD и другие ECAD 9 27.11.2009 09:21
Simulations is not running ethers Proteus, KiCAD и другие ECAD 1 29.09.2009 00:10
Что такое SPI mode 0, 3 ? Maver Микроконтроллеры, АЦП, память и т.д 3 09.02.2006 01:15
Программирование AVR - Fase Correct PWM Mode и флаг TOV2 pinokio3000 Микроконтроллеры, АЦП, память и т.д 2 12.07.2005 12:44


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


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