Вс май 01, 2016 09:01:29
Вс май 01, 2016 09:11:38
Вс май 01, 2016 10:05:04
Вс май 01, 2016 10:09:42
Arwood писал(а):Но сам-то - попробовал? Убедился? Попробуй отключи теперь и покатайся пару дней на стоковом. Убедишься, с ешё большей очевидностью. (и это при том, что график ещё не доведён)
pcb писал(а):Памяти много, но и ступенек почему то много.
Vavzel писал(а):...но увы упирается в 4200 и все такое ощущение что зажигание не дает !!
...как я понял на данной системе зажигания искра формируется два раза за такт !
...а еще залил ваши углы ни чего не корректировал и не изменял
Vavzel писал(а):какой максимальный угол допускается???
Вс май 01, 2016 10:13:44
Вс май 01, 2016 10:58:36
Вс май 01, 2016 12:48:54
Вс май 01, 2016 12:50:23
Вс май 01, 2016 13:14:31
Flash.#13 писал(а):Приведенная картинка не прояснила понимания, что плохого в "многости" ступенек?
Вс май 01, 2016 14:59:16
Вс май 01, 2016 16:40:46
Вс май 01, 2016 16:53:40
Вс май 01, 2016 17:32:45
Вс май 01, 2016 18:11:20
Вс май 01, 2016 18:39:14
Вс май 01, 2016 20:08:09
Flash.#13 писал(а):Сама задержка рассчитывается "на лету", исходя с данных этих ступенек, поэтому "лестничной" работы в реальном режиме не будет.
.
.
.
brsh rpm1k ;если больше или равно
cpi R21, 110 ;сравнение РОН с контстантой
brsh rpm0k8 ;если больше или равно
cpi R21, 60 ;сравнение РОН с контстантой
brsh rpm0k6 ;если больше или равно
clr R26 ;если 500 и меньше об/мин
rjmp RpmEnd ;всего 32строки
////////////////////////////////////////////////////////
rpm19k5: ;обороты
ldi R26, 0x1F ;задаем адрес ОЗУ "lowХ"
rjmp RpmEnd ;метка "дальше"
rpm16k7:
ldi R26, 0x1E
rjmp RpmEnd
rpm14k6:
ldi R26, 0x1D
rjmp RpmEnd
.
.
.
rpm1k5:
ldi R26, 0x05
rjmp RpmEnd
rpm1k2:
ldi R26, 0x04
rjmp RpmEnd
rpm1k:
ldi R26, 0x03
rjmp RpmEnd
rpm0k8:
ldi R26, 0x02
rjmp RpmEnd
rpm0k6:
ldi R26, 0x01
rjmp RpmEnd
;адрес ОЗУ "lowХ" определен
;задействованно ОЗУ 0х0100-0х011F,32строки
RpmEnd:
;адрес ОЗУ "HighХ" определен, чтение ОЗУ
ld R25, X ;байт из ОЗУ-R27:26 загружается в РОН25
;проверим на нулевое значение, что
;соответствует оборотам более 4к
;при этом искра по датчику уоз,20°
cpi R25, 0x01 ;"1"
brlo iskra ;оборотам более 4к,искра без задержки
mov R4, R25 ;РОН25 неизменен, множитель УОЗ
;далее рассчет УОЗ
clr R5 ;очистим старший разряд
mov R6, R9 ;копируем 1/256,(0.2%) от счета 16-бит
lsr R6 ;1/2,шаг смены угла 720°/512=1.4°
;========умножение:R5R6*R4=R7R8=====
clr R7 ;очистка старшего байта результата
clr R8 ;очистка младшего байта результата
sum: ;цикл суммирования
add R8,R6 ;прибавление к младшему биту результата содержимого
adc R7,R5 ;прибавление к старшему биту результата с учетом переноса
dec R4 ;вычитание единицы из регистра
brne sum ;если результат не равен 0, то вернуться к метке sum
;теперь имеем R7R8 значение задержки
;запишем в регистр сравнения 16-бит счетчика
out OCR1AH, R7 ;записываем задержку HighByte
out OCR1AL, R8 ;записываем задержку LowByte
ori R20, 0b00010000 ;sbiR20/4, контроль
andi R20, 0b11011111;cbiR20/5, контроль
ret
Вс май 01, 2016 20:52:42
Пн май 02, 2016 13:45:22
Vavzel писал(а):извините если обидел
pcb писал(а):...Весь код какой то неоптимальный, как будто кодогенератор писал.
Пн май 02, 2016 23:02:30
Flash.#13 писал(а):Не знаю что такое кодогенератор, и как он может писать код, если такое существует, то зачем тогда программировать вообще?
Flash.#13 писал(а):Алгоритм работает следующим образом
Flash.#13 писал(а):Правда за последний год узнал много нового, и теперь могу усовершенствовать код
Ср май 04, 2016 07:53:42