Например TDA7294

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





Текущее время: Вт апр 16, 2024 15:40:42

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


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



Начать новую тему Ответить на тему  [ Сообщений: 1322 ]     ... , , , 48, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср июн 06, 2018 13:10:22 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пн ноя 07, 2016 12:14:14
Сообщений: 134
Рейтинг сообщения: 0
Код:
#define BUTTON_UP      (1<<PD4)                     //4 ножка
#define BUTTON_DOWN      (1<<PD5)                     //5 ножка
#define BUTTON_START   (1<<PD6)                     //6 ножка
#define BUTTON_STOP      (1<<PD7)                     //7 ножка

_________________
Я конечно все понимаю, но этого я не понимаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср июн 06, 2018 13:26:51 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 58
Зарегистрирован: Чт янв 20, 2011 09:07:08
Сообщений: 665
Откуда: Пермь
Рейтинг сообщения: 0
Смотрю я ваш BUTTON_Handler - что-то больно накручено. Некоторые куски кода вообще никогда не выполнятся.
Например, секция else
Код:
   if (!(PIND & pin_state))                        //если кнопка физически нажата (логический 0 на n ножке порта D)
   {
      if(Button_count<20)   Button_count++;               //подавление дребезга при нажатии (кнопка физически нажата 20 тактов)
      else
      {
         Button_state=1;                           //регистрируем нажатие кнопки
         key_delay++;                           //как долго кнопка нажата
      }

_________________
Никакая контра не уйдёт от нас


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср июн 06, 2018 13:31:41 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пн ноя 07, 2016 12:14:14
Сообщений: 134
Рейтинг сообщения: 0
Почему? Я этот кусок кода на stm32 использовала, на реальном камне. Все работало. Но там естественно по другому выглядит условие физического нажатия.
Может условие иначе надо прописать?

_________________
Я конечно все понимаю, но этого я не понимаю.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср июн 06, 2018 13:34:18 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 58
Зарегистрирован: Чт янв 20, 2011 09:07:08
Сообщений: 665
Откуда: Пермь
Рейтинг сообщения: 1
Как почему? У вас при вызове функции Button_count = 0.
И потом вы проверяете Button_count<20
У вас никогда Button_count никогда не станет больше 20, следовательно ветка else никогда не выполнится.

Вот здесь наоборот - только ветка else и будет выпоняться, в которой условие key_delay<20000 будет выполняться всегда.
Код:
      if (Button_count>0)Button_count--;               //подавление дребезга при отжатии
      else
      {
         Button_state=0;                           //регистрируем отжатие кнопки
         if (key_delay<20000)   Flag=1;               //регистрируем короткое нажатие
         else               Flag=2;               //регистрируем длительное нажатие
     


Но это всё уже к таймерам отношения не имеет, imho.

_________________
Никакая контра не уйдёт от нас


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср июн 06, 2018 14:40:02 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пн ноя 07, 2016 12:14:14
Сообщений: 134
Рейтинг сообщения: 0
Спасибо, буду разбирать

_________________
Я конечно все понимаю, но этого я не понимаю.


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб июн 09, 2018 19:40:03 
Опытный кот
Аватар пользователя

Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42
Сообщений: 744
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
bezzabotna писал(а):
int Button_count=0,Button_state=0,key_delay=0,Flag=0; //служебные переменные
Неудивительно, что кнопки не опознаются. Процитированная строка по каждому прерыванию от таймера инитит эти самые служебные переменные, поэтому при сравнении if'ами в Button_count ничего, кроме единицы, быть не может.

Когда-то я решал подобную задачу - принять данные с сильно дребезжащего контакта. Я тогда, по-простому, сделал программные аналоги последовательно включенных интегратора и триггера Шмидта. Аналоги грубые, сильно упрощенные, тем не менее...

Итак, предположим, что таймерные прерывания у нас будут с периодом 1 мс (1 кГц). Заводим в статической памяти, вне (до) всех функций (чтобы не возиться с передачей параметров) табличку, которая для каждой из кнопок содержит следующие данные (навскидку)
1) время замкнутого состояния контактов кнопки.
2) флажок "распознанное состояние кнопки"
3) флажок "предыдущее состояние кнопки"
4) (возможно) флажок "состояние кнопки изменилось" в качестве сигнала главной программе, мол проснись и поработай. :)
5) (если нужно) время распознанного нажатого состояния кнопки, например, для распознавания коротких и длительных нажатий.

При инициализации, обязательно до разрешения таймерных прерываний, все эти поля надо очистить (обнулить).

В программе прерывания по таймеру, для каждой изх кнопок, проверяем, замкнута она, или нет. Если замкнута, инкрементируем поле (1) и, если оно совпадет с порогом срабатывания "триггера Шмидта", взводим флажок (2), если надо, сравниваем этот флажок с (3) и, если они не совпадают взводим флажок (4) и обновляем (3). Далее проверим, не пора ли нашему "интегратору" входить в насыщение. если да, организовываем это насыщение, то есть отменяем инкремент поля (1). Здесь же, обнаружив распознанное состояние кнопки, можно начать инкрементировать (5) и, обнаружив длительное нажатие, послать соответствующий сигнал.

Если же кнопик разомкнут, декрементируем поле (1) и, если оно совпадает с порогом отпускания триггера Шмитта, очищаем флажок (2) и, опять же, сравниваем (2) и (3), действия при несовпадении те же, что и выше. Далее, опять же, проверяем на насыщение (отрицательное), то есть, если (1) станет отрицательным, обнуляем его, и вперед.

Теперь о порогах. Навскидку, порог отпускания триггера Шмитта нужно взять 5-10, порог срабатывания его же - 20-25 и порог насыщения - на 5-10 больше, чем порог срабатывания.

А основная программа должна мониторить поля (2) каждой из кнопок и, обнаружив нажатие, предпринимать соответствующие действия. Или, может быть, флажок (4), если он очищен, можно заснуть (Sleep). Может быть флажок (4) нужен не каждой кнопке, а один на всех, это уже по вкусу.

Да, зачем для этого дела 16-битный таймер 1 ? Там и 8-битного за глаза, только нужен таймер с Clear to Compare (CTC). У 8-й Меги это Т2, 328-ю я наизусть не помню. А так, прескалером делим на 1024, даже из 20 МГц получим порядка 20 кГц, делим таймером на 20 и вот он, желаемый 1 кГц прерываний. Да, 1024 - это не 1000, но точность этой миллисекунды здесь и даром не нужна.

bezzabotna писал(а):
Почему? Я этот кусок кода на stm32 использовала, на реальном камне. Все работало.
Может быть неудачно скопипастила?

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июн 10, 2018 09:32:01 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 58
Зарегистрирован: Чт янв 20, 2011 09:07:08
Сообщений: 665
Откуда: Пермь
Рейтинг сообщения: 0
Заводим в статической памяти, вне (до) всех функций (чтобы не возиться с передачей параметров) табличку, которая для каждой из кнопок содержит следующие данные (навскидку)

Можно завести и внутри обработчика, только с использованием модификатора static - так будет правильнее в точки зрения области видимости переменных.

_________________
Никакая контра не уйдёт от нас


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Вс июн 10, 2018 13:38:14 
Опытный кот
Аватар пользователя

Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42
Сообщений: 744
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
Нет, здесь, как раз, нужна довольно широкая видимость. Таблицу надо проинитить, ее надо видеть из программы обслуживания прерывания, по крайней мере, флажки нужно видеть в программе реакции на нажатие клавиш, там же нужен счетчик длительного нажатия, в общем, проще сделать полную видимость этой таблицы везде и не морочить себе голову.

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср июл 04, 2018 07:41:38 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: -2
Зарегистрирован: Пт сен 04, 2015 13:10:49
Сообщений: 121
Откуда: г. Ижевск
Рейтинг сообщения: 0
Добрый день! Подскажите пожалуйста, как сделать, чтобы в режиме ШИМ - два канала таймера работали попеременно, т.е. допустим на канале А идут импульсы ШИМ, а на канале В - никаких импульсов не должно быть, даже "иголок". А то даже при OCR0B = 0, присутствуют "иголки". Два канала таймера работают на Н-мост и поэтому из-за "иголок" происходит "сквозняк". Можно ли выключить отдельно тот или другой канал?

_________________
Истина где-то рядом...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср июл 04, 2018 07:52:39 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
artemik32 писал(а):
Можно ли выключить отдельно тот или другой канал?
во-первых, можно выключить. во-вторых, иголки - это, как правило, ЕСТЕСТВЕННОЕ состояние для Fast-PWM при одном из "крайних" значений регистра сравнения.
то есть либо надо выбирать правильный режим PWM, либо отключать канал программно в нужный момент. вы же как-то включали оба канала? значит, и выключить один сумеете.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср июл 04, 2018 08:26:30 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Сделать кусок программы проверяющий на ноль содержимое регистра сравнения. Если 0,то выключить соответствующий канал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб июл 28, 2018 13:02:30 
Собутыльник Кота
Аватар пользователя

Карма: 28
Рейтинг сообщений: 756
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Сообщений: 2893
Откуда: приходит весна?
Рейтинг сообщения: 0
Подскажите, пожалуйста, в каких моделях AVR, кроме ATtiny2313A, есть одновременно 16-битный таймер с захватом и 8-битный с внешними входом и выходом?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб июл 28, 2018 17:52:43 
Опытный кот
Аватар пользователя

Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42
Сообщений: 744
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
Детально я, конечно, не вникал, но у Мег 48-88-168-328 блок-схема таймера 0 та же, что и у 2313А. Да и у 16-й (без А) у таймера 0 есть вход и выход. Как мне кажется, только у 8-й Меги такого нет, у остальных Мег должно быть.

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Сб июл 28, 2018 20:48:26 
Собутыльник Кота
Аватар пользователя

Карма: 28
Рейтинг сообщений: 756
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Сообщений: 2893
Откуда: приходит весна?
Рейтинг сообщения: 0
Понятно, спасибо. Что-то 8-я мега какая-то обделённая получается. У всех другим мег есть такой таймер, а у 8-й нет. А у меня их целых три не при делах лежит.


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

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Доброго времени суток. Прошу прощения за нубский вопрос. Смотрю даташит на Мегу8, а именно на режимы работы Timer1, и вижу, что режим 4 фактически идентичен режиму 12, режим 8 - режиму 9, режим 10 - режиму 11, а режим 13 - режиму 14. Все эти пары режимов отличаются только регистром, из которого они берут значение для сравнения. В одном случае это ICR1, во втором - OCR1A. И я не понимаю, зачем было так делать, ведь режим таймера может быть включен все равно только один. Какой тогда смысл в таком дублировании ? Может быть я чего-то не понимаю, тогда приведите пожалуйста пример, когда такая организация может пригодится.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Ср авг 01, 2018 22:23:34 
Собутыльник Кота
Аватар пользователя

Карма: 28
Рейтинг сообщений: 756
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Сообщений: 2893
Откуда: приходит весна?
Рейтинг сообщения: 0
У таймера 1 есть два выхода: OC1A и OC1B. При реализации ШИМа каждый из этих выходов управляется, соответственно, регистрами OCR1A и OCR1B. Если нужен ШИМ с какой-нибудь нестандартной длительностью, то нужен ещё один регистр для хранения этого нестандартного потолка таймера. Этим регистром может являться либо OCR1A, либо ICR1. Если использовать первый регистр, то невозможно будет управлять скважностью канала A, то есть сразу лишимся одного ШИМ-канала. Если же использовать второй регистр, то не будет возможности использовать захват по событию.

Конструкторы чипа просто предоставили своим коллегам, которые этот чип будут использовать в своих разработках, некоторую гибкость: можно в зависимости от потребностей использовать тот или иной регистр. Хотя, разумеется, наиболее правильно было бы завести для этого дела отдельный регистр. Но AVR — это не STM32 с её четырьмя гигабайтами на всё-про-всё. У AVR область портов ввода-вывода ограничена. Поэтому конструкторы решили сэкономить: использовать регистры с двойным назначением в зависимости от режима.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Чт авг 02, 2018 08:58:37 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
... Если нужен ШИМ с какой-нибудь нестандартной длительностью...

Спасибо, вроде как кое-что прояснилось. Но не все :oops: Непонятно, что значит "нестандартной длительностью" ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Чт авг 02, 2018 09:05:35 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
не равной разрядности счетчика, а с любым числом, например 100 (будет шим ровно в 100 шагов, например для получения шага ровно в 1%)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


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

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
Спасибо за разъяснение.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймеры/счётчики в AVR
СообщениеДобавлено: Чт сен 06, 2018 15:38:16 
Встал на лапы

Карма: 12
Рейтинг сообщений: 12
Зарегистрирован: Сб апр 28, 2018 20:29:42
Сообщений: 99
Рейтинг сообщения: 0
Всем привет!

Предисловие:
Я делаю себе таймер на ATmeg48 с внутренним тактированием от RC 8MHz. Хочу повесить часовой кварц для точного счета.

А вот теперь вопрос:
Правильно ли я понимаю, что для данной задачи подойдет только Timer/Counter2? По крайней мере в даташите говориться, что для асинхронного тактирования используется этот счетчик.


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

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


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

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


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

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


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