Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с подсчетом импульсов
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Neytrino
В общем начал изучать микроконтроллеры AVR, остановился на ATMega16 + IAR как среда разработки. Ну естественно, зародилась идея построить для своей ВАЗ2105 приборную доску, но не могу победить никак счетчик импульсов (зажигание, скорость). Точнее я даже не представляю как подступиться к выполнению этой задачи. Смотрел в соседних ветках, там все на ассемблере, а я в нем, как в нотной грамоте - полный ноль. Люди, помогите пожалуйста кодом для С, хотябы для примера
Herz
Начните с тщательного изучения документации на контроллер. Когда принцип работы таймеров станет понятным, решение возникнет само собой. Может быть, пригодится это.
Neytrino
Да таймер запустить получается, не получается его тактировать извне
Палыч
Цитата(Neytrino @ Apr 21 2009, 13:44) *
не получается его тактировать извне
Вы код приведите в котором это не получается. Кто-то, может, подскажет - где ошибка.
Herz
Цитата(Neytrino @ Apr 21 2009, 12:44) *
Да таймер запустить получается, не получается его тактировать извне

Ну, причина может быть только одна - не разобрались с настройками. Если тактируете изнутри - всё работает?
Neytrino
так пока что-то наклевывается, да бы не спугнуть - молчу smile.gif Вопрос - а если мне нужно несколько , скаже 2 таких входа? что делать? Вход на тактирование только один вроде sad.gif
Палыч
Цитата(Neytrino @ Apr 22 2009, 11:07) *
Вопрос - а если мне нужно несколько , скаже 2 таких входа? что делать?
В m16 таких входов как раз - два. Правда: один вход (Т0) - 8-миразрядного счетчика, другой (Т1) - 16-тиразрядного.
mdmitry
Цитата(Herz @ Apr 21 2009, 14:30) *
Начните с тщательного изучения документации на контроллер. Когда принцип работы таймеров станет понятным, решение возникнет само собой. Может быть, пригодится это.

Учтите, что это ресурсоёмко, так как ориентировано на максимально широкий круг применения часто с избыточной функциональностью. НО идеи заложены хорошие и познакомиться с исходными кодами очень полезно.
Neytrino
А для чего тогда вход ICP?

А если источников импульсов больше чем 2?
Можно это решить каким-то другим способом? не через счетчики аппаратные
Iptash
Цитата(Neytrino @ Apr 22 2009, 19:28) *
А для чего тогда вход ICP?

А если источников импульсов больше чем 2?
Можно это решить каким-то другим способом? не через счетчики аппаратные


Можно програмно опрашивать задействованные тобой входа на предмет смены уровня сигнала и соответсвенно суммировать или вычитать какую то переменную, но есть 100%
вероятность потери импульсов, можно задействовать входа внешнего прерывания и по прерыванию также что нибуть делать, но здесь большие ограничения по максимальной входной частоте. А вообще по AVR очень много описания и примеров на Русском.
Neytrino
Цитата(Iptash @ Apr 22 2009, 20:41) *
Можно програмно опрашивать задействованные тобой входа на предмет смены уровня сигнала и соответсвенно суммировать или вычитать какую то переменную, но есть 100%
вероятность потери импульсов, можно задействовать входа внешнего прерывания и по прерыванию также что нибуть делать, но здесь большие ограничения по максимальной входной частоте. А вообще по AVR очень много описания и примеров на Русском.

А можно поподробнее, как это? Хотя бы алгоритм, пожалуйста
AndreyKeil
Вот пример программного опроса двух портов процессора:
Код
//Cnt0,Cnt1 - счётчики изменений портов,
//PINB - порт B процессора,

void main() {
unsigned char tmp;

    PortXXX = PINB & 0x3;   //считываем только два бита порта
    tmp = PortXXX ^ Chang;
    if (tmp & 01) {
        Cnt0++;    //... здесь произошло изменение порта PB.0
    }

    if (tmp & 02) {
        Cnt1++;    //... здесь произошло изменение порта PB.1
    }

    Chang = PortXXX;
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.