|
STM32: запуск АЦП от TIM1 |
|
|
|
 |
Ответов
|
Feb 7 2012, 19:38
|
Участник

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272

|
У меня работает. (Надеюсь, таймер и канал сравнения настроены) CODE void delay_y() { volatile u32_t i, ty; for(i=0; i<10000; i++) ty=GPIOA_ODR; }
void init_adc() { // выключаем АЦП и ждём не менее 2-х периодов синхронизации АЦП ADC1_CR1=0x00000000; ADC1_CR2=0x00000000; delay_y(); // включаем (1 мкс) и ждём время установления (1 мкс) ADC1_CR2=0x00000001; delay_y(); // выполняем калибровку ADC1_CR2=0x00000005; while(ADC1_CR2&0x00000004); // ждём окончания (5,9 мкс)
// настраиваем
// время захвата значения ADC1_SMPR1=0x00000000; ADC1_SMPR2=0x0002d000; // используется только 5-й и 6-й каналы // SMPx[2:0]=101
// последовательность обычных каналов ADC1_SQR1=0x00000000; // L - длина последовательность // SQx - номер канала ADC1_SQR2=0x00000000; ADC1_SQR3=0x00000006; // используется только 5-й и 6-й каналы
ADC1_CR1=0x00000020; // // AWDEN=0; // отслеживание диапазона обычных каналов - не требуется // JAWDEN=0; // отслеживание диапазона вклинивающихся каналов - не требуется // DISCNUM=0; // кол-во каналов в прерывистом режиме // JDISCEN=0; // прерывистый режим для вклинивающихся каналов - не требуется // DISCEN=; // ??? прерывистый режим для обычных каналов - // JAUTO=0; // автопреобразование вклинивающейся группы - не требуется // AWDSGL=0; // отслеживание диапазона в режиме .. просмотра (scan) - не требуется // SCAN=0; // режим просмотра - не требуется // JEOCIE=0; // прерывание по вклинивающимся каналам - не требуется // AWDIE=0; // прерывание по отслеживанию диапазона - не требуется // EOCIE=1; // прерывание по обычным каналам - разрешено // AWDCH=0; // номер канала для отслеживания диапазона
ADC1_CR2=0x00100001; // // TSVREFE=0; // каналы датчика температуры и внутреннего опорного - не требуется // SWSTART=0; // программный запуск преобразования на обычных каналах // JSWSTART=0; // программный запуск преобразования на вклинивающихся каналах // EXTTRIG=1 ; // запуск преобразования обычного канала по внешнему сигналу - разрешен // EXTSEL=000; // источник внешнего запускающего сигнала для обычного канала - таймер 1, канал 1 // JEXTTRIG=0; // запуск преобразования вклиниваюегося канала по внешнему сигналу - не требуется // JEXTSEL=0; // источник внешнего запускающего сигнала для вклинивающихся каналов - не требуется // ALIGN=0; // выравнивание результата - вправо // RSTCAL=0; // сброс калибровки // CAL=0; // запуск калибровки // CONT=0; // непрерывный режим - не требуется // ADON=1; // включение АЦП / запуск преобразования // запуск преобразования происходит если выполняется оба условия: // 1) до этого АЦП уже был включен ADON=1; // 2) кроме бита ADON другие биты не меняются }
Сообщение отредактировал IgorKossak - Feb 7 2012, 20:10
Причина редактирования: [codebox]
|
|
|
|
|
Feb 8 2012, 03:16
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Юрий_СВ @ Feb 8 2012, 01:38)  У меня работает. (Надеюсь, таймер и канал сравнения настроены) Код // последовательность обычных каналов ADC1_SQR1=0x00000000; Я правильно понимаю, что у вас длина последовательности равна нулю? Почему так?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Feb 8 2012, 09:08
|
Участник

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272

|
Цитата(AHTOXA @ Feb 8 2012, 06:16)  Я правильно понимаю, что у вас длина последовательности равна нулю? Почему так? Нет вы понимаете неправильно. Она равна 1. Цитата Bits 23:20 L[3:0]: Regular channel sequence length These bits are written by software to define the total number of conversions in the regular channel conversion sequence. 0000: 1 conversion
Сообщение отредактировал Юрий_СВ - Feb 8 2012, 09:09
|
|
|
|
|
Feb 8 2012, 11:33
|
Участник

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272

