roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 08:52

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Счётчик импульсов
СообщениеДобавлено: 31 янв 2010, 18:30 
Не в сети
Аватара пользователя

Зарегистрирован: 28 сен 2009, 21:54
Сообщения: 262
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович
Доброго времени суток !!!
Хочу сделать счётчик импульсов с катушки зажигания машины.
Счётчик должен считать импульсы и выводить результат на семисегментные светодиодные индикаторы.
Щас схему нарисую и выложу :)
Помогите пожалуста с програмной частью, а именно с функцией подсчёта импульсов и инециализацией таймеров.
Просто я много почитал, но не совсем понял как это работает...(я про начальные настройки таймеров и другими настройками)
На словах алгоритм работы программы я представляю так :
Таймер_1 считает количество импульсов ;
Таймер_2 отсчитывает время (N секунды) по истечении которого вызывается прерывание таймера_1;
Процедура обработки прерывания:
{
читаем значение таймера_1 и присваиваем некой пременной;
выводим значение этой переменной на индикаторы;
}

Прошу извенить меня если сморозил какую-нибудь чушь, так как я только учусь работать с МК.
Помогите с написанием кода, пожалуста !!!
Зарание очень благодарен !!!

p.s. я использую контроллер ATmega8


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 31 янв 2010, 20:09 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Достаточно одного таймера и другой алгоритм.
На одну из ногу прерываний (пусть это будет INT0) поступает сигнал импульса. С каждым новым импульсом у нас счетчик импульсов увеличивается на N=N+1
Таймер настроен выводить значения каждые 10 секунд. Т. е. по истечении 10 сек, наступает прерывание по переполнению таймера и он выводи на индикатор значение N, а затем обнуляет N.
И все повторяется по новой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 31 янв 2010, 22:11 
Не в сети
Аватара пользователя

Зарегистрирован: 28 сен 2009, 21:54
Сообщения: 262
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович
Понятно. Спасибо !!!
А можно вас попросить написать кусочек кода который вызывает это прерывание INT0, для примера.
хотябы на словах: что там нужно инициализировать и как настроить таймер чтобы он выдавал прерывание каждые 10 секунд ???
И ещё такой вопрос: что такое маска совпадения ?
Зарание спасибо !!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 31 янв 2010, 22:20 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
На CVavr пойдет?
Какой кварц?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 31 янв 2010, 22:51 
Не в сети
Аватара пользователя

Зарегистрирован: 28 сен 2009, 21:54
Сообщения: 262
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович
Да, будет очень здорово !!!
я сейчас начал изучать CVAVR, а раньше WINAVR пользовался :)
Кварц на 8 Мгц.
Огромное спасибо !!!!!!!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 01 фев 2010, 10:18 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Вот пример для срабатывания 16-битного таймера по прерыванию каждые 1000 мс (1 с).
Внизу в архиве таблица, создал ее давно какие там формулы не помню. Просто вбиваешь внизу в зеленое поле частоту кварца в Гц, а ниже время в мс которое должен отсчитать таймер.

Добавлено спустя 8 минут 56 секунд:
Цифры в желтом поле переводишь в 16-иричную систему и забиваем в поле Value.


Вложения:
таймера.zip [2.86 КиБ]
Скачиваний: 4
123.JPG
123.JPG [ 31.26 КиБ | Просмотров: 3983 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 09 фев 2010, 14:54 
Не в сети
Аватара пользователя

Зарегистрирован: 28 сен 2009, 21:54
Сообщения: 262
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович
Подскажите пожалуста !!!
Сделал так чтобы по прерыванию INT0 переменная N увеличивалась на еденицу.
Таймер-1 настроил так чтобы по совпадению с регистром А (Comp. A )вызывалось прерывание которое
сравнивает N с записаными числами и зажигает соответствующие светодиоды... После чего N обнуляется и прерывание заканчивается.
***
Проблема состоит в том , что всё работает очень криво, даже можно сказать вообще не работает :(
Диодики мигают сами по себе и как-то не зависит от того, сколько раз я подам сигнал на INT0
Я хотел узнать в чём может быть проблема ???
Может быть в "дребезге контактов" ???
Существуют какие-нибудь приорететы в прерываниях? ...может пока подаётся сигнал на прерывание INT0 срабатывает прерывание таймера по опросу переменной N. Эти прерывания могут конфликтовать между собой ???
Зарание спасибо большое !!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 09 фев 2010, 15:46 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Сигнал на INT0 откуда идет, если с кнопки, то будет дребезг, нужно будет паузу выдерживать 10-100мс.
Приоритеты в прерывания существуют.
Прерывания между собой не конфликтуют.
Код бы выложил с каментами где что.
И зачем компаратор используется в прерывании?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 09 фев 2010, 22:57 
Не в сети
Аватара пользователя

Зарегистрирован: 28 сен 2009, 21:54
Сообщения: 262
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович
Вот исходник написаный в CVAVR


Вложения:
Комментарий к файлу: исходник
_1.rar [2.95 КиБ]
Скачиваний: 5
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 09 фев 2010, 23:54 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
Насколько я понимаю, что-бы разрешить прерывание от 1-го таймера надо писАть TIMSK=0x04; ну или TIMSK=0x14;

Добавлено спустя 2 минуты 20 секунд:
Если сигнал на внешнее прерывание идёт с кнопки, то надо настроить прерывание по нарастающему фронту сигнала, и обязательно защитится от дребезга контакта.

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 10 фев 2010, 15:18 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Maxiik, сигнал по импульсу по верхнему уровню или по нижнему?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 10 фев 2010, 17:38 
Не в сети
Аватара пользователя

Зарегистрирован: 28 сен 2009, 21:54
Сообщения: 262
Откуда: Петербург
прог. языки: С++
ФИО: Бирюк Максим Викторович
Master, по нижнему уровню...( я так понял, что можно замыкать "-" на INT0 с помощью транзистора ?)
Я просто не совсем понимаю суть спадающего и нарастающего фронтов (((


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 11 фев 2010, 07:59 
Не в сети

Зарегистрирован: 24 ноя 2008, 19:43
Сообщения: 1054
Откуда: Казань
напруга идет в верх- нарастающий и именно в момент нарастания происходит считывание команды, для ниспадающего командой считается понижение напруги на контакте .. это вродебы называется по фронту импульса...
есть еще запуск при достижения заданого уровня напряжения- это уже вроде бы от логичесого уровня, а не по фронту..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 11 фев 2010, 11:57 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
Maxiik писал(а):
Я просто не совсем понимаю суть спадающего и нарастающего фронтов (((

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

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Счётчик импульсов
СообщениеДобавлено: 11 фев 2010, 13:41 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Вот пример настройки прерывания по спадающему уровню. И прерывание таймера1 через каждые 5 сек.
Кварц 8мгц.


Вложения:
mega8.JPG
mega8.JPG [ 48.13 КиБ | Просмотров: 3827 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO