Собран натурный макет:) похоже даже, что все работает, теперь дело за отладкой прошивки на моторе 🙂
по габаритам может даже на место коммутатора встанет, поприкидываем 🙂
PS и да, руки из нижнего плечевого пояса растут. так что smd пайка страшненькая
На текущий момент пока вот такое вырисовывается (это все дичайшая alfa версия, для обсуждения!)
Схема:
С1 и PG — сенсор CYP1 в трамблере
+12 и G — питание
1,2,3,4 — выход-триггер на катушки
IGN — сигнал зажигания от ECU
TACH — выход тахометра
VCC, GND, SCK, MSIO, MOSI, RST — выходы на программатор
Плата:
из трамблера выкидывается: бегунок, катушка, коммутатор, плата ставится на место катушки (там с запасом места, в теории можно на место коммутатора пристроить, надо будет по мозговать.
Код (на drive нельзя <pre> сделать, так что код — боль, смотреть: icelord.net/wordpress/archives/16569):
/*****************************************************
Project : Ab0VE Tech Coil on Plug I4 Controller
Version : 0.1
Author : icelord
MCU : ATTiny26
*****************************************************/
#include <avr /io.h>
#include </avr><avr /interrupt.h>
// OUTPUT
#define IGNITION1 PA0
#define IGNITION2 PA1
#define IGNITION3 PA2
#define IGNITION4 PA3
#define LED PB6
#define TACHO PA5
// INPUT
#define CYP1 PA4
#define IGN PB5
uint8_t CYLINDER=0;
uint8_t WASFIRE=0;
uint8_t INFIRE=0;
uint8_t WASCYP=0;
ISR( __vectorPCINT4, ISR_NOBLOCK) // PCINT4 — CYP PA4
{
// Check CYP
if ( ((PINA & (1 < < 4))==1 ) && (!WASCYP)) { // CYP
CYLINDER=1;WASCYP=1;
}
if ( ((PINA & (1 << 4))==0) && (WASCYP)) { // GONE CYP
WASCYP=0;
}
}
ISR( __vectorPCINT13, ISR_NOBLOCK) // PCINT13 — IGN PB5
{
// Check FIRE
if ( ((PINB & (1 << 5))==1) && (!INFIRE)) { // Start FIRE
INFIRE=1;
}
if ( ((PINB & (1 << 5))==0) && (INFIRE)) { // GONE FIRE
INFIRE=0;
}
}
int main(void)
{
uint8_t LEDSTATUS=0;
DDRB = 0b01000000;
DDRA = 0b00101111;
PORTB |= _BV(LED); // LED ON on start
while (1)
{
if (INFIRE==1)// Fire coil?
{ WASFIRE=1;
PORTA |= _BV(TACHO);
switch (CYLINDER){ // Set fire for required coil 1-3-4-2
case 1: PORTA |= _BV(IGNITION1);
case 2: PORTA |= _BV(IGNITION3);
case 3: PORTA |= _BV(IGNITION4);
case 4: PORTA |= _BV(IGNITION2);
}
} else
{
if (WASFIRE==1){ // ready for next cylinder?
PORTA=0; // disable all coils and TACHO for some reasons
WASFIRE=0;
CYLINDER++;
if (CYLINDER>4) { // only 4 cylinder model 🙂
CYLINDER=1;
if (LEDSTATUS==0) {// Change LED on each _FULL_ cycle
PORTB &= ~_BV(LED); // LED ON
LEDSTATUS=1;
} else {
PORTB |= _BV(LED); // LED ON
LEDSTATUS=0;
}
}
} // was fire
}
} // main loop
}
Правки-идея-предложения — welcome! )
В замен умершего одометра делаю цифровой на Arduino Nano + 2х HCMS-2973
данные будут храниться во FRAM FM24C16, циклов перезаписи должно хватить )
так же будет управление подсветкой приборки (indiglo) и стрелок (сверх яркие светодиоды)
продолжаю с доп приборами, пока из реализованных идей, иконочка на OLED (нашел ОЧЕНЬ близкий по свечению с VFD) экран между показометрами,
(указатель топлива — 21 риска/указатель температуры — 7 рисок несимметричных)
давление масла/температура масла
вольтметр/[пусто]
[пусто]/температура тормозов (PIR датчик MLX90614 на грязевой щиток — будет и точно и просто)
топливная смесь (AFR)/температура выпуска (EGT)
была бы турба — наддув/температура турбины 🙂
что бы еще добавить? 😕
Вот, как-то так получилось:
для желающих повторить:
(перерезается дорожка — watchdog процессора)
Описание контроллера μPD6232C
Боль и печаль, у Prelude указатель уровня топлива и температуры управляется своим 4-х битным компьютером (SOC) μPD7566CS
так что инерционность непонятно как побеждать, кроме как оторвать нафиг всю цифровую часть кроме контроллеров VFD μPD6232C и сделать свое управление всем этим безобразием…
или как вариант подумать что еще туда можно выводить, что не требует оперативности отображения… :)))
PS это не моя приборка, это донор для анализа, мои обе пока в сборе все, и я делаю ДОПОЛНИТЕЛЬНЫЙ комплект приборов к уже существующим.
Многие открывавшие ECU OBD-1 моторов видели такую картину:

…выгоревший составной транзистор управления электро-вакуумными заслонками (или VTEC соленоидами) — D1780, он же 2SD1780)… причина — протекание слишком большого тока (по схеме — +12->соленойд->транзистор->земля). Ближайшим аналогом является KT972Б — на 45В, что достаточно, для "с фанатизмом" А, В, Г — на 60В, все они на 3А (против 2А у D1780) — ценой рублей в 30, в базарный день.
По ногам он так же полностью совместим + можно радиатор поставить для страховки.
для совсем щепетильных — можно поставить токоограничивающий резистор на 10-20Ом