|
Цитата(AHTOXA @ Feb 8 2012, 14:05)  Я не о том. Вопрос вот какой: а не маловато ли вам будет одного преобразования для двух каналов? В самый раз. Номер канала меняется в прерывании. 1) между преобразованиями надо, как минимум, управлять внешними коммутаторами. 2) в некоторых случаях приходится пропустить несколько прерываний при работающем таймере. (заботиться о синхронизации номера канала в АЦП и программе - не хотелось бы) 3) мне удобнее обрабатывать каждый канал отдельно. 4) переношу большую программу с другого ядра (AVR) - переписывать пол программы - ради чего ?
|
|
|
|
|
Feb 8 2012, 12:10
|
Участник

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272

|
Цитата(AHTOXA @ Feb 8 2012, 14:41)  Дык, надо ж сразу обо всём этом писать. А то получается ерунда - делитесь вроде как рабочим куском, а он оказывается вон ещё сколько всего требует. Надеюсь, вы шутите. Если человек хоть пару раз пролистывал описание МК - то у него всё необходимое есть. Человек даже не посчитал нужным сказать какие каналы он использует: обычные или вклинивающиеся. (для них предусмотрены совершенно разные источники запуска) А вы мне предлагаете трактат на 3 страницы писать ? Для него ведь важно: 1) Что это хоть у кого-нибуть работоспособно (у меня работает) 2) настройка битов регистра ADC1_CR2 // EXTTRIG=1 ; // запуск преобразования обычного канала по внешнему сигналу - разрешен // EXTSEL=000; // источник внешнего запускающего сигнала для обычного канала - таймер 1, канал 1 Практически каждый бит подписан по-русски - неужели "убеждения" не позволят их поменять под себя? Трудностей с отключением инверсных выходов таймера 1 у меня тоже не было. Работает нормально.
Сообщение отредактировал Юрий_СВ - Feb 8 2012, 12:11
|
|
|
|
|
Feb 8 2012, 12:53
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Юрий_СВ @ Feb 8 2012, 18:10)  Надеюсь, вы шутите. Нет, я не шучу. Цитата Если человек хоть пару раз пролистывал описание МК - то у него всё необходимое есть. Тогда зачем ему ваш ответ? Вернее не так. Зачем вы ему тогда отвечаете? У него же есть всё необходимое!  Цитата Человек даже не посчитал нужным сказать какие каналы он использует: обычные или вклинивающиеся. Если вы посмотрите повнимательнее, то увидите, что вопрос был задан более года назад. То есть, скорее всего, "человеку" ваш ответ уже не нужен. То есть, вы пишете свой ответ для других читателей форума, у которых возможно возникнет похожая проблема. И следовательно (это моё твёрдое убеждение), надо делать это внятно и понятно, с достаточной степенью детализации, а не бросать огрызки нерабочего кода, комментарии в котором к тому же не совпадают с его содержанием. Цитата А вы мне предлагаете трактат на 3 страницы писать ? Не обязательно три страницы. Хотя бы эти ваши четыре пункта из поста №11.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
koyodza STM32: запуск АЦП от TIM1 Jul 24 2011, 13:36 AHTOXA TIM_BDTR_MOE? Jul 25 2011, 09:12 koyodza Цитата(AHTOXA @ Jul 25 2011, 12:12) TIM_B... Jul 28 2011, 15:25 Huston007 Цитата(koyodza @ Jul 24 2011, 20:36) У ко... Aug 18 2011, 13:03 Михаил Черепанов Цитата(Huston007 @ Aug 18 2011, 19:03) По... Feb 7 2012, 03:19 sevastianovd koyodza, попробуйте пример из стандартной библиоте... Feb 7 2012, 08:51        Юрий_СВ Цитата(AHTOXA @ Feb 8 2012, 15:53) вопрос... Feb 8 2012, 14:37 koyodza Цитата(Юрий_СВ @ Feb 7 2012, 21:38) У мен... Feb 8 2012, 20:41  Юрий_СВ Цитата(koyodza @ Feb 8 2012, 23:41) Ну и ... Feb 9 2012, 12:13   koyodza Цитата(Юрий_СВ @ Feb 9 2012, 14:13) // EX... Feb 9 2012, 15:28    MiklPolikov Пытаюсь запустить АЦП от события TIM6_TRGO
Не п... Apr 13 2012, 22:00     scifi Цитата(MiklPolikov @ Apr 14 2012, 02:00) ... Apr 14 2012, 08:24      MiklPolikov Цитата(scifi @ Apr 14 2012, 11:24) Тут ну... Apr 14 2012, 10:53       MiklPolikov Разобрался. Оказалось что АЦП не хочет запускатся... Apr 14 2012, 21:20        koyodza Цитата(MiklPolikov @ Apr 14 2012, 23:20) ... Apr 15 2012, 13:29
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|