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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 03.09.2012, 16:52  
Znamen
Частый гость
 
Регистрация: 02.09.2012
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Znamen на пути к лучшему
По умолчанию Re: Помогите с АЦП на меге16

Т.е. как я понял чтобы постоянно работало преобразования нужно после оканчания преобразования опять устанавливать бит ADIF в 1? или как? Получаеться преобразование само по сибе не работает и не выкладывает значения преобразования в регистры ADC. Чет я ваще тогда не доганяю какой смысл тогда режима непрерывного преобразования если все равно его постоянно включать надо(((((((((((
Реклама:
Znamen вне форума  
Непрочитано 03.09.2012, 17:00  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Помогите с АЦП на меге16

Сообщение от Znamen Посмотреть сообщение
Т.е. как я понял чтобы постоянно работало преобразования нужно после оканчания преобразования опять устанавливать бит ADIF в 1?
Нет, ADIF - флаг завершения преобразования.Запись 1 в него сбрасывает его.
Новое запускается записью 1 в ADSC.

Сообщение от Znamen Посмотреть сообщение
Получаеться преобразование само по сибе не работает и не выкладывает значения преобразования в регистры ADC. Чет я ваще тогда не доганяю какой смысл тогда режима непрерывного преобразования если все равно его постоянно включать надо(((((((((((
Есть ещё FreeRuning mode - один раз записать ADSC и считывать по флагу ADIF
_Артём_ вне форума  
Непрочитано 03.09.2012, 17:20  
Znamen
Частый гость
 
Регистрация: 02.09.2012
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Znamen на пути к лучшему
По умолчанию Re: Помогите с АЦП на меге16

Так в том то и дело что устонавливаем ADSC ждем ADIF читаем и все, преобразование на этом заканчиваеться, пока заново неустановить ADSC или не сбросить ADIF
Znamen вне форума  
Непрочитано 03.09.2012, 17:31  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Помогите с АЦП на меге16

Сообщение от Znamen Посмотреть сообщение
Так в том то и дело что устонавливаем ADSC ждем ADIF читаем и все, преобразование на этом заканчиваеться, пока заново неустановить ADSC или не сбросить ADIF
ADFR чему у вас равен?
_Артём_ вне форума  
Непрочитано 03.09.2012, 17:48  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Помогите с АЦП на меге16

Сообщение от Znamen Посмотреть сообщение
Т.е. как я понял чтобы постоянно работало преобразования нужно после оканчания преобразования опять устанавливать бит ADIF в 1? или как?
На ассме пишу, как говорят со словарем, но алгоритм работы с АЦП могу объяснить. При желании можно все выложить и в Протеусе (но на Си).

Инициализация АЦП

Первый способ.
1. Настроили порт на вход.
2. ADCSRA = (1 ‹‹ ADEN) | ADC_CONV_SP; - включили АЦП (ADEN) и установили предделитель (ADPS2, ADPS1, ADPS0) – скорость преобразования (переменная ADC_CONV_SP).
3. ADMUX = (1 ‹‹ REFS0) | (1 ‹‹ ADLAR) | ADC_CHANNEL; - опорное AVCC с внешним конденсатором на выводе AREF, выбрал выравнивание (ADLAR), выбор аналогового канала (MUX4, MUX3, MUX2, MUX1, MUX) (переменная ADC_CHANNEL).
4. ADCSRA |= (1 ‹‹ ADSC); запустил преобразование.
5. while(ADCSRA & (1 ‹‹ ADSC)); ждем окончания преобразования, если ADSC равно нулю, то выход из цикла.
6. Читаем ADCH.

Пункты 4, 5, 6 должны быть вставлены в программу там, где мы читаем АЦП. Для чтения АЦП они должны повторяться, так как указаны.
Я обычно делаю так, сразу читаю ADCH (естественно там ерунда), затем ADCSRA |= (1 ‹‹ ADSC); запустил преобразование и ушел на цикл программы (цикл ожидания не ставлю), просчитываю цикл программы так, чтобы следующее чтение ADCH дало правильный результат. Так и кручусь в цикле. Такой способ дает возможность не задерживаться в пустом цикле while. Мы как бы читаем с отставанием, но на практике это неважно.
В крайнем случае, ставлю проверку по if (ADCSRA & (1 ‹‹ ADSC) == 0) {var = ADCH; ADCSRA |= (1 ‹‹ ADSC);}

Другой способ это автоматическое преобразование.

Первым делом настраиваем таймер/счетчик 0 или 1 согласно опций регистра SFIOR.
Например, включаю таймер0 (установил предделитель).
TCCR0 &= 0xf8;
TCCR0 |= 0x05;
Затем все пункты такие же, только выбрасываем пункт 5, и добавляем
7. ADCSRA |= (1 ‹‹ ADATE); включили Auto Trigger.
8. SFIOR |=(1‹‹ADTS2); разрешили автопреобразование по переполнению таймера0.

Все. После этого в любом месте программы читаю ADCH (если 8 бит). Изменение данных в нем будет происходить с частотой переполнения таймера0 (в данном примере).

Последовательность настроек не догма, можно их менять (согласно дате, там есть нюансы).
Но если несколько каналов, то разумный способ первый (все пункты по порядку).
mimuh64 вне форума  
Непрочитано 03.09.2012, 18:12  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Помогите с АЦП на меге16

Сообщение от mimuh64 Посмотреть сообщение
Все. После этого в любом месте программы читаю ADCH (если 8 бит). Изменение данных в нем будет происходить с частотой переполнения таймера0 (в данном примере).
Если вас не интересует актуальность сосчитанных данных - то можно и так. Если же вас интересуют "свежие" данные - надо бы глянуть флаг обновления... Вдруг в момент обращения к регистру данные в нем еще старые? Они вас устроят? Не получится ли это частным решением? Типа, а мне пофигу..
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 03.09.2012, 19:12  
alvadep
Почётный гражданин KAZUS.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Помогите с АЦП на меге16

Сообщение от Znamen Посмотреть сообщение
Получаеться преобразование само по сибе не работает и не выкладывает значения преобразования в регистры ADC. Чет я ваще тогда не доганяю какой смысл тогда режима непрерывного преобразования если все равно его постоянно включать надо(((((((((((
Если Вы разрешите прерывание по ADC, флаг ADIF будет сбрасываться автоматически при переходе на вектор прерывания. В обработчике можете ни чего не делать, а сразу RETI. И будет Вам счастье.
alvadep вне форума  
Непрочитано 03.09.2012, 19:34  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Помогите с АЦП на меге16

Сообщение от ut1wpr Посмотреть сообщение
Если же вас интересуют "свежие" данные - надо бы глянуть флаг обновления... Вдруг в момент обращения к регистру данные в нем еще старые? Они вас устроят? Не получится ли это частным решением? Типа, а мне пофигу..
В данном случае не актуальное замечание, я просто не привел третий способ чтения по прерыванию (или скажем по обновлению). Вот и опишите алгоритм на этот случай. Естественно все зависит от постановки задачи. Не нужно цепляться и выискивать казусы. Все описывать я не собирался. Я просто хотел чтобы ТС от чего-то оттолкнулся.

Последний раз редактировалось mimuh64; 03.09.2012 в 19:48.
mimuh64 вне форума  
Непрочитано 03.09.2012, 23:41  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Помогите с АЦП на меге16

Сообщение от ut1wpr Посмотреть сообщение
Если вас не интересует актуальность сосчитанных данных ....

Сделайте, чтобы прерывание по таймеру приходило 1 раз за 3-4 цикла преобразования АЦП.
При синхронной работе АЦП использовать флаг завершения преобразования не вижу смысла.
SasaVitebsk вне форума  
Непрочитано 04.09.2012, 09:25  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Помогите с АЦП на меге16

Сообщение от SasaVitebsk Посмотреть сообщение

Сделайте, чтобы прерывание по таймеру приходило 1 раз за 3-4 цикла преобразования АЦП.
При синхронной работе АЦП использовать флаг завершения преобразования не вижу смысла.
А вот это абсолютно верное замечание. Частота запуска на конвертацию может быть достаточно большой (сообразуясь с потребностью). Так что в регистре ADCH будут всегда "свежие", данные. Ну а забирать их разработчик будет тогда когда ему нужно. Хоть по прерыванию от таймера (ведь таймер уже запущен), хоть по событию, хоть в цикле программы (я не знаю тех кто работает в цикле и не понимает за какой период его программа делает этот цикл).
Но мы почемуто отошли от темы. Как же там дела у ТС?
mimuh64 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с АЦП putmannn Электроника - это просто 5 19.09.2011 20:43
Как программировать фузы на меге16? Archer07 Микроконтроллеры, АЦП, память и т.д 2 30.07.2009 17:03
измерение напряжения в пределах 0 - 20V на меге16 MiHoY Микроконтроллеры, АЦП, память и т.д 26 30.07.2008 12:17
Помогите выбрать АЦП SFA Микроконтроллеры, АЦП, память и т.д 2 06.12.2007 15:27
Помогите выбрать АЦП User-83 Информация по радиокомпонентам 5 06.06.2006 16:57


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


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