Например TDA7294

Форум РадиоКот • Просмотр темы - Таймеры/счётчики в AVR
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт май 02, 2024 09:28:17

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


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



Начать новую тему Ответить на тему  [ Сообщений: 1322 ]     ... , , , 65, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб авг 26, 2023 08:56:02 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7219
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А вот я и не врубаюсь, используется или нет? Похоже, что это спрятано внутрях ардуины. В коде есть только установка частоты ШИМ - 31250 Гц, путём установки делителя равного 1:
Код:
void set_motor_pwm_frequency(int frequency) {
  switch (frequency) {
    case PWM_31250_HZ:
      // Divide by 1. frequency = 31.25 kHz;
      bitClear(TCCR1B, CS11);
      bitSet(TCCR1B, CS10);
      break;
И analogWrite принимает аргумент от 0 до 255. Получается, что счетчик считает только до 255? Т.е. тактовая 8Мгц (хотя мне казалось, что кварц 16 МГц), делим на 256 - получаем частоту ШИМ 31250. Или всё же 16Мгц, а TOP установлен как 1FF, а analogWrite записывает со сдвигом? Т.е. замерить интервал невозможно, так как счетчик уже 10 раз переполнится между импульсами? А менять частоту ШИМ двигателей я не могу - мне нужно снять характеристики именно в таком режиме.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб авг 26, 2023 09:27:41 
Сверлит текстолит когтями

Карма: 20
Рейтинг сообщений: 305
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1228
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
В вашем случае измерение периода не должно быть очень точной функцией. (Однако это напр. не частотомер с разрешением 1 Hz на напр. 50 MHz).
Почему бы не использовать готовые функции Arduino? Напр. pin change interruption ISR и micros()? Изменение вверх: начало измерения время, изменение вниз: остановка, разница: время.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср авг 30, 2023 06:39:03 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4222
Откуда: Ижевск
Рейтинг сообщения: 0
uldemir писал(а):
Т.е. замерить интервал невозможно, так как счетчик уже 10 раз переполнится между импульсами? А менять частоту ШИМ двигателей я не могу - мне нужно снять характеристики именно в таком режиме.
У меня есть тахометр на tiny2313, у которого таймер 1 имеет такой же функционал как и у mega328.
СпойлерИзображение
Программа считает длительность входного сигнала с периодом p_pwm=8192 такта для работы ШД. Не вижу никаких противопоказаний для задания p_pwm=256 тактов и 2-х байтном накопительном счетчике.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс сен 03, 2023 22:16:33 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 107
Рейтинг сообщения: 0
Друзья, имеется код для статус светодиода, и разные его режимы работы.
Код:
// Массив режимов работы светодиода
uint16_t modes[] = {
   0B0000000000000000, //Светодиод выключен (
   0B1111111111111111, //Горит постоянно
   0B0000111100001111, //Мигание по 0.5 сек
   0B0000000100000001, //Короткая вспышка раз в секунду
   0B0000000000001001, //Две короткие вспышки раз в 2 секунды
   0B0000000001001001, //Три короткие вспышки раз в 2 секунды
   0B0101010101010101 //Частые вспышки
};

int main(void){

     while(1){

      // Событие срабатывающее каждые 125 мс СТАТУС СВЕТОДИОД
      if( ( msec_cnt - ms_led_st ) > 125 || msec_cnt < ms_led_st ) {
         ms_led_st = msec_cnt;
         // Режим светодиода ищем по битовой маске
         if(blink_mode & 1<<(blink_loop&0x0F)) {
            PORTC |=(1<<LED_STATUS);  //ON светодиод;
         }else{
            PORTC &=~(1<<LED_STATUS); //OFF светодиод
         }
         blink_loop++;
      }
      }
}

Вопрос можно ли такое засунуть в прерывания настроенные на 1 милисекунду, и какими последствиями плоха такая затея?
Код:
ISR (TIMER0_OVF_vect)
{
             // Событие срабатывающее каждые 125 мс СТАТУС СВЕТОДИОД
      if( ( msec_cnt - ms_led_st ) > 125 || msec_cnt < ms_led_st ) {
         ms_led_st = msec_cnt;
         // Режим светодиода ищем по битовой маске
         if(blink_mode & 1<<(blink_loop&0x0F)) {
            PORTC |=(1<<LED_STATUS);  //ON светодиод;
         }else{
            PORTC &=~(1<<LED_STATUS); //OFF светодиод
         }
         blink_loop++;
      }
}


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн сен 04, 2023 08:30:45 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2809
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18105
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
засунуть можно, только все твои битовые маски станут длиной 2000 бит, вместо 16 бит.

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


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн сен 04, 2023 12:36:12 
Прорезались зубы
Аватар пользователя

Карма: 7
Рейтинг сообщений: 73
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 221
Рейтинг сообщения: 1
Starichok51, зачем!?
kote52, Добавьте в прерывании доп.счетчик байтовый. что б изменение светодиодов и сдвиг маски выполнялись каждый 125й тик таймера.

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт сен 29, 2023 15:36:53 
Нашел транзистор. Понюхал.

Карма: -6
Рейтинг сообщений: 0
Зарегистрирован: Вт окт 11, 2022 13:45:06
Сообщений: 152
Рейтинг сообщения: 0
Привет. Понадобилось мне на AtTiny13 генерировать секунду. На внутреннем генераторе. Никак не могу посчитать как настроить таймер. Всё получается какие то дробные числа. 9,6МГц. Свободных регистров есть. Помогите пж настроить таймер. Для меги 8 всегда брал RC на 8 МГц и получал 1 мкС.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт сен 29, 2023 16:02:21 
Прорезались зубы
Аватар пользователя

Карма: 7
Рейтинг сообщений: 73
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 221
Рейтинг сообщения: 1
ciaas, ставите прескалер 64 (CS0[2:0] = 011) - получаете на вход таймера 9600 кГц / 64 = 150 кГц
Далее, таймер в СТС (WGM0[2:0 = 010) TOP <- OCR0A
В регистр OCR0A пишете 150-1 - получаете тик таймера 1 мс

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пт сен 29, 2023 16:35:45 
Нашел транзистор. Понюхал.

Карма: -6
Рейтинг сообщений: 0
Зарегистрирован: Вт окт 11, 2022 13:45:06
Сообщений: 152
Рейтинг сообщения: 0
Ну блин просто же. Тупею :) спс


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн окт 02, 2023 05:15:15 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4222
Откуда: Ижевск
Рейтинг сообщения: 0
Все равно должен быть счетчик 1мс до секунды. Можно тогда и так
9600000/256=37500
Зарядить счетчик на подсчет числа переполнений.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн окт 02, 2023 11:59:40 
Прорезались зубы
Аватар пользователя

Карма: 7
Рейтинг сообщений: 73
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 221
Рейтинг сообщения: 0
akl, счетчик миллисекунд до секунды в любом случае программный.
а вот 37500 уже нацело на 1000 не делится, поэтому не будет сработки каждую миллисекунду.
Если стоит задача считать секунду - то да, можно. Если стоит задача иметь миллисекундный таймер - то нет.

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн окт 02, 2023 14:59:52 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2809
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18105
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
Just_Fluffy, не обязательно делить на 256, у таймера можно применить режим СТС.
для получения 1мс нужно разделить на 9600. 9600 = 128 * 75.
таймером делим на 128, потом программным счетчиком делим на 75 и получаем 1 мс.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн окт 02, 2023 15:19:59 
Прорезались зубы
Аватар пользователя

Карма: 7
Рейтинг сообщений: 73
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 221
Рейтинг сообщения: 0
Starichok51, тут речь о прескалере. И о том, что б получить период счета 1мс аппаратно, без досчитывания программным счетчиком.
Тиня мелкая, там всего 512 команд влазит.
И если аппаратно можно что то сделать, то лучше аппаратно, нежели программно.

Прескалер может быть 1, 8, 64, 256, 1024
таймер 8 бит.
Делитель на 9600 можно сделать так:
Fcpu/1 -> таймером разделить на 9600 - не подходит, таймер может максимум на 256 делить
Fcpu/8 -> таймером разделить на 1200 - не подходит, таймер может максимум на 256 делить
Fcpu/64 -> таймером разделить на 150 - подходит
Fcpu/256 -> таймером разделить на 37,5 - не подходит, таймер не может делить на дробное число. Но если достаточен период счета 2 мс - то подходит
Fcpu/1024 -> таймером разделить на 9,375 - не подходит, таймер не может делить на дробное число. Но если достаточен период счета 8 мс - то подходит

Резюмируя: Получить 1 мс без программных счетчиков можно, разделив тактовую 9,6Мгц прескалером на 64 и установив коэффициент 150 пересчета счетчика (СТС).

Кстати, если нужно считать секундные импульсы, то есть смысл взять прескалер 1024, коэфф. пересчета счетчика 75 - тогда получим период счета 8 мс. Или 125 тиков таймера в секунду, т.е. можно обойтись однобайтовым счетчиком.
Если же нужны интервалы по 1 мс - то счетчик миллисекунд уже будет двухбайтовый, что бы насчитать от 0 до 999.

Хотя тут все зависит от постановки задачи - что из временнЫх интервалов нужно ciaas.

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Пн окт 02, 2023 15:48:21 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2809
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18105
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
Just_Fluffy писал(а):
Fcpu/64 -> таймером разделить на 150 - подходит
можно и так.
я просто привел один вариант, и не исследовал множество вариантов.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вт окт 03, 2023 05:35:32 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4222
Откуда: Ижевск
Рейтинг сообщения: 0
Задано было
... Понадобилось мне на AtTiny13 генерировать секунду...
почему то превратившиеся в 1мс. Без программных счетчиков сгенерировать секунду нельзя. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вт окт 03, 2023 09:58:57 
Прорезались зубы
Аватар пользователя

Карма: 7
Рейтинг сообщений: 73
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 221
Рейтинг сообщения: 0
akl, тогда прескалер/1024 -> CTC /75 -> программно /125
1024*75*125=9 600 000
Накладные расходы - 125 прерываний в секунду, 1 байтовый счетчик.

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вт окт 03, 2023 11:21:17 
Держит паяльник хвостом

Карма: 10
Рейтинг сообщений: 99
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 968
Рейтинг сообщения: 0
Без программных счетчиков сгенерировать секунду нельзя. :)

Если сильно захотеть, то можно всё.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вт окт 03, 2023 13:42:19 
Прорезались зубы
Аватар пользователя

Карма: 7
Рейтинг сообщений: 73
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 221
Рейтинг сообщения: 0
OKF, Как? Если тиня тактируется от 9.6 МГц?

Кстати, в тиньке есть еще один "таймер" - прерывание АЦП - В непрерывном режиме АЦП будет дергать прерывание каждые 13 тактов.
Тактирование АЦП идет через делитель 2, 4, 8, 16 32, 64 или 128.
Соответственно, имеем 7 фиксированных делителей - от 2*13 до 128*13
9600 / (2*13) = 369,2 кГц
9600 / (128*13) = 5,77 кГц

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вт окт 03, 2023 13:56:08 
Держит паяльник хвостом

Карма: 10
Рейтинг сообщений: 99
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 968
Рейтинг сообщения: 0
OKF, Как? Если тиня тактируется от 9.6 МГц?
Да мало ли в Бразилии донов Пэдров тини13 делителей! И всяких там оскалов капитализма.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вт окт 03, 2023 15:36:18 
Прорезались зубы
Аватар пользователя

Карма: 7
Рейтинг сообщений: 73
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 221
Рейтинг сообщения: 0
OKF, в то м то и дело, что мало. максимум на 1024 можно поделить тактовую.
Оскалом тактовую можно занизить в 2 раза (в теории).
Но даже 4800000 Гц / (1024*256) - это 18.3 Гц

_________________
Белая и Пушистая


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

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


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

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


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

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


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