6 программных, независимых друг от друга таймеров в Atmega8
- kybertech
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Пт окт 31, 2008 02:54:28
- Откуда: Украина
- Контактная информация:
6 программных, независимых друг от друга таймеров в Atmega8
Народ подскажите кто сталкивался с такой задачей:
- Как на основе одно системного таймера в МК Atmega8 или Atmega16 можно создать 6 и более независимых друг от друга таймеров. У кого какие есть идеи по этому поводу ? А может кто и владеет таким куском программы. Да забыл сказать - пишу на С.
заранее спасибо!
- Как на основе одно системного таймера в МК Atmega8 или Atmega16 можно создать 6 и более независимых друг от друга таймеров. У кого какие есть идеи по этому поводу ? А может кто и владеет таким куском программы. Да забыл сказать - пишу на С.
заранее спасибо!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
это элементарная задача, если, конечно, вам не нужно высокой частоты срабатывания ваших "виртуальных" таймеров. просто создаете массив значений, с которыми сравниваете текущее значение счетчика таймера в прерывании таймера и при совпадении вызываете определенную функцию или что-то там нужное делаете.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- kybertech
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Пт окт 31, 2008 02:54:28
- Откуда: Украина
- Контактная информация:
ARV писал(а):это элементарная задача, если, конечно, вам не нужно высокой частоты срабатывания ваших "виртуальных" таймеров. просто создаете массив значений, с которыми сравниваете текущее значение счетчика таймера в прерывании таймера и при совпадении вызываете определенную функцию или что-то там нужное делаете.
допустим совпало первое значение в масиве и начался выполняться кусок программы по условию. Таким образом выполнение таймера приостанавливается на время пока выполниться действие. А это уже и есть зависимость таймеров друг от друга. Или я не прав ?
Попроавте если не прав.
- Pooher
- Мучитель микросхем
- Сообщения: 491
- Зарегистрирован: Вс янв 07, 2007 01:45:48
- Откуда: Российская Федерация, будь она неладна...
. Таким образом выполнение таймера приостанавливается на время пока выполниться действие.
Можно, и даже нужно, не "выполнять действие", в смысле некую подпрограмму, а выставлять флаг наступления события, и обрабатывать его (флаг) в главном цикле.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
- Synergetik
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт фев 28, 2008 23:54:35
- Откуда: Воскресенск, МО
- Контактная информация:
Интересная тема. Присоединяюсь.
Допустим, сработал флаг. Началось выполнение подпрограммы. Тогда в определённых её точках (где нужна продолжительная монополизация ЦП) нужно вызывать выполнение подпрограммы, проверяющей совпадение? И есть вероятность пропустить нужный номер импульса, пока выполняются определённые куски (даже всякие там проверки if занимают время). Хотя можно проверять не на точное совпадение, на интервал +/-, который, допустим, определяется величиной epsilon.
В любом случае сброс по таймеру происходит программно, а не аппаратно, что грузит ЦП. Наверное, именно это имел в виду AVR, говоря
Так, мысли вслух. Если мыслю неправильно, надеюсь, умные коты меня поправят.
Хотя остаётся вопрос: когда сбрасывать аппаратный таймер, по которому работают остальные?
Pooher писал(а):Можно, и даже нужно, не "выполнять действие", в смысле некую подпрограмму, а выставлять флаг наступления события, и обрабатывать его (флаг) в главном цикле.
Допустим, сработал флаг. Началось выполнение подпрограммы. Тогда в определённых её точках (где нужна продолжительная монополизация ЦП) нужно вызывать выполнение подпрограммы, проверяющей совпадение? И есть вероятность пропустить нужный номер импульса, пока выполняются определённые куски (даже всякие там проверки if занимают время). Хотя можно проверять не на точное совпадение, на интервал +/-, который, допустим, определяется величиной epsilon.
В любом случае сброс по таймеру происходит программно, а не аппаратно, что грузит ЦП. Наверное, именно это имел в виду AVR, говоря
если, конечно, вам не нужно высокой частоты срабатывания ваших "виртуальных" таймеров
Так, мысли вслух. Если мыслю неправильно, надеюсь, умные коты меня поправят.
Хотя остаётся вопрос: когда сбрасывать аппаратный таймер, по которому работают остальные?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
во-первых, традиционно вопрос задан так, что отвечающим больше гадать приходится, чем давать нормальные советы.
во-вторых, если надо, то можно и флаги ставить, можно и функции вызывать, можно и контексты задач переключать - все можно. но вопрос "нужно ли?" остается открытым.
так как таймеры программные, как ни крути, процессор они грузить будут.
истинного параллелизма вы не получите и с кучей аппаратных таймеров - прерывание в любой момент только одно обслуживается. если начнете разрешать прерывания до завершения текущего обработчика - запросто можете получить кучу гемора... тут надобно уменье
однако меня очень интересует: зачем может понадобиться куча таймеров? просто любопытно...
во-вторых, если надо, то можно и флаги ставить, можно и функции вызывать, можно и контексты задач переключать - все можно. но вопрос "нужно ли?" остается открытым.
так как таймеры программные, как ни крути, процессор они грузить будут.
истинного параллелизма вы не получите и с кучей аппаратных таймеров - прерывание в любой момент только одно обслуживается. если начнете разрешать прерывания до завершения текущего обработчика - запросто можете получить кучу гемора... тут надобно уменье
однако меня очень интересует: зачем может понадобиться куча таймеров? просто любопытно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Pooher
- Мучитель микросхем
- Сообщения: 491
- Зарегистрирован: Вс янв 07, 2007 01:45:48
- Откуда: Российская Федерация, будь она неладна...
Всё зависит от задачи, выполняемой контроллером. Но одно можно сказать точно: абсолютно любая задача в пределах этой темы решаема на 100%. Просто такие вещи надо делать под конкретную задачу.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
- kybertech
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Пт окт 31, 2008 02:54:28
- Откуда: Украина
- Контактная информация:
GNN писал(а):Я конечно не телепат, но наверное дело касается трехфазного тиристорного привода, где нужно раздельно управлять углом открывания тиристоров каждого полупериода - итого 6 полупериодов.
Я как-то выкладывал тут в разделе литературы ссылки 2х книжек об этом по теме "СИФУ на AVR".
Прямо в дырочку попал )
Вчера вроде как разобрался с этим делом. Сдвиг нормальный по фазам при определенной частоте сети. Теперь хочу сюда прицыпить регулятор частоты.