Например TDA7294

Форум РадиоКот • Просмотр темы - ATTiny13 работа с таймером
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 05, 2025 23:16:32

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: ATTiny13 работа с таймером
СообщениеДобавлено: Чт дек 04, 2025 16:34:33 
Первый раз сказал Мяу!

Зарегистрирован: Ср янв 20, 2021 05:39:28
Сообщений: 33
Рейтинг сообщения: 0
Разбираюсь с работой таймера ATTiny13. Написал код, но работает не так, как задумывалось. Не могу понять - почему. Режим работы таймера CTC, но продолжительность импульсов на PB3 не изменяется при изменении начального значения OCR0A. Получается, что прерывание срабатывает не при достижении равенства значения счётчика и значения OCR0A, а при переполнении счётчика (т.е. счёт идёт постоянно до 255). Заход, в функцию обработки прерываний, происходит. Что-то не так написал в коде, или что-то не дописал? Помогите, пожалуйста, разобраться.
Код:
#include <avr/io.h>
#include <avr/interrupt.h>
 
void setup()
{
    TCCR0A = 0x10; // режим CTC
    TCCR0B = 0x01; //предделитель тактовой частоты CLK/1
    TCNT0 = 0;     // начальное значение счётчика
    OCR0A = 100;   // начальное значение регистра совпадения A
   
    DDRB |= (1 << PB3); // output на PB3
    PORTB &= ~(1 << PB3); // низкий уровень на PB3
   
    //устанавливаем бит разрешения прерывания 0-ого счетчика по совпадению с OCR0A
    TIMSK0 |= (1 << OCIE0A);
 
    sei();// Разрешаем прерывания глобально
}
 
byte a = 0;
 
ISR(TIM0_COMPA_vect) // обработка прерывания при совпадении счётчика с OCR0A
{
   
    if (a == 0)
    {
        PORTB |= (1 << PB3); // высокий на PB3
        ++a;
    }
    else
    {
        PORTB &= ~(1 << PB3); // низкий на PB3
        a = 0;
    }
}
 
void loop()
{}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Чт дек 04, 2025 17:03:26 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 1575
Зарегистрирован: Вт окт 22, 2013 04:37:23
Сообщений: 3412
Откуда: Казань
Рейтинг сообщения: 0
alsav22, переменная а должна быть volatile.

_________________
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезисты Ordyl Alpha 350 и AM 140.
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльная маска XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Чт дек 04, 2025 17:08:32 
Первый раз сказал Мяу!

Зарегистрирован: Ср янв 20, 2021 05:39:28
Сообщений: 33
Рейтинг сообщения: 0
Вопрос снимается. Нашёл ошибку в коде: значение режима задал не в тех единицах. Нужно было или 2 (в десятичной), или 0b10 (в двоичной), или 0x02 (в шестнадцатиричной), или так: TCCR0A |= (2 << WGM00);
То есть, в коде я выставил режим просто счётчика. Непонятно только: почему этот обработчик прерывания срабатывал?


Последний раз редактировалось alsav22 Чт дек 04, 2025 17:25:34, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Чт дек 04, 2025 17:14:02 
Говорящий с текстолитом
Аватар пользователя

Карма: 18
Рейтинг сообщений: 236
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1546
Откуда: Тюмень
Рейтинг сообщения: 0
Я не понимаю Си, но в каком месте вы изменяете значение регистра OCR0A?

Вот прошивка для проверки МК, тактируется на заводских установках (1,2 МГц).
Вложение:
Test_pin.hex [263 байт]
Скачиваний: 6


На выводе РВ3 светодиод. При старте значение регистра OCR0A = 200. При замыкании вывода РВ4 на GND, в данный регистр запишется значение 100. По миганию светодиода это хорошо будет видно.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Чт дек 04, 2025 20:20:25 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15281
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
alsav22
Гибрид ардуино - стиля (возможно и самой ардуиноIDE) и Си???
:shock:
Так в варианте ардуинки второй генератор таймерной сетки на Т0 совсем иначе делается.
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 00:05:34 
Первый раз сказал Мяу!

Зарегистрирован: Ср янв 20, 2021 05:39:28
Сообщений: 33
Рейтинг сообщения: 0
Я не понимаю Си, но в каком месте вы изменяете значение регистра OCR0A?

А зачем мне его изменять (при работе кода я его не меняю, менял в тексте,перед сборкой)?.Цели такой не было. Просто разбирался с регистрами таймера: куда, что, и как нужно прописывать. Результат работы смотрел логическим анализатором на пине вывода.

Добавлено after 6 minutes 4 seconds:
alsav22
Гибрид ардуино - стиля (возможно и самой ардуиноIDE) и Си???
:shock:
Так в варианте ардуинки второй генератор таймерной сетки на Т0 совсем иначе делается.
:roll:

Ардуинка, насколько понял, свои настройки таймера автоматом может прописывать (например, при вызове analogWrite()). Долго не мог понять: делаю настройки таймера, потом использую analogWrite(), мои настройки не работают. А с таким синтаксисом всё видно. В общем, разбираюсь (как могу).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 04:28:15 
Говорящий с текстолитом
Аватар пользователя

Карма: 18
Рейтинг сообщений: 236
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1546
Откуда: Тюмень
Рейтинг сообщения: 0
Цели такой не было. Просто разбирался с регистрами таймера

Теперь ясно, в начале я не верно вас понял. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 07:34:34 
Друг Кота

Карма: 64
Рейтинг сообщений: 1019
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4367
Откуда: Ижевск
Рейтинг сообщения: 0
alsav22 писал(а):
...почему этот обработчик прерывания срабатывал?
По мне, нарушен порядок инициализации таймера.
Код:
   TCCR0A = 0x10; // режим CTC
    TCCR0B = 0x01; //предделитель тактовой частоты CLK/1
    TCNT0 = 0;     // начальное значение счётчика
    OCR0A = 100;   // начальное значение регистра совпадения A

Сделал бы (в мнемокодах)
TCCR0B <- 0 //стоп таймера
TCNT0 <- 0 // начальное значение счётчика
TCCR0A <- 1<<WGM01 // режим CTC
OCR0A <- 100 // начальное значение регистра совпадения A

TIMSK0 <- 1 << OCIE0A
TIFR0 <- 1 << OCF0A
TCCR0B <- 1<<CS00 //старт с тактовой частотой CLK/1
SEI

СпойлерЦэ не знаю и знать не хочу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 09:41:54 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15281
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
...
Ардуинка, насколько понял, свои настройки таймера автоматом может прописывать (например, при вызове analogWrite()). Долго не мог понять: делаю настройки таймера, потом использую analogWrite(), мои настройки не работают. А с таким синтаксисом всё видно. В общем, разбираюсь (как могу).

Ежли работаете с ардуино - извольте соблюдать правила "референса".
Надо хоть немножко понимания иметь о том, что автоматически добавляется к каждому "СКОТчу" в качестве "системных функций" самой средой по умолчанию.
Иначе будет достаточно много всякого рода "непонятных ошибок".
8)
Таймер Т0 используется в адуринках на АВРках в качестве "генератора системных часов" - по факту 1 миллисекундного интервала.
Можно и свой добавочный генератор добавить (для "параллельного процесса" на основе прерывания по OCR0A, но то прерывание также будет с интервалом 1 миллисекунда, единственно смещено относительно основного (обычно ставится 0х127).
А уже на его основе строятся свои программные счетчики.
8)
Насчет работ с адуриньями рекомендую посмотреть раскиданные по
viewtopic.php?f=62&t=156720
заметки и раздел "уроков" у Гайвера:
https://alexgyver.ru/
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 10:13:23 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1305
Рейтинг сообщения: 0
Ардуинка, насколько понял, свои настройки таймера автоматом может прописывать (например, при вызове analogWrite()).

Добавь, что бы Ардуино core не оказывало влияния.
Код:
int main() {
  setup();
  while (true)
    loop();
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 10:30:28 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15281
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Для того, чтобы совсем "влияния не оказывалось" надо программу писать "за пределами ардуиноIDE" - в любой другой IDE.
Максимум что можно "нейтрализовать" изменяя основную страничку исходника - это убрать работу уарт (и то там проще делается).
:wink:
Да и зачем?
Неуж то "в рамках референса" средств недостаточно?
:dont_know:
Собственно вариант окна симулятора к примеру:
СпойлерИзображение

зачем еще раз то же самое дублировать?
8)


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 10:49:46 
Мудрый кот

Карма: 25
Рейтинг сообщений: 480
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1767
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
не
ISR(TIM0_COMPA_vect)
а
ISR(TIMER0_COMPA_vect)

Прерывание не будет правильно подключено и будет казаться, что таймер срабатывает только при переполнении

---

не
TCCR0A = 0x10; // режим CTC - ето бит COM0B0, а не бит WGM01
а
TCCR0A = (1 << WGM01); // режим CTC

Поскольку режим CTC включен неправильно, таймер работает в Normal Mode. В Normal Mode прерывание OCR0A не возникает, но прерывание по переполнению может быть вызвано.


Последний раз редактировалось veso74 Пт дек 05, 2025 11:14:42, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 11:04:00 
Друг Кота

Карма: 64
Рейтинг сообщений: 1019
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4367
Откуда: Ижевск
Рейтинг сообщения: 0
veso74 писал(а):
...В Normal Mode прерывание OCR0A не возникает, но прерывание по переполнению может быть вызвано. Похоже, что ISR вызывается при переполнении.
Возникают и обрабатываются разрешенные TIMSK0 прерывания. Интервалы не будут соответствовать. Вместо 100 тактов будет 256.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 11:05:43 
Мудрый кот

Карма: 25
Рейтинг сообщений: 480
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1767
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Да, именно так.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 11:07:33 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1305
Рейтинг сообщения: 0
зачем еще раз то же самое дублировать?
8)

"Референсы" внимательнее читай.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTiny13 работа с таймером
СообщениеДобавлено: Пт дек 05, 2025 11:12:53 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15281
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Пока что не совсем понятно с какой средой разработки топикстартер дело имеет. Он же не объявлял, что под ардуино IDE работает.
Да и в самой IDE платформ с Тинькой 13ой минимум 2 - их ещё и устанавливать дополнительно надо (в списке "по умолчанию" их нет- надо вручную добавлять).
Может топикстартер пытается копировать "стиль ардуино" в АВРстудио (микрочип студио)...
Так что подождем уточнений...
8)
OKF, ну не "матрешки" же делать - вкладывать повторно то же самое в то же самое.
Обычно достаточно от loop избавиться.
И то лишь для гурманов (изврата).
Да и авр студии никто не отменял...
8)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y