Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 26.10.2018
Сообщений: 1

STM8 Работа АЦП в многоканальном режиме

17.03.2019, 19:21. Показов 4482. Ответов 0

Студворк — интернет-сервис помощи студентам
Добрый день!
Не могу разобраться с работой АЦП с несколькими каналами в режиме ScanMode.
Настройки: запуск от таймера 1, забираем данные в прерывании ADC1

Ковырял на STM8S103F3P6 - каналы АЦП на нем нумеруются со второго (IN2-IN6) - если нужно измерять с первых трех (IN2-IN4), по идее код настройки должен быть
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_4, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, ENABLE,
ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL4, DISABLE);
Но данные выдает только с первого (IN2).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
static void TIM1_Config()
{
// Предделитель/период счета: 159/100 16МГц/(159+1)=100КГц, 100КГц/100=1КГц, кол-во повторений 0, Период T=1/1000=1мс 
TIM1_TimeBaseInit(159, TIM1_COUNTERMODE_UP, 100, 0); //50
TIM1_SelectOutputTrigger(TIM1_TRGOSOURCE_UPDATE); // Включаем выход на запуск АЦП
TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE); // Включаем источник обновления "по прерыванию"
TIM1_Cmd(ENABLE); // Включаем таймер
}
 
 
// Настройка АЦП
static void ADC_Config()
{
  ADC1_DeInit(); // Сброс настроек АЦП
  ADC1_ScanModeCmd(ENABLE); // Включаем режим сканирования
  ADC1_DataBufferCmd(ENABLE); // Включаем буферизацию
// Настройка периферии АЦП: однократный режим, каналы AIN2-AIN4, частота дискретизации 16/2=8МГц (2,3,4,6,8,10,12,18), запуск по Таймеру 1, Триггер Шмидта на 2м канале отключен.
  ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_4, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, ENABLE, 
  ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL4, DISABLE);
  ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_4, ADC1_ALIGN_RIGHT);
  ADC1_Cmd(ENABLE); // Включаем АЦП
  ADC1_ITConfig(ADC1_IT_EOCIE, ENABLE); // Прерывание по окончанию преобразования
}
 
// АЦП Измерение (эта функция засунута в прерывание АЦП)
void ADCconvert(void)
{ 
if( ADC1_GetFlagStatus( ADC1_FLAG_EOC)) // Ждем окончания преобразования
 {
  VOD1 = ADC1_GetBufferValue(2);
  VOD2 = ADC1_GetBufferValue(3);
  VOD3 = ADC1_GetBufferValue(4);
  ADC1_ClearFlag( ADC1_FLAG_EOC); // Сбрасываем флаг окончания преобразования 
  //ADC1_ClearITPendingBit(ADC1_IT_EOC);
 }
 
}

Пробовал на STM8S105K4T6 - там каналы нумеруются IN0-IN9. На нем выходит получить измерения с первых трех каналов (т.е. IN0-IN2) и не более.
Крутил уже и тактирование, и частоту запусков от таймера1, и частоту дискретизации D2-D18.
Ничего не помогает, 2й и 3й каналы отваливаются вообще только первый канал измеряет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Настройка Таймера1
static void TIM1_Config()
{
// Предделитель/период счета: 159/50 16МГц/(159+1)=100КГц, 100КГц/50=2КГц, кол-во повторений 0, Период T=1/2000=500мкс   
TIM1_TimeBaseInit(159, TIM1_COUNTERMODE_UP, 50, 0); //50
TIM1_SelectOutputTrigger(TIM1_TRGOSOURCE_UPDATE); // Включаем выход на запуск АЦП
TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE); // Включаем источник обновления "по прерыванию"
TIM1_Cmd(ENABLE); // Включаем таймер
}
 
// Настройка АЦП
static void ADC_Config()
{
  ADC1_DeInit(); // Сброс настроек АЦП
  ADC1_ScanModeCmd(ENABLE); // Включаем режим сканирования
  ADC1_DataBufferCmd(ENABLE); // Включаем буферизацию
// Настройка периферии АЦП: однократный режим, каналы AIN0-AIN4, частота дискретизации 16/2=8МГц (2,3,4,6,8,10,12,18), запуск по Таймеру 1, Триггер Шмидта на всех каналах отключен.
  ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_4, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, ENABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);
//ADC1_ClearFlag( ADC1_FLAG_EOC); // Сбрасываем флаг окончания преобразования 
  ADC1_Cmd(ENABLE); // Включаем АЦП
  ADC1_ITConfig(ADC1_IT_EOCIE, ENABLE); // Прерывание по окончанию преобразования
}
// АЦП Измерение (эта функция засунута в прерывание АЦП)
void ADCconvert(void)
{ 
if( ADC1_GetFlagStatus( ADC1_FLAG_EOC)) // Ждем окончания преобразования
 {
  VOD1 = ADC1_GetBufferValue(0);
  VOD2 = ADC1_GetBufferValue(1);
  VOD3 = ADC1_GetBufferValue(2);
  VOD4 = ADC1_GetBufferValue(3);
  VOD5 = ADC1_GetBufferValue(4);
  ADC1_ClearFlag( ADC1_FLAG_EOC); // Сбрасываем флаг окончания преобразования 
 }
 
}
В общем, не могу осилить, хоть и мануал по АЦП перевел. Нужно именно 3 канала на STM8S103 мерить. Что я делаю не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2019, 19:21
Ответы с готовыми решениями:

AtTiny13A,работа АЦП в режиме auto triggering.
Добрый день товарисчи знатоки. Собстна имеем такой интересный момент: Тини13а. АЦП настроен на циклический запуск по событию...

Stm8 передача из АЦП в UART
Добрый день, нашел код передачи из АЦП в UART, но не вижу в каком именно месте в UART передаются данные от АЦП Вот сам код #include...

АЦП в STM8 и внутренний ИОН
И это снова я, пытающийся разобраться с некоторыми хитростями и тонкостями. В RM0031 написано (для справки - tIDLE около 1...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2019, 19:21
Помогаю со студенческими работами здесь

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

АЦП в ручном режиме и таймер
Задача - один раз в 0,032 мсек оцифровывать напряжение с резистора. Принцип: В прерывании таймера запускаем АЦП, потом ждем...

Проблемы с АЦП в режиме дифференциального входа
Доброго времени суток! Помогите пожалуйста разобраться. Исходная задача: необходимо реализовать на atmega8535 флюгер(схема досталась в...

Как переписать драйвер АЦП в защищенном режиме
Помогите с переписыванием драйвера. Есть исходник драйвера АЦП который пишет в файл, необходимо переписать драйвер так что бы он писал...

Discontinuous mode в dual режиме АЦП STM32
Здравствуйте! начинаю изучать программирование мк stm32 на базе китайской платки с контроллером stm32f103c8. Хочу собрать устройство,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru