итого. Два часа с осцилом. Тестил самую первую прогу. Питание на проц появляется с пол оборота. Первый импульс от датчика - и искра. Потом еще два оборота - по графику. Последний оборот - оборот упал до 150мс, т.е. менее 500обмин, искра ушла в + около 15град. Но решил, что обороты менее 500, бог с ними .... пока.
Начал удалять из программы все плюшки и лишнее. И каждый раз тестируя.
В итоге осталось -
;пришел ипмульс датчика
sbis PinD,0 ;выполнить если бит порта "0"
rcall impuls ;посчитали и вернулись
sbrs R20, 5 ;if pinX,n='0' then do
rjmp main ; по новой сначала ждем импульс еще один
sbrs R20, 7 ;if pinX,n='0' then do
rcall norm ; в подпрограмму задержки расчета
rjmp main
nop
;----------
;---------- только подпрограммы--------------------
;=совпадение сравнения OCR1A, 16-бит счетчика=
timer1compare:
;совпадение угла опережения, рассчетная искра
sbrs R20, 4 ;if pinX,n='0' then do
reti
sbi PortC,0 ;"1"на выход "искра"
andi R20, 0b11101111;cbiR20/4, контроль
reti
;====импульс вмт датчика====
impuls:
sbrc R20, 6 ;if pinX,n='1' then do
ret ;если уже был счет то выход
in R10, TCNT1L
in R9, TCNT1H ;считываем показания счетчика
clr R16
out TCNT1H, R16
out TCNT1L, R16 ;обнуляем счетчик
ori R20, 0b01100000 ;sbiR20/6,5, контроль
ret
если я что то тут меняю, искры вообще нет. И было даже как-то, что искра вообще через раз по импульсу датчика. Все эти РОН, Я в этом не понимаю. Тут ошибка в программе. Или вообще надо переписывать код-идею программы счета .
Я устал. Попробую только поиграться графиком под свой мотор на будущее.
Ждем автора, или учим ассемблер
