Таймеры/счётчики в AVR

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Сообщения: 1922
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Ниже: TIMER1 - выход из RB1/OS1A, код только для одного случая из case, перепишите аналогично для остальных:

Код: Выделить всё

void Counter0_init()
{
  TCCR1B |= (1 << CS10) | (1 << CS12);
  TCCR1B &= ~(1 << CS11);

  TCCR1B &= ~(1 << WGM10);
  TCCR1B &= ~(1 << WGM11);
  TCCR1B |= (1 << WGM12);
  TCCR1B &= ~(1 << WGM13);

  TCCR1A &= ~(1 << COM1A1);
  TCCR1A |= (1 << COM1A0);
  DDRB |= (1 << PB1);
  OCR1A = 150;
}
Контактная информация:
Реклама
Родился
Сообщения: 18
Зарегистрирован: Вс окт 16, 2022 10:28:09

Сообщение catrock »

Я не совсем понял Ваше сообщение. Эта запись - настройки регистров Т1 должны вызываться в case оператора switch (не понял только почему TCCR1A &= ~(1 << COM1A1);TCCR1A |= (1 << COM1A0) ведь это для счетчика 1А, а у меня 1В и выход соответственно РВ2) , но проблема в том что счетчик вообще не работает. Попробуйте запустить в протеусе.
Спасибо что помогаете новичку
Реклама
Поставщик валерьянки для Кота
Сообщения: 1922
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

С кодом выше работает счетчик 1А к РВ1. Прежде чем написать свое сообщении, проверил (только case 2). За другими вариантами (счетчик 1B, к RB2) нет возможности проверять.
Вложения
Untitled-1.jpg
(109.12 КБ) 74 скачивания
Последний раз редактировалось veso74 Пн окт 17, 2022 22:01:41, всего редактировалось 1 раз.
Контактная информация:
Родился
Сообщения: 18
Зарегистрирован: Вс окт 16, 2022 10:28:09

Сообщение catrock »

Может быть я запутался в datasheet Atmega 328 и в режиме СТС работает только счетчик 1А?
Реклама
Эиком - электронные компоненты и радиодетали
VNS
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1633
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

Работают оба при условии если значение OCRA будет больше значения OCRВ… при том что значение OCRВ будет влиять только на временной интервал начиная от наступления прерывания по OCRA… но временной период прерываний OCRВ будет зависеть только от значения OCRA… если же значение OCRA будет меньше значения OCRВ, то прерывание по OCRВ отработает единожды в самом начале старта программы и всё…
Витиевато наверное описал данную ситуацию работы, но надеюсь поймёте суть сказанного… :)
Реклама
Родился
Сообщения: 18
Зарегистрирован: Вс окт 16, 2022 10:28:09

Сообщение catrock »

ЗАДАЧУ РЕШИЛ
ВСЕМ СПАСИБО

Добавлено after 1 hour 52 minutes 33 seconds:
Счетчик и switch
Вложения
switch.c
(2.2 КБ) 82 скачивания
Реклама
Открыл глаза
Сообщения: 44
Зарегистрирован: Пн окт 05, 2020 17:20:11

Сообщение uuu000 »

Как переадресовать сигнал выхода таймера(например OC1A -PB1) на другой пин, например PB4 ATMEGA 328P. Просто печатка уже готова и получена, но пришлось изменить код.
Спасибо.
akl
Друг Кота
Сообщения: 4462
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Напрямую, никак. Можно попробовать задействовать прерывания TIM1_COMPA, TIM1_COMPB, TIM1_OVF и внутри них управлять выходами.
VNS
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1633
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

Я бы задействовал прерывание Timer_1_Compare_Match_A, а в нём переключал бы пин РВ4. :)

ЗЫ. Вот тестовый вариант с использованием шильда ардуины… вместо РВ4 задействован вывод РВ5 (светодиод на шильде)… соответственно к выводу РВ1 тоже нужно подключить светодиод… тем самым можно увидеть параллельную работу данных выходов…
temp.hex
(504 байт) 85 скачиваний
Открыл глаза
Сообщения: 44
Зарегистрирован: Пн окт 05, 2020 17:20:11

Сообщение uuu000 »

Cделал с помощью прерывания. Все работает, правда после, примерно, 40гц начинается рассинхронизация(отставание от первичного сигнала). Но мне достаточно 30гц, поэтому дальше я не экспериментировал с прерываниями.
Вложения
код.txt
(239 байт) 80 скачиваний
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1314
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Откуда: Казань

