6 программных, независимых друг от друга таймеров в Atmega8

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
kybertech
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Пт окт 31, 2008 02:54:28
Откуда: Украина
Контактная информация:

6 программных, независимых друг от друга таймеров в Atmega8

Сообщение kybertech »

Народ подскажите кто сталкивался с такой задачей:
- Как на основе одно системного таймера в МК Atmega8 или Atmega16 можно создать 6 и более независимых друг от друга таймеров. У кого какие есть идеи по этому поводу ? А может кто и владеет таким куском программы. Да забыл сказать - пишу на С.

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
kybertech
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Пт окт 31, 2008 02:54:28
Откуда: Украина
Контактная информация:

Сообщение kybertech »

ARV писал(а):это элементарная задача, если, конечно, вам не нужно высокой частоты срабатывания ваших "виртуальных" таймеров. просто создаете массив значений, с которыми сравниваете текущее значение счетчика таймера в прерывании таймера и при совпадении вызываете определенную функцию или что-то там нужное делаете.


допустим совпало первое значение в масиве и начался выполняться кусок программы по условию. Таким образом выполнение таймера приостанавливается на время пока выполниться действие. А это уже и есть зависимость таймеров друг от друга. Или я не прав ?

Попроавте если не прав.
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

. Таким образом выполнение таймера приостанавливается на время пока выполниться действие.

Можно, и даже нужно, не "выполнять действие", в смысле некую подпрограмму, а выставлять флаг наступления события, и обрабатывать его (флаг) в главном цикле.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Продолжая предыдущую мысль:
...тогда, если не использовать в "подпрограммах" запреты прерываний, Ваши таймеры будут существенно более независимы
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
Synergetik
Встал на лапы
Сообщения: 117
Зарегистрирован: Чт фев 28, 2008 23:54:35
Откуда: Воскресенск, МО
Контактная информация:

Сообщение Synergetik »

Интересная тема. Присоединяюсь.

Pooher писал(а):Можно, и даже нужно, не "выполнять действие", в смысле некую подпрограмму, а выставлять флаг наступления события, и обрабатывать его (флаг) в главном цикле.

Допустим, сработал флаг. Началось выполнение подпрограммы. Тогда в определённых её точках (где нужна продолжительная монополизация ЦП) нужно вызывать выполнение подпрограммы, проверяющей совпадение? И есть вероятность пропустить нужный номер импульса, пока выполняются определённые куски (даже всякие там проверки if занимают время). Хотя можно проверять не на точное совпадение, на интервал +/-, который, допустим, определяется величиной epsilon.

В любом случае сброс по таймеру происходит программно, а не аппаратно, что грузит ЦП. Наверное, именно это имел в виду AVR, говоря
если, конечно, вам не нужно высокой частоты срабатывания ваших "виртуальных" таймеров

Так, мысли вслух. Если мыслю неправильно, надеюсь, умные коты меня поправят.

Хотя остаётся вопрос: когда сбрасывать аппаратный таймер, по которому работают остальные?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

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

Мой уютный бложик... заходите!
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Всё зависит от задачи, выполняемой контроллером. Но одно можно сказать точно: абсолютно любая задача в пределах этой темы решаема на 100%. Просто такие вещи надо делать под конкретную задачу.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
GNN
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Вт ноя 04, 2008 12:44:24

Сообщение GNN »

Я конечно не телепат, но наверное дело касается трехфазного тиристорного привода, где нужно раздельно управлять углом открывания тиристоров каждого полупериода - итого 6 полупериодов.
Я как-то выкладывал тут в разделе литературы ссылки 2х книжек об этом по теме "СИФУ на AVR".
Аватара пользователя
kybertech
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Пт окт 31, 2008 02:54:28
Откуда: Украина
Контактная информация:

Сообщение kybertech »

GNN писал(а):Я конечно не телепат, но наверное дело касается трехфазного тиристорного привода, где нужно раздельно управлять углом открывания тиристоров каждого полупериода - итого 6 полупериодов.
Я как-то выкладывал тут в разделе литературы ссылки 2х книжек об этом по теме "СИФУ на AVR".


Прямо в дырочку попал ) :)) :))

Вчера вроде как разобрался с этим делом. Сдвиг нормальный по фазам при определенной частоте сети. Теперь хочу сюда прицыпить регулятор частоты.
Аватара пользователя
maglev
Потрогал лапой паяльник
Сообщения: 316
Зарегистрирован: Пт апр 17, 2009 22:45:42
Откуда: Minsk
Контактная информация:

Сообщение maglev »

Я может не в тему, но в более удобной mega48/88/168 шесть прерываний и шесть выходов OCR-ов, вполне независимых.
Я в одном похожем макете использовал такое, хотя потом отказался по другим причинам.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»