Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Буду краток. Сделать можно так:

Отправлено leon 04 июня 2008 г. 03:12
В ответ на: Господа помогите в каскадировании таймеров в AVR. Здесь уже писалось про это но мутно.>> отправлено <font color=gray>VasilyS</font> 03 июня 2008 г. 23:47

Ну что-ж, из Вашего вопроса не совсем понятно что вы хотите.
Попробую угадать и задать вопрос себе сам вместо Вас подробнее.

В меге128 разрядности одного 16-разрядного счетчика мне не
достаточно для определения момента возникновения какого-то
события. Было-бы не плохо каскадировать два (1-й и 3-й) счетчики
для этой цели. У кого есть какие-нибудь соображения, как это сделать?

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

Понятно, что старшие(хотя-бы однин старший) разряды младшего
счетчика должны перыкрываться с младшими(хотя-бы одним младшим
разрядом) старшего счетчика.
В момент возникновения события мы получаем два 16-
битных значения регистров захвата ICR3 и ICR1.

Тогда для получения результирующего значения необходимо:
-если перыкрывающиеся разряды ICR младшего и старшего счетчиков
равны, то к 16 разрядам младшего счетчика дописиваем оставшиеся
(неперыкрывающиеся) разряды ICR старшего счетчика;
-если перыкрывающиеся разряды ICR младшего и старшего счетчиков
неравны, то к 16 разрядам младшего счетчика дописиваем оставшиеся
(неперыкрывающиеся) разряды ICR старшего счетчика, предварительно
увеличенного на единицу програмно.

Обеспечивать такое перекрытие придется скорее-всего програмно.
Можно наверное сделать так: аппаратно соединить (и настроить для таковой
работы) выход OC1B и вход T3. Как только после прохождения TCNT1 значения
OCR1B равного 0x7FFF выход OC1B перейдет в "лог.0", значение TCNT3
увеличится на "1" (с досадным опозданием конечно, возможно от этого опоздания можно вообще избавиться подкорректировав соответствующие значения OCR1B). Тут-же обработчик
прерывания TIMER1_COMPB должен подготовить очередное увеличение на "1"
значения TCNT3. А именно перевести выход обратнов "лог.1" (
при помощи FOC1B), в OCR1B загрузить 0xFFFF. Дальше все
аналогично. При этом, за за один период TCNT1, TCNT3 увеличится на "1"
дважды и в нужные моменты, что и требовалось. Правда перекрывающиеся
разряды могут быть и не в фазе, тогда придется выдать лишний импульс
для фазировки.

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

Если Вас устроит 26-разрядный результат, то можно сделать наверное
намного проще: Просто запустить один счетчик без делителя, другой
с делителем на CLK/1024. Определив предварительно смещение младшего
счетчика и предделителя для учета его (смещения) перед объединением
разрядов ICR1 и ICR3.

Вот такие мои соображения по поводу заданого Вами (мною) мне вопроса.

Желаю успехов.


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
скольким Омам равен эквивалент двух резисторов по 10 Ом, соединённых параллельно?:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru