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

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

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

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

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

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


 
Опции темы
Непрочитано 14.10.2013, 12:33  
kvark85
Прописка
 
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
kvark85 на пути к лучшему
По умолчанию STM32F051x6 - переключение каналов ADC

проблема с измерением двух каналов STM32F051x6. использую единичные преобразования: программа работает так: после того как все инициализировано:

while((ADC1-›CR&ADC_CR_ADSTART)!=0){}; //это условие должно выполняться перед сменой канала
ADC1-›CHSELR=ADC_CHSELR_CHSEL1; //выставляем вход ADC1_IN1(PA1)
ADC1-›CR|=ADC_CR_ADSTART; //старт преобразов.
while((ADC1-›ISR&ADC_ISR_EOSEQ)!=ADC_ISR_EOSEQ){}; //ожидание преобазов.
temp1=(float)ADC1-›DR; //забираем преобразования с первого канала

while((ADC1-›CR&ADC_CR_ADSTART)!=0){}; //это условие должно выполняться перед сменой канала
ADC1-›CHSELR=ADC_CHSELR_CHSEL3; //выставляем вход ADC1_IN2(PA3)
ADC1-›CR|=ADC_CR_ADSTART; //старт преобразов.
while((ADC1-›ISR&ADC_ISR_EOSEQ)!=ADC_ISR_EOSEQ){}; //ожидание преобазов.
temp2=(float)ADC1-›DR; //забираем преобразования с второго канала

при такой вот работе программы temp1 = 1998 и сильно дребезжит при "0" на входе. если закоментировать ADC1-›CHSELR=ADC_CHSELR_CHSEL3; - тоесть перестать переключать каналы - измерения происходят правильно - почти "0" при "0В" на входе и "4095" при "3.3В" на входе. я как то неправильно использую единичные преобразования?
Реклама:
__________________
Kvsrk85(Андрей)
kvark85 вне форума  
Непрочитано 14.10.2013, 14:26  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,772
Сказал спасибо: 123
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: STM32F051x6 - переключение каналов ADC

kvark85, я перед сменой канала сбрасываю регистр ADC1-›CHSELR.
ADC1-›CHSELR = (uint32_t)0x0000; //Очистка выбора всех каналов
и потом выбираю канал
ADC1-›CHSELR |= (uint32_t)ADC_ch_1; //Выбор 1 канала
сбрасываю флаг окончания измерений
ADC_ClearFlag(ADC1,ADC_FLAG_EOC); //Очистка флага окончания измерений
и так далее.
Короче
LED_ch1_On; //
delay_led(); //
ADC1-›CHSELR = (uint32_t)0x0000; //
ADC_ClearFlag(ADC1,ADC_FLAG_EOC); //
ADC1-›CHSELR |= (uint32_t)ADC_ch_1; //
ADC_StartOfConversion(ADC1); //
while((ADC1-›ISR & ADC_FLAG_EOC) != ADC_FLAG_EOC) {} //
LED_ch1_Off; //
LED_ch2_On; //
rez_adc_1 = ADC_GetConversionValue(ADC1); //
комментарии удалил из-за кодировки
andries5 вне форума  
Непрочитано 14.10.2013, 14:34  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,772
Сказал спасибо: 123
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: STM32F051x6 - переключение каналов ADC

Я дожидаюсь окончания
while((ADC1-›ISR & ADC_FLAG_EOC) != ADC_FLAG_EOC) {} //
по флагу ADC_FLAG_EOC. Может потому при пошаговой отладке хватает времени?
ADC_ISR_EOSEQ флаг окончания преобразований сегмента.
andries5 вне форума  
Непрочитано 14.10.2013, 14:49  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: STM32F051x6 - переключение каналов ADC

kvark85, andries5, код то можно нормально оформить?
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 14.10.2013, 14:54  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,772
Сказал спасибо: 123
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: STM32F051x6 - переключение каналов ADC

Прошу прощения, поторопился.
andries5 вне форума  
Сказали "Спасибо" andries5
kvark85 (14.10.2013)
Непрочитано 14.10.2013, 15:33  
kvark85
Прописка
 
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
kvark85 на пути к лучшему
По умолчанию Re: STM32F051x6 - переключение каналов ADC

dosikus, тоже извиняюсь за код.
к andries5 - ADC_ISR_EOSEQ флаг окончания преобразований сегмента, правильно. и именно его я использовал для ожидания преобразования, так как в сегменте у меня одно преобразование. Смотрю в IAR при отладке - после преобразования выставляется именно EOSEQ, а ADC_FLAG_EOC не выставляется. попробовал на всякий случай написать так:
while(((ADC1-›ISR&ADC_ISR_EOSEQ)==0) || ((ADC1-›ISR&ADC_IER_EOCIE)==0)){};
(думаю одну строчку не надо было как код вставлять)).
Не знаю насколько такая строчка правильная в данном случае - но так - работает.
Кстати, вот перепроверил, так:
while((ADC1-›ISR&ADC_IER_EOCIE)==0){}; - тоже работает. В общем - неправильно я ожидание преобразования делал. Разобрался вроде.
__________________
Kvsrk85(Андрей)
kvark85 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
STM32 ADC + DMA в циклическом режиме Nik_UFO Микроконтроллеры, АЦП, память и т.д 4 24.02.2012 18:49
Помогите настроить АЦП в Atmega32 sergx1300 Микроконтроллеры, АЦП, память и т.д 72 09.11.2010 00:28
Шумит и свистит ADC на LPC2148 Vas2 Микроконтроллеры, АЦП, память и т.д 5 01.03.2009 16:14
Как осуществить переключение постоянной времени???? Prime Производственное оборудование 4 21.12.2005 20:45
PIC16F877A pawelk Микроконтроллеры, АЦП, память и т.д 17 28.05.2005 23:54


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


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