Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
45 / 43 / 2
Регистрация: 23.01.2019
Сообщений: 328

Prescaler Reset Timer/Counter в Atmega8

14.10.2025, 18:32. Показов 868. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Не совсем понимаю как написано в ДШ.

На примере Мега8, таймер/счётчик2

Регистр SFIOR – Special Function IO Register
Bit 1 – PSR2: Prescaler Reset Timer/Counter2

описание EN:
When this bit is written to one, the Timer/Counter1 and Timer/Counter0 prescaler will be reset. The bit will be
cleared by hardware after the operation is performed. Writing a zero to this bit will have no effect. Note that
Timer/Counter1 and Timer/Counter0 share the same prescaler and a reset of this prescaler will affect both timers.
This bit will always be read as zero.
автоперевод RU:
При записи этого бита в единицу предделитель Таймера/Счётчика 2 сбрасывается. Бит сбрасывается аппаратно после выполнения операции. Запись нуля в этот бит не даст никакого эффекта. Этот бит всегда будет считываться как ноль, если Таймер/Счётчик 2 тактируется внутренним тактовым сигналом ЦП. Если этот бит записывается, когда Таймер/Счётчик 2 работает в асинхронном режиме, он останется равным единице до сброса предделителя.
Не понимаю, какой предделитель сбрасывается и как. Предделитель таймера, на сколько я знаю, находится в битах CS22, CS21, CS20.
Попробовал в студии, но тоже ничего не увидел (возможно студия не всё показывает).
Посмотрел в других ДШ (на 328-ю, хотя там названия другие) описание бита слово в слово.
Поиск в нете тоже дал только поверхностные описания.
Ожидал увидеть обнуление счётного регистра, но в студии этого не произошло.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2025, 18:32
Ответы с готовыми решениями:

stm32 tim period,tim prescaler
Добрый день помогите разобраться с результат работы таймера. Код скопирован из интернета....

Undefined symbol: reset (ASM, Proteus, ATMega8)
Не компилируется выдает вполне понятную ошибку но не могу исправить! Вот код программы: пишу...

Разница между ATMEGA8-16AI и ATMEGA8-16AU
Кто подскажет, в чем разница между ATMEGA8-16AI и ATMEGA8-16AU. Смотрю в Платане цены между ними...

11
1184 / 460 / 68
Регистрация: 22.09.2023
Сообщений: 1,399
14.10.2025, 20:06
Лучший ответ Сообщение было отмечено shonty как решение

Решение

Цитата Сообщение от shonty Посмотреть сообщение
Предделитель таймера, на сколько я знаю, находится в битах CS22, CS21, CS20.
Эти биты задают коэффициент деления предделителя. Предделитель - дополнительный счетчик перед таймером, именно его состояние и сбрасывается битом PSRx, после чего он начинает считать с нуля. Снаружи этот счетчик недоступен, увидеть его текущее значение нельзя.
1
45 / 43 / 2
Регистрация: 23.01.2019
Сообщений: 328
14.10.2025, 20:09  [ТС]
Цитата Сообщение от Dushevny Посмотреть сообщение
после чего он начинает считать с нуля
Т.е. счётный регистр тоже должен обнулиться? (студия не показала)
0
1184 / 460 / 68
Регистрация: 22.09.2023
Сообщений: 1,399
14.10.2025, 20:11
Цитата Сообщение от shonty Посмотреть сообщение
Т.е. счётный регистр тоже должен обнулиться?
Нет, только счетчик предделителя. Счетный регистр таймера сохраняет свое значение. Хотите его обнулить - запишите в него 0.
1
45 / 43 / 2
Регистрация: 23.01.2019
Сообщений: 328
14.10.2025, 20:55  [ТС]
Спасибо. Примерно понял. Типа для синхронизации..
Просто встретил в чужом исходнике, но пока не понял зачем он там..

Добавлено через 38 минут
Разобрался что и зачем.. спасибо.