Сообщение НАПАЛМ »

[uquote="uuu000",url="/forum/viewtopic.php?p=4309136#p4309136"]Cделал с помощью прерывания. Все работает, правда после, примерно, 40гц начинается рассинхронизация(отставание от первичного сигнала). Но мне достаточно 30гц, поэтому дальше я не экспериментировал с прерываниями.[/uquote]
Используйте прерывания по сравнению и переполнению. Используйте ассемблерные вставки, тогда у вас в стек только адрес программы с момента вызова будет сохраняться. В прерывании по сравнению бит очищайте одной командой, cbi, в прерывании по переполнению бит устанавливайте, sbi. Так можно избежать проверок и, соответственно, запаздывания.
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

Кто-нибудь в курсе, сбрасываются ли у ATmega8 внешним ресэтом предделители частоты у таймеров и АЦП ?
akl
Друг Кота
Сообщения: 4462
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Внешним сбросом сбрасывается. Для АЦП, например
Изображение
Вложения
изображение_2022-11-05_160011211.png
(12.08 КБ) 286 скачиваний
VNS
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1633
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

Разве есть в этом разница? :dont_know: Ведь при старте программы вначале происходит вся настройка конфигурации элементов, а уже затем выполняется основной алгоритм программы… и если что-то там сбрасывается, то оно всё равно будет восстановлено… :) Или у кого-то делается иначе? :roll:
akl
Друг Кота
Сообщения: 4462
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Есть у m8 регистр MCUCSR, в принципе, позволяющий ветвление после внешнего сброса. Правда, у меня не было такой необходимости.
СпойлерИзображение
Вложения
изображение_2022-11-05_163344076.png
(84.09 КБ) 80 скачиваний
OKF
Это не хвост, это антенна
Сообщения: 1430
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

"Ветвление после внешнего сброса"? Это куда?, как говорила моя знакомая.
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

akl, спасибо! С АЦП понятно: после сброса регистр управления оказывается в дефолтном состоянии (нули в битах), что сбрасывает предделитель частоты:
СпойлерИзображение
Не совсем понятно, что означает вход START, запуск одиночного (или первого в серии) преобразования? Звучит логично, но комментариев к этому в даташите не нашёл.

А что, собственно, с таймерами? У их предделителя нет аппаратного сброса, только ручной? Содержимое ресэт выживает?

Добавлено after 43 minutes 3 seconds:
VNS, Смысл в том, чтобы и программа, и железо работало один-в-один после каждого ресэта, вне зависимости от того, в первый раз или в энный. Чтобы это реализовать, хочу в доскональности понять поведение чипа и компонентов на нём.
Вложения
fig23-2_ADCpresc.png
(3.3 КБ) 114 скачиваний
VNS
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1633
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

[uquote="B@R5uk",url="/forum/viewtopic.php?p=4315345#p4315345"]чтобы и программа, и железо работало один-в-один после каждого ресэта, вне зависимости от того, в первый раз или в энный. Чтобы это реализовать, хочу в доскональности понять поведение чипа и компонентов на нём.[/uquote]
Если все настройки производить будете сразу после старта, то отпадёт надобность чего-то там выяснять, так как при любом раскладе вначале выполняется конфигурация нужных элементов, а уже затем начинает выполнятся основная программа алгоритма… ежели Вы делаете по другому, то увеличиваете шанс сделать ошибку по незнанию или просто по невнимательности… а оно Вам надо? :)
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

А ещё тут вопрос в какие моменты времени что происходит. Вот, например, АЦП: если на схеме START означает запуск преобразования, то моменты "тиканья" АЦП будут происходить с одним смещением от выключения RESET. А если это означает что-то другое, то время будет отсчитываться от момента включения АЦП (смещение относительно RESET будет зависеть от момента запуска первого преобразования). Можно, конечно, реализовать включение и запуск АЦП одной командой (благо, что всё это запрятано в один регистр и работает), но хотелось бы более полного знания, на случай, когда такое решение не подходит.

Добавлено after 2 minutes 33 seconds:
VNS, повторюсь ещё раз: хотелось бы знать, как работает предделитель таймеров, есть ли у него "железный" сброс? Буду очень благодарен ответу на этот вопрос.
Модератор
Аватара пользователя
Сообщения: 19077
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

B@R5uk, тебе что, самому в лом сделать сброс предделителей сразу после подачи питания?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ответить

Вернуться в «AVR»