Нужна помощь: таймер TIM0, AtTiny24

Обсуждаем контроллеры компании Atmel.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Demiurg, Вас поправили. Потому что Вы ошибались и ничего страшного в этом нет, мы все не роботы, все ошибаемся. Однако Вы вместо того чтобы быть благодарным за это, собственно мы тут все и "собрались" чтобы учиться друг у друга, ершитесь на ровном месте.

Поясните мне вот эту Вашу мысль.
А ваш совет использовать регистр не сбрасывая фьюз - извращение вдвойне.
Предположим надо установить делить на 2. Чему должно быть значение фьюз CKDIV8? Если Вы еще не поняли, то этот фьюз не делит частоту, а инициализирует CLKPR значением 0b0011.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Z_h_e писал(а):...
Я умею признавать свои ошибки. Одно дело советовать, то что знаешь настолько, что от зубов отскакивает и опробовано, другое, когда где-то когда-то что-то такое читал.
Я сразу сказал, что делитель на 8 нужно сбрасывать, что я и делаю всегда при программировании нового МК, с регистром никогда не работал, так как попросту никогда не было в этом надобности.
Теперь смотрим на 1 насущную потребность ТС. Ему нужно получить 1 мс. Частота 8 МГц, то что у него внутренний нестабильный (зависимость от величины напряжения питания, температуры) RC-генератор, это его проблемы.
Нет ни одного повода использовать как фьюз делителя на 8, так и регистр системного прескалера.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Рекомендация была в том, что можно просто программно выставить нужный делитель тактовой (чтобы расчеты интервалов совпадали с реальностью) не залезая во фьюзы. Зачем так? Потому-что как правильно написали с самого начала:
Z_h_e писал(а):
Ставлю делитель на 8
Может наоборот выключаете? С фузами легко запутаться.
Про то, что надо обязательно сделать 8МГц для получения 1мс интервалов речи не шло... Прекращаем флудить.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Поясните ка для чего моя цитата тут вставлена? Это я ответил ТС, который удивлялся почему у него при включенном делителе на 8 работа таймера наоборот ускорялась вместо замедления.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 36
Зарегистрирован: Чт июн 25, 2015 20:53:36

Сообщение Browny »

Уважаемые коты, спасибо за информацию!
Ответ на мой вопрос уже получен. На данный момент рассматриваю CTC режим в даташите по рекомендации Z_h_e.
И - да, для текущей задачи мне действительно непринципиально, если внутренний генератор будет немного "плавать". Будет плохо - поставлю кварц.

Z_h_e, видимо, я не очень структурировал описание. Фразой "устанавливаю делитель на 8" я имел ввиду прескалер таймера. Я целенаправленно менял прескалер с 64 на 8, ускоряя таймер (меня не удивило ускорение). Вопрос был в несовпадении реальной и расчётной частоты. Причина в фьюзе CKDIV8, это уже понял.

И - да, я не шил фьюз CKDIV8, он был задействован первоначально. Просто я его не учёл при расчёте частоты таймера.
Реклама
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Engineer_Keen писал(а):Прекращаем флудить.
Никто не флудит. Я с AVR работаю с 2007 года. Про этот регистр, честно говоря, сегодня услышал впервые. Попросту потому что никогда не было в нем необходимости. И чтобы его использовать, мне нужно: изучить даташит, написать тестовые программы, которые покажут зависимость периферии от этого регистра. Даташит это хорошо и прекрасно, но ты должен изучить вопрос от и до, чтобы в будущем на своих проектах не огребать, если чего-то не учел.
Это я про себя говорю, с опытом с 2007 года. А вы советуете использовать этот регистр новичку. Вот о чем речь.
Контактная информация:
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 36
Зарегистрирован: Чт июн 25, 2015 20:53:36

Сообщение Browny »

Demiurg, не вижу вреда в таких советах. Я услышал варианты за и против (причём, как для фьюза CHKDIV8, так и для регистра). Зависимость тактирования от данного регистра представлена в даташите. А применение того или иного варианта imho зависит от задачи.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Browny писал(а):Demiurg, не вижу вреда в таких советах. Я услышал варианты за и против (причём, как для фьюза CHKDIV8, так и для регистра). Зависимость тактирования от данного регистра представлена в даташите. А применение того или иного варианта imho зависит от задачи.
Вот и сделайте опыт. Сбросьте фьюз, настройте на какой-нибудь делитель регистр и запустите мигалку светодиодом с использованием аппаратного таймера.
Также сделайте ногодрыг пинами, чтобы понять как тактируется логика IO.
У меня в данный момент несколько своих проектов. Так как нет необходимости в этом регистре, то и не буду данный момент этим заморачиваться.
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 36
Зарегистрирован: Чт июн 25, 2015 20:53:36

Сообщение Browny »

Demiurg, у меня нога дёргает через опторазвязку симистором, так что да, попробую снять фьюз и задать программно системный делитель. Как положительный исход, рассматриваю время срабатывания, примерно равное текущему. Вечером попробую.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Browny писал(а):...попробую снять фьюз и задать программно системный делитель...
Если под системным делителем Вы имеете ввиду CLKPR, то тогда абсолютно без разницы значение фьюза DIV8(это уже 100 раз тут сказано). Только меняйте значение CLKPR именно так, как Вам указал Engineer_Keen. Если Вы сделаете это по другому, то эффекта не будет - аппаратная защита от случайного изменения.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Z_h_e писал(а):...
Имеется в виду: именно отключить фьюз делитель на 8 (как и должно быть, в общем-то, тем более, как тут утверждается, можно обойти это программно), и поработать с регистром системного делителя, чтобы разобраться с тактированием периферии.
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 36
Зарегистрирован: Чт июн 25, 2015 20:53:36

Сообщение Browny »

Всё прошло штатно и соответствует заявленному в даташите.
Убрал фьюз CKDIV8. Лампочка загорелась примерно через 2 секунды.
Добавил:

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

CLKPR=(1<<CLKPCE);
CLKPR=(1<<CLKPS1)|(1<<CLKPS0);
После прошивки лампочка загорелась через 20 секунд.
Прескалер таймера = 8, смещение в TCNT0 131 (прерывание по переполнению, 125 тиков).

Расчётное время совпадает с реальным (включаю лампочку через 20000 мсек).

И - да, даташит настоятельно рекомендует отключать прерывания во избежание прерывания процесса записи значения в регистр системного делителя.

Даташит чётко указывает на то, что системный прескалер, по умолчанию, устанавливает своё значение в зависимости от состояния фьюза CKDIV8:
The CKDIV8 Fuse determines the initial value of the CLKPS bits. If CKDIV8 is unprogrammed, the CLKPS bits will be reset to “0000”. If CKDIV8 is programmed, CLKPS bits are reset to
“0011”, giving a division factor of eight at start up.
Кто добрался до этого сообщения, минуя исходный вопрос, уточняю: верно для МК AtTiny 24. Поведение для прочих МК лучше уточнить по их даташиту.
Ответить

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