Код из этой статьи.

Вот этот участок (12-я строка, макрос) Но я не весь его буду использовать. По своему немного сделаю.
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
;------ Прерывание таймера 2 (раз в 1 сек) -------------------------------------;
OVF2_VECTOR:                        ; SBR изменяет флаги Z,C,N,V,H,S; CLR - Z,C,N,V,S
    MOV    Safe, Temp               ; сохранить временный регистр
    STS    RAM_Val_H, FxOVF         ; перенос значения счетного регистра в память
    IN     Temp, TCNT1L             ; перенос значения
    STS    RAM_Val_L, Temp          ; счетного
    IN     Temp, TCNT1H             ; регистра
    STS    RAM_Val_M, Temp          ; в память
    LDI    Temp, 0x00               ; обнуление
    OUT    TCNT1H, Temp             ; счетного
    OUT    TCNT1L, Temp             ; регистра
    OUTI   SFIOR, (1<<PSR2)         ; сброс предделителя таймера 2
    MOV    Temp, Safe               ; восстановить временный регистр
    IN     Safe, SREG               ; сохранить флаги SREG
    CLR    FxOVF                    ; обнуление счетного регистра
    SBR    BITx1, (1<<MRK_BCD)      ; установить флаг начала обработки измерений
    OUT    SREG, Safe               ; восстановить флаги SREG   
    RETI                            ;
0
45 / 43 / 2
Регистрация: 23.01.2019
Сообщений: 328
15.10.2025, 14:09  [ТС]
Понадобился частотомер для использования в другом приборе. Никогда не делал раньше. Понимаю, что тема про авр-ки уже "не модная"
Цитата Сообщение от shonty Посмотреть сообщение
По своему немного сделаю.
Обработчик прерывания упростил под свои условия:
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
OVF_T2: 
    in  CNT_low,  TCNT1L    
    in  CNT_mid,  TCNT1H    
    mov CNT_high, t1_ovf_counter
    clr flag                    ; флаг обработки измерений
    clr R16
    ldi R17, (1<<PSR2)
    out TCNT1H, R16             ; обнуляем счётный регистр T1 (ЗАПИСЬ: сначала старший байт !!!)
    out TCNT1L, R16             ;
    out SFIOR,  R17             ; сбрасываем предделитель T2
    clr t1_ovf_counter          ; обнуляем регистр подсчёта переполнения счётчика            
reti

Пока в тестовом режиме запустил, измеряет частоту внутреннего генератора меги. Питание 3,3, поэтому не 8.
Кликните здесь для просмотра всего текста

С генератора позже попробую.

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

Вем
0
1184 / 460 / 68
Регистрация: 22.09.2023
Сообщений: 1,399
15.10.2025, 14:24
Цитата Сообщение от shonty Посмотреть сообщение
измеряет частоту внутреннего генератора меги. Питание 3,3, поэтому не 8.
Измеряет частоту внутреннего генератора той же меги, которая измеряет? Тогда должно получаться ровно 8000000 вне зависимости от фактической частоты генератора (поскольку измеряемый сигнал меняется пропорционально опорному). Так что ищите ошибку в коде.
0
45 / 43 / 2
Регистрация: 23.01.2019
Сообщений: 328
15.10.2025, 14:33  [ТС]
Цитата Сообщение от Dushevny Посмотреть сообщение
Тогда должно получаться ровно 8000000 вне зависимости от фактической частоты генератора (поскольку измеряемый сигнал меняется пропорционально опорному).
T2 (1 секунда) тактируется от часового 32.768 Гц
К сожалению делители меги не позволяют секунду получить простым способом.

С железом ещё до конца не определился. Возможно это будут lgt8f328p и дисплей lcd1602.
0
1184 / 460 / 68
Регистрация: 22.09.2023
Сообщений: 1,399
15.10.2025, 14:42
Цитата Сообщение от shonty Посмотреть сообщение
T2 (1 секунда) тактируется от часового 32.768 Гц
Понятно. Тогда да.
Цитата Сообщение от shonty Посмотреть сообщение
К сожалению делители меги не позволяют секунду получить простым способом.
8000000 = 32000 * 250. Т.е. заставить TIM2 считать до 250 (Mode = 2) и после 32000 переполнений будет ровно секунда.
Добавлено: 32000 = 256 * 125, т.е. если еще включить предделитель 256, то секунда наступит через 125 переполнений.
1
45 / 43 / 2
Регистрация: 23.01.2019
Сообщений: 328
15.10.2025, 17:38  [ТС]
Цитата Сообщение от shonty Посмотреть сообщение
С генератора позже попробую.
Кликните здесь для просмотра всего текста

Ну наверное почти нормально
Возможно опорную 32.768 подстроить нужно, так как генератор тактируется вроде от более менее качественного генератора.
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
15.10.2025, 17:42
Цитата Сообщение от shonty Посмотреть сообщение
Возможно опорную 32.768 подстроить нужно
Нужно не забывать про технологический разброс. То есть в реальности 32768 это не 32768, а просто что-то близкое. Во времена аналоговой схемотехники частоту подстраивали подстроечным конденсатором на одной из ножек кварца. Сейчас проще менять делитель.
И нужно не забывать о дрейфе. Конечно, кварц это не RC-цепочка, но все же физический объект, и идеальным он не будет.
1
45 / 43 / 2
Регистрация: 23.01.2019
Сообщений: 328
21.11.2025, 14:30  [ТС]
Всем привет ещё раз)

Собрал частотомер на 8-й меге используя концепцию из этой статьи:
https://we.easyelectronics.ru/... aciya.html
Формирователем образцового периода является Таймер 2, работающий в асинхронном режиме от «часового» кварца 32768 Hz. Контроллер тактируется от внутреннего RC-генератора частотой 8 MHz. Максимальная частота измеряемых импульсов при этом равна 8 / 2,5 = 3,2 MHz.
Там хоть и написано 8/2,5=3,2, у меня же если больше 2,7 то начинал лагать.. Но это и понятно, вроде F/4 должно быть.

На чистовую всё же решил проект сделать на LGT8f328p, у неё тактовая 32МГц + удвоитель частоты таймера ТС1.

Сделал, измеряет максимум 32/4 =8 8,3 измеряет, 8,4 уже лагает.. Но тут я согласен..

Включаю умножитель частоты ТС1 х2 - результат тот же.. хотя ожидал 16МГц


Мне просто знающие скажите, вот тут про аттини85 лажа написана? или я где-то что-то не допонял?

https://arduino.ru/forum/progr... primenenie

Как-то незаслуженно обидели весьма достойный микроконтроллер. Из особенностей наличие умножителя частоты и возможность работы таймера до весьма высоких частот, 100 мегагерц уж точно, что позволяет сделать к примеру частотомер.
Надеюсь в этой теме появятся скетчи ориентированные именно на этот микроконтроллер.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2025, 14:30
Помогаю со студенческими работами здесь

Как правильно активировать и пользовать counter и timer в AVR
активировать в генераторе начального кода вероятно можно, как точно пока не знаю, но думаю с этим...

Timer counter ATMega16
Здравствуйте! Нужно измерить перриод прямоугольных импульсов, для етого использую Timer counter 1...

ATxmega32A4 & Timer/Counter error
Приветствую всех! Закрался в код некий мистический косяк: записываю в регистр счетчика число, на...

ATMega32. МК уходит в reset
Такая же проблема с mega32a. при разрешении прерывания (RXCIE = 1), мк уходит в ресет, при этом ни...

ATMega не работает стабильно и уходит в Reset
Привет, у меня есть схема с atmeg-ой, есть программа, которая выполняется некоректно. Пробовал в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru