|
|
  |
Помогите с подсчетом импульсов |
|
|
|
Apr 21 2009, 08:15
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 26-02-09
Пользователь №: 45 406

|
В общем начал изучать микроконтроллеры AVR, остановился на ATMega16 + IAR как среда разработки. Ну естественно, зародилась идея построить для своей ВАЗ2105 приборную доску, но не могу победить никак счетчик импульсов (зажигание, скорость). Точнее я даже не представляю как подступиться к выполнению этой задачи. Смотрел в соседних ветках, там все на ассемблере, а я в нем, как в нотной грамоте - полный ноль. Люди, помогите пожалуйста кодом для С, хотябы для примера
|
|
|
|
|
Apr 21 2009, 10:44
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 26-02-09
Пользователь №: 45 406

|
Да таймер запустить получается, не получается его тактировать извне
|
|
|
|
|
Apr 22 2009, 15:28
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 26-02-09
Пользователь №: 45 406

|
А для чего тогда вход ICP?
А если источников импульсов больше чем 2? Можно это решить каким-то другим способом? не через счетчики аппаратные
|
|
|
|
|
Apr 23 2009, 19:05
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 26-02-09
Пользователь №: 45 406

|
Цитата(Iptash @ Apr 22 2009, 20:41)  Можно програмно опрашивать задействованные тобой входа на предмет смены уровня сигнала и соответсвенно суммировать или вычитать какую то переменную, но есть 100% вероятность потери импульсов, можно задействовать входа внешнего прерывания и по прерыванию также что нибуть делать, но здесь большие ограничения по максимальной входной частоте. А вообще по AVR очень много описания и примеров на Русском. А можно поподробнее, как это? Хотя бы алгоритм, пожалуйста
|
|
|
|
|
Apr 23 2009, 20:03
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
Вот пример программного опроса двух портов процессора: Код //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; }
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|