реклама на сайте
подробности

 
 
> Счетчик на Mega128
Ojo
сообщение Jun 26 2008, 15:54
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 16-06-05
Пользователь №: 6 070



Счетчик на Mega128

Пожалуйста, подскажите, как сделать следующую вещь? Есть линия для анализа. На ней могут быть логический ноль (почти всегда) или логическая 1 (редко, небольшими импульсами различной длины от 1 мсек до 10 мсек). Задача состоит в том, чтобы подсчитывать какова длительность всех импульсов логической 1 за текущую прошедшую секунду. Частота Меги 16MHz. Точность измерений:10% устроит.

Самое очевидное решение. Повесить исследуемую линию на любую ножку прерывания Мегию. При возникновении на ней логической 1 (и как следствия прерывания) засекать время (организовав внутренний таймер), При возникновении логического 0 на ней подсчитывать время импульса и прибавлять к переменной ВСЕГО.

Данное решение не подходит. Т.к. в силу специфики прошивки устройства Мега может запретить прерывания на длительное время (до 10 мсек).

Наверняка есть возможность решить эту задачу через таймеры/счетчки.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ojo
сообщение Jun 26 2008, 16:56
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 16-06-05
Пользователь №: 6 070



Спасибо за ответы. Жалко что у меги нет возможности в таймере по одному фронту записать значение счетчика в один регист, а по второму во второй. Т.к. оба предложенных решения требуют задействования 2-х ножек Мега.

Сообщение отредактировал Ojo - Jun 26 2008, 16:56
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 27 2008, 09:49
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Ojo @ Jun 26 2008, 19:56) *
Спасибо за ответы. Жалко что у меги нет возможности в таймере по одному фронту записать значение счетчика в один регист, а по второму во второй. Т.к. оба предложенных решения требуют задействования 2-х ножек Мега.

Можно выбрать, по какому фронту захват делать. А после первого захвата перенастроить на другой фронт.


Цитата(Maik-vs @ Jun 27 2008, 12:23) *
Таймер даёт прерывания через, например 1 миллисекунду. Точность 0.1%, всё синхронно

читаем задание:
Цитата
редко, небольшими импульсами различной длины от 1 мсек до 10 мсек

ну и где, спрашивается, "Точность 0.1%, всё синхронно"?
в лучшем случае 10%, а то и вообще импульс мимо пролетит.
не забываем ещё, что
Цитата
в силу специфики прошивки устройства Мега может запретить прерывания на длительное время (до 10 мсек)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 27 2008, 09:57
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Maik-vs @ Jun 27 2008, 12:23) *
Есть такая возможность! Подаёте свой сигнал на вход прерывания, настраиваете реакцию на оба фронта. В обработчике первым делом ветвитесь по уровню сигнала - какой фронт. И вперёд.


Цитата(MrYuran @ Jun 27 2008, 12:43) *
Можно выбрать, по какому фронту захват делать. А после первого захвата перенастроить на другой фронт.
Отвечающие, по-моему, забывают, что проблема в том, что прерывания могут быть запрещены на время бОльшее, чем длительность импульса...

Цитата(Ojo @ Jun 26 2008, 19:56) *
оба предложенных решения требуют задействования 2-х ножек Мега.
Наверное, на МК много чего подключено, раз двух ножек жалко. Тогда, может быть, поручить эту задачу отдельному МК (tiny) и подцепить его к m128 каким-нибудь уже используемым интерфейсом, позволяющим работать с несколькими устройствами (например, SPI)?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 11:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016