Таймеры/счётчики в AVR

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: Таймеры/счётчики в AVR

Сообщение B@R5uk »

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

Кстати, если я правильно понял, то у вас прерывание по переполнению не вызывалось, не так ли? А вы не забыли установить флаг разрешения прерывания?
Реклама
gavrasio
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пн июн 01, 2015 15:23:01

Re: Таймеры/счётчики в AVR

Сообщение gavrasio »

B@R5uk писал(а):Чушь полная! То же мне программист нашёлся.

Крутые программисты здесь не сидят, - тут более-менее на одном уровне. А есть и такие, что инициализацию портов микроконтроллера делают с привлечением "Классов".
Реклама
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: Таймеры/счётчики в AVR

Сообщение B@R5uk »

gavrasio писал(а):тут более-менее на одном уровне
Я бы так не сказал, но это моё чисто субъективное мнение.
gavrasio
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пн июн 01, 2015 15:23:01

Re: Таймеры/счётчики в AVR

Сообщение gavrasio »

B@R5uk писал(а):.

Кстати, если я правильно понял, то у вас прерывание по переполнению не вызывалось, не так ли? А вы не забыли установить флаг разрешения прерывания?
Я не выкладывал программу, где у меня не вызывалось прерывание. Мои тестовые программы типа вот так:
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
gavrasio
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пн июн 01, 2015 15:23:01

Re: Таймеры/счётчики в AVR

Сообщение gavrasio »

B@R5uk писал(а):gavrasio, SREG самый обычный регистр ввода-вывода, хоть и имеет особую роль, связанную с управлением ходом программы. Его можно спокойно прочитать, скинуть в стек, а потом достать и восстановить. Было бы удивительно, если бы этого нельзя было сделать. Флаги периферии же внутренние биты состояния внешних для ядра МК устройств. Они отражают состояние или готовность аппаратных процессов, так что было бы весьма удивительно, если бы можно было изменить флаг, не затронув процесс.
Работаете в Асе? Те, кто пишет в Си могут Вас не понять.Но объясняете всё дохотчиво.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение ARV »

gavrasio писал(а):Работаете в Асе? Те, кто пишет в Си могут Вас не понять.Но объясняете всё дохотчиво.
скорее наоборот: работающие исключительно в "асе" могут не понять сишников, но в области микроконтроллеров найти "сишника", не понимающего ассемблер целевой платформы - это надо очень сильно постараться :)))

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

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Таймеры/счётчики в AVR

Сообщение hybroid »

Всё же интересует момент про "системную функцию while" и её заточенность на ловлю прерываний. С такимм новостями как-то бессмысленно обсуждать остальное.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Таймеры/счётчики в AVR

Сообщение a5021 »

А, по моему, с этой то функцией, как раз все и ясно. Как автор высказывания не дошел до функции "точка с запятой", которая "ловит" конец строки в исходном тексте, удивительно.
ARV писал(а):но в области микроконтроллеров найти "сишника", не понимающего ассемблер целевой платформы
Ну, как не понимающего... Глядя на дизассемблерный листинг, я примерно догадываюсь, что там делает большинство команд, хотя ассемблером АВР никогда плотно не интересовался. Вставку в сишный код, скорее всего, напишу глядя в мануал, а программу целиком наверное нет. Это если сходу. Если посидеть-поковыряться, то и программу наверное напишу, только это еще не требовалось ни разу.
gavrasio
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пн июн 01, 2015 15:23:01

Re: Таймеры/счётчики в AVR

Сообщение gavrasio »

a5021 писал(а):А, по моему, с этой то функцией, как раз все и ясно. Как автор высказывания не дошел до функции "точка с запятой", которая "ловит" конец строки в исходном тексте, удивительно.
Вас смущает запись while(1); Перепишите вот так:

whille(1)
;
Точка с запятой говорит, что это есть пустой оператор. Можете проверить на компиляторе, - он определит, где есть функция, а где пустой оператор. Без пустого оператора while(1) не будет знать, что ей надо что-то делать.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение ARV »

точка с запятой скорее обозначает конец оператора, как в русском языке точка - конец предложения. пустой оператор в таком разрезе это две подряд идущие точки с запятой. бред, конечно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Таймеры/счётчики в AVR

Сообщение a5021 »

Мне проверять не нужно. Я хорошо вижу, где функция, а где дисфункция.
gavrasio
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пн июн 01, 2015 15:23:01

Re: Таймеры/счётчики в AVR

Сообщение gavrasio »

a5021 писал(а):Мне проверять не нужно. Я хорошо вижу, где функция, а где дисфункция.
Изображение
Вот результат компиляции( код 0 - компиляция успешная). Обратите внимание, где находится пустой оператор( внизу листинга).
Хотя, может Вы и правы. Все операторы есть своего рода функциями, интерфейсы к которым прописаны в библиотеках. И если их назвали операторами, значит так и должно быть.
Последний раз редактировалось gavrasio Вт окт 06, 2015 21:22:33, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение ARV »

gavrasio, вы метете пургу.

while(1);
и
while(1)
;

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

точка с запятой - это НЕ ОПЕРАТОР!!! вот вообще, нисколечно, даже на чуть-чуть НЕ ОПЕРАТОР!!! абсолютно НЕ ОПЕРАТОР!!!

когда вы уже прочтете книжку, чтобы пользоваться ПРАВИЛЬНОЙ ТЕРМИНОЛОГИЕЙ, а не выдумывать свою собственную, не соприкасающуюся с истиной?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
gavrasio
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пн июн 01, 2015 15:23:01

Re: Таймеры/счётчики в AVR

Сообщение gavrasio »

ARV писал(а):gavrasio, вы метете пургу.

while(1);
и
while(1)
;

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

точка с запятой - это НЕ ОПЕРАТОР!!! вот вообще, нисколечно, даже на чуть-чуть НЕ ОПЕРАТОР!!! абсолютно НЕ ОПЕРАТОР!!!

когда вы уже прочтете книжку, чтобы пользоваться ПРАВИЛЬНОЙ ТЕРМИНОЛОГИЕЙ, а не выдумывать свою собственную, не соприкасающуюся с истиной?!
Изображение
Но книжку всё равно почитаю, - полезное дело. Графика плохая, - читается с трудом.
gavrasio
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пн июн 01, 2015 15:23:01

Re: Таймеры/счётчики в AVR

Сообщение gavrasio »

Вот так лучше видно:
Изображение
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение ARV »

gavrasio писал(а):Вот так лучше видно:
Изображение
гораздо лучше :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Александр550
Родился
Сообщения: 1
Зарегистрирован: Чт окт 08, 2015 10:45:05

Re: Таймеры/счётчики в AVR

Сообщение Александр550 »

Прошу помощи, алгоритм простой, а ума немогу дать. Нужно в течении секунды посчитать количество нажатий кнопки.
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: Таймеры/счётчики в AVR

Сообщение B@R5uk »

А секунда откуда отсчитывается? От первого нажатия или от какого-то другого события? Кроме того, нажатия кнопки считать -- это вам не хухры-мухры, посмотрите для начала в теме "Помогите опросить кнопку" сколько народ над проблемой дребезга контактов бьётся.

Если вкратце, то запускаете таймер с периодом 0,1 секунды, каждый раз по срабатыванию запоминаете текущее состояние и сравниваете с предыдущим. Считаете количество переходов из нуля в единицу (или наоборот). Там же отсчитываете время. Соответственно, нажатий может быть зафиксировано не более 10 (с этими временными параметрами).
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Таймеры/счётчики в AVR

Сообщение Pnjom-Penb »

B@R5uk писал(а):запускаете таймер с периодом 0,1 секунды, каждый раз по срабатыванию запоминаете текущее состояние и сравниваете с предыдущим.
Не совсем корректное решение, так как основано на предположении, что все нажатия длиннее 0,1сек. В частности, нажатия полностью укладывающиеся между двух срабатываний таймера, вообще не будут учитываться. Лучше все же обрабатывать и прерывания от смены уровня. Дребезг давить программно. Как было справедливо отмечено, методов его подавления много, выбирать нужно исходя из конкретной задачи. Если кроме такого подсчета, м/к больше ничем не занят, то можно и прямо в прерывании это сделать. При смене младшего бита счетчика секунд, подбивать частную сумму и сохранять результаты подсчета, скажем, в массив для последующего отчета.
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: Таймеры/счётчики в AVR

Сообщение B@R5uk »

Pnjom-Penb писал(а):Не совсем корректное решение, так как основано на предположении, что все нажатия длиннее 0,1 сек.
Корректное или нет, это вопрошающему решать, моё дело лишь предложить. Может он дребезг хочет посчитать, тогда вообще никакого подавления не надо, а кнопку на счётный вход второго таймера надо повесить (с интервалом 1 сек считывать показания и вычитать из нового старое). А если и делать подавление, то как раз в той теме, на которую я давал ссылку, многие решения так или иначе сводятся к предложенному мной варианту.
Ответить

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