Законченный проект:
viewtopic.php?f=2&t=3912&p=121238#p121238
Доброго времени суток, появилась мысль сделать бортовой комп, чтобы расход топлива считал, пробег и т.п.
Имеется Atmega8, LCD. Совсем немного опыта программирования на СИ, около месяца
Застрял на подсчете времени открытия форсунки, оно может быть ориентировочно от 0,5мс до 10мс.
Использовал TIMER1 для подсчета времени открытия (одно переполнение при текущих настройка составляет 1мс), не получается отловить остаток таймера на момент прерывания INT1 (Провод от форсунки, +12В= открытие форсунки).
Запущены 2 таймера, один считает время для скорости (с ним все нормально вроде), второй время для впрыска.
//FuelCounter - увеличивается на 1 за каждое переполнение TIMER1
interrupt [EXT_INT1] void ext_int1_isr(void)
OstCountFuel=TCNT1; // Остаток таймера на момент прерывания
TCNT1H = 0xFF; //устанавливаем максимальное значение (255) при котором произойдет прерывание
TCNT1L = 0x83; // начинаем считать с 131, вроде бы...этой строчкой и предыдущей сбрасываем таймер и он начинает считать заново или я ошибаюсь?
Fuel = ((FuelCounter*125)+(OstCountFuel-131))*10 ; // Длительность открытия форсунки в тиках таймера*10, 131 я правильно вычитаю?
FuelCounter=0;
OstCountFuel=0;
Fuel = (Fuel/125) ;// должно по идее получиться в мс*10, но получается фигня.
например ставлю в протеусе длительность импульса
1мс получается прыгающие 6-7-8-9
2мс 17-18-19
ладно, мог там с периодом таймера напутать. но если выставить
0,5мс получается уже 523
P.S. забыл совсем, все это безобразие в CodeVisionAvr