Таймеры/счётчики в AVR
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Таймеры/счётчики в AVR
gavrasio, SREG самый обычный регистр ввода-вывода, хоть и имеет особую роль, связанную с управлением ходом программы. Его можно спокойно прочитать, скинуть в стек, а потом достать и восстановить. Было бы удивительно, если бы этого нельзя было сделать. Флаги периферии же внутренние биты состояния внешних для ядра МК устройств. Они отражают состояние или готовность аппаратных процессов, так что было бы весьма удивительно, если бы можно было изменить флаг, не затронув процесс.
Кстати, если я правильно понял, то у вас прерывание по переполнению не вызывалось, не так ли? А вы не забыли установить флаг разрешения прерывания?
Кстати, если я правильно понял, то у вас прерывание по переполнению не вызывалось, не так ли? А вы не забыли установить флаг разрешения прерывания?
- Реклама
Re: Таймеры/счётчики в AVR
B@R5uk писал(а):Чушь полная! То же мне программист нашёлся.
Крутые программисты здесь не сидят, - тут более-менее на одном уровне. А есть и такие, что инициализацию портов микроконтроллера делают с привлечением "Классов".
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Таймеры/счётчики в AVR
Я бы так не сказал, но это моё чисто субъективное мнение.gavrasio писал(а):тут более-менее на одном уровне
Re: Таймеры/счётчики в AVR
Работаете в Асе? Те, кто пишет в Си могут Вас не понять.Но объясняете всё дохотчиво.B@R5uk писал(а):gavrasio, SREG самый обычный регистр ввода-вывода, хоть и имеет особую роль, связанную с управлением ходом программы. Его можно спокойно прочитать, скинуть в стек, а потом достать и восстановить. Было бы удивительно, если бы этого нельзя было сделать. Флаги периферии же внутренние биты состояния внешних для ядра МК устройств. Они отражают состояние или готовность аппаратных процессов, так что было бы весьма удивительно, если бы можно было изменить флаг, не затронув процесс.
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Таймеры/счётчики в AVR
скорее наоборот: работающие исключительно в "асе" могут не понять сишников, но в области микроконтроллеров найти "сишника", не понимающего ассемблер целевой платформы - это надо очень сильно постаратьсяgavrasio писал(а):Работаете в Асе? Те, кто пишет в Си могут Вас не понять.Но объясняете всё дохотчиво.
разумеется, мое замечание не распространяется на категорию начинающих и горе-программистов: первые могут не понять в силу малоопытности, а вторые - в силу тупости.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Таймеры/счётчики в AVR
Всё же интересует момент про "системную функцию while" и её заточенность на ловлю прерываний. С такимм новостями как-то бессмысленно обсуждать остальное.
Re: Таймеры/счётчики в AVR
А, по моему, с этой то функцией, как раз все и ясно. Как автор высказывания не дошел до функции "точка с запятой", которая "ловит" конец строки в исходном тексте, удивительно.
Ну, как не понимающего... Глядя на дизассемблерный листинг, я примерно догадываюсь, что там делает большинство команд, хотя ассемблером АВР никогда плотно не интересовался. Вставку в сишный код, скорее всего, напишу глядя в мануал, а программу целиком наверное нет. Это если сходу. Если посидеть-поковыряться, то и программу наверное напишу, только это еще не требовалось ни разу.ARV писал(а):но в области микроконтроллеров найти "сишника", не понимающего ассемблер целевой платформы
Re: Таймеры/счётчики в AVR
Вас смущает запись while(1); Перепишите вот так:a5021 писал(а):А, по моему, с этой то функцией, как раз все и ясно. Как автор высказывания не дошел до функции "точка с запятой", которая "ловит" конец строки в исходном тексте, удивительно.
whille(1)
;
Точка с запятой говорит, что это есть пустой оператор. Можете проверить на компиляторе, - он определит, где есть функция, а где пустой оператор. Без пустого оператора while(1) не будет знать, что ей надо что-то делать.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Таймеры/счётчики в AVR
точка с запятой скорее обозначает конец оператора, как в русском языке точка - конец предложения. пустой оператор в таком разрезе это две подряд идущие точки с запятой. бред, конечно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Таймеры/счётчики в AVR
Мне проверять не нужно. Я хорошо вижу, где функция, а где дисфункция.
Re: Таймеры/счётчики в AVR
a5021 писал(а):Мне проверять не нужно. Я хорошо вижу, где функция, а где дисфункция.
Вот результат компиляции( код 0 - компиляция успешная). Обратите внимание, где находится пустой оператор( внизу листинга).
Хотя, может Вы и правы. Все операторы есть своего рода функциями, интерфейсы к которым прописаны в библиотеках. И если их назвали операторами, значит так и должно быть.
Последний раз редактировалось gavrasio Вт окт 06, 2015 21:22:33, всего редактировалось 1 раз.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Таймеры/счётчики в AVR
gavrasio, вы метете пургу.
while(1);
и
while(1)
;
абсолютно, с бесконечной точностью эквивалентные записи, и результат компиляции будет безупречно идентичным для обоих этих вариантов.
точка с запятой - это НЕ ОПЕРАТОР!!! вот вообще, нисколечно, даже на чуть-чуть НЕ ОПЕРАТОР!!! абсолютно НЕ ОПЕРАТОР!!!
когда вы уже прочтете книжку, чтобы пользоваться ПРАВИЛЬНОЙ ТЕРМИНОЛОГИЕЙ, а не выдумывать свою собственную, не соприкасающуюся с истиной?!
while(1);
и
while(1)
;
абсолютно, с бесконечной точностью эквивалентные записи, и результат компиляции будет безупречно идентичным для обоих этих вариантов.
точка с запятой - это НЕ ОПЕРАТОР!!! вот вообще, нисколечно, даже на чуть-чуть НЕ ОПЕРАТОР!!! абсолютно НЕ ОПЕРАТОР!!!
когда вы уже прочтете книжку, чтобы пользоваться ПРАВИЛЬНОЙ ТЕРМИНОЛОГИЕЙ, а не выдумывать свою собственную, не соприкасающуюся с истиной?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Таймеры/счётчики в AVR
ARV писал(а):gavrasio, вы метете пургу.
while(1);
и
while(1)
;
абсолютно, с бесконечной точностью эквивалентные записи, и результат компиляции будет безупречно идентичным для обоих этих вариантов.
точка с запятой - это НЕ ОПЕРАТОР!!! вот вообще, нисколечно, даже на чуть-чуть НЕ ОПЕРАТОР!!! абсолютно НЕ ОПЕРАТОР!!!
когда вы уже прочтете книжку, чтобы пользоваться ПРАВИЛЬНОЙ ТЕРМИНОЛОГИЕЙ, а не выдумывать свою собственную, не соприкасающуюся с истиной?!
Но книжку всё равно почитаю, - полезное дело. Графика плохая, - читается с трудом.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Таймеры/счётчики в AVR
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
Александр550
- Родился
- Сообщения: 1
- Зарегистрирован: Чт окт 08, 2015 10:45:05
Re: Таймеры/счётчики в AVR
Прошу помощи, алгоритм простой, а ума немогу дать. Нужно в течении секунды посчитать количество нажатий кнопки.
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Таймеры/счётчики в AVR
А секунда откуда отсчитывается? От первого нажатия или от какого-то другого события? Кроме того, нажатия кнопки считать -- это вам не хухры-мухры, посмотрите для начала в теме "Помогите опросить кнопку" сколько народ над проблемой дребезга контактов бьётся.
Если вкратце, то запускаете таймер с периодом 0,1 секунды, каждый раз по срабатыванию запоминаете текущее состояние и сравниваете с предыдущим. Считаете количество переходов из нуля в единицу (или наоборот). Там же отсчитываете время. Соответственно, нажатий может быть зафиксировано не более 10 (с этими временными параметрами).
Если вкратце, то запускаете таймер с периодом 0,1 секунды, каждый раз по срабатыванию запоминаете текущее состояние и сравниваете с предыдущим. Считаете количество переходов из нуля в единицу (или наоборот). Там же отсчитываете время. Соответственно, нажатий может быть зафиксировано не более 10 (с этими временными параметрами).
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: Таймеры/счётчики в AVR
Не совсем корректное решение, так как основано на предположении, что все нажатия длиннее 0,1сек. В частности, нажатия полностью укладывающиеся между двух срабатываний таймера, вообще не будут учитываться. Лучше все же обрабатывать и прерывания от смены уровня. Дребезг давить программно. Как было справедливо отмечено, методов его подавления много, выбирать нужно исходя из конкретной задачи. Если кроме такого подсчета, м/к больше ничем не занят, то можно и прямо в прерывании это сделать. При смене младшего бита счетчика секунд, подбивать частную сумму и сохранять результаты подсчета, скажем, в массив для последующего отчета.B@R5uk писал(а):запускаете таймер с периодом 0,1 секунды, каждый раз по срабатыванию запоминаете текущее состояние и сравниваете с предыдущим.
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Таймеры/счётчики в AVR
Корректное или нет, это вопрошающему решать, моё дело лишь предложить. Может он дребезг хочет посчитать, тогда вообще никакого подавления не надо, а кнопку на счётный вход второго таймера надо повесить (с интервалом 1 сек считывать показания и вычитать из нового старое). А если и делать подавление, то как раз в той теме, на которую я давал ссылку, многие решения так или иначе сводятся к предложенному мной варианту.Pnjom-Penb писал(а):Не совсем корректное решение, так как основано на предположении, что все нажатия длиннее 0,1 сек.



