Обсуждаем контроллеры компании Atmel.
Ответить

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

Пн окт 17, 2022 09:50:42

Ниже: 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;
}

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

Пн окт 17, 2022 11:00:36

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

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

Пн окт 17, 2022 11:42:01

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

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

Пн окт 17, 2022 12:41:15

Может быть я запутался в datasheet Atmega 328 и в режиме СТС работает только счетчик 1А?

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

Пн окт 17, 2022 15:30:22

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

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

Ср окт 19, 2022 01:46:21

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

Добавлено after 1 hour 52 minutes 33 seconds:
Счетчик и switch
Вложения
switch.c
(2.2 KiB) Скачиваний: 37

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

Вс окт 23, 2022 12:41:11

Как переадресовать сигнал выхода таймера(например OC1A -PB1) на другой пин, например PB4 ATMEGA 328P. Просто печатка уже готова и получена, но пришлось изменить код.
Спасибо.

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

Вс окт 23, 2022 14:08:13

Напрямую, никак. Можно попробовать задействовать прерывания TIM1_COMPA, TIM1_COMPB, TIM1_OVF и внутри них управлять выходами.

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

Вс окт 23, 2022 14:57:47

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

ЗЫ. Вот тестовый вариант с использованием шильда ардуины… вместо РВ4 задействован вывод РВ5 (светодиод на шильде)… соответственно к выводу РВ1 тоже нужно подключить светодиод… тем самым можно увидеть параллельную работу данных выходов…
temp.hex
(504 байт) Скачиваний: 41

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

Пн окт 24, 2022 09:02:41

Cделал с помощью прерывания. Все работает, правда после, примерно, 40гц начинается рассинхронизация(отставание от первичного сигнала). Но мне достаточно 30гц, поэтому дальше я не экспериментировал с прерываниями.
Вложения
код.txt
(239 байт) Скачиваний: 45

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

Пт окт 28, 2022 21:44:15

Cделал с помощью прерывания. Все работает, правда после, примерно, 40гц начинается рассинхронизация(отставание от первичного сигнала). Но мне достаточно 30гц, поэтому дальше я не экспериментировал с прерываниями.

Используйте прерывания по сравнению и переполнению. Используйте ассемблерные вставки, тогда у вас в стек только адрес программы с момента вызова будет сохраняться. В прерывании по сравнению бит очищайте одной командой, cbi, в прерывании по переполнению бит устанавливайте, sbi. Так можно избежать проверок и, соответственно, запаздывания.

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

Сб ноя 05, 2022 14:12:00

Кто-нибудь в курсе, сбрасываются ли у ATmega8 внешним ресэтом предделители частоты у таймеров и АЦП ?

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

Сб ноя 05, 2022 14:54:23

Внешним сбросом сбрасывается. Для АЦП, например
Изображение
Вложения
изображение_2022-11-05_160011211.png
(12.08 KiB) Скачиваний: 203

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

Сб ноя 05, 2022 15:18:23

Разве есть в этом разница? :dont_know: Ведь при старте программы вначале происходит вся настройка конфигурации элементов, а уже затем выполняется основной алгоритм программы… и если что-то там сбрасывается, то оно всё равно будет восстановлено… :) Или у кого-то делается иначе? :roll:

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

Сб ноя 05, 2022 15:33:52

Есть у m8 регистр MCUCSR, в принципе, позволяющий ветвление после внешнего сброса. Правда, у меня не было такой необходимости.
Вложения
изображение_2022-11-05_163344076.png
(84.09 KiB) Скачиваний: 42

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

Сб ноя 05, 2022 16:04:16

"Ветвление после внешнего сброса"? Это куда?, как говорила моя знакомая.

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

Сб ноя 05, 2022 18:18:02

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

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

Добавлено after 43 minutes 3 seconds:
VNS, Смысл в том, чтобы и программа, и железо работало один-в-один после каждого ресэта, вне зависимости от того, в первый раз или в энный. Чтобы это реализовать, хочу в доскональности понять поведение чипа и компонентов на нём.
Вложения
fig23-2_ADCpresc.png
(3.3 KiB) Скачиваний: 49

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

Сб ноя 05, 2022 18:50:37

чтобы и программа, и железо работало один-в-один после каждого ресэта, вне зависимости от того, в первый раз или в энный. Чтобы это реализовать, хочу в доскональности понять поведение чипа и компонентов на нём.

Если все настройки производить будете сразу после старта, то отпадёт надобность чего-то там выяснять, так как при любом раскладе вначале выполняется конфигурация нужных элементов, а уже затем начинает выполнятся основная программа алгоритма… ежели Вы делаете по другому, то увеличиваете шанс сделать ошибку по незнанию или просто по невнимательности… а оно Вам надо? :)

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

Сб ноя 05, 2022 18:58:10

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

Добавлено after 2 minutes 33 seconds:
VNS, повторюсь ещё раз: хотелось бы знать, как работает предделитель таймеров, есть ли у него "железный" сброс? Буду очень благодарен ответу на этот вопрос.

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

Сб ноя 05, 2022 19:06:22

B@R5uk, тебе что, самому в лом сделать сброс предделителей сразу после подачи питания?
Ответить