//settings//
int FIRSTCOIL = 2; /*DEPENING ON WHICH INJECTOR IS USED FOR SYNC
*INJ1 = 2
*INJ2 = 4
*INJ3 = 1
*INJ4 = 3
*/
int DWELL = 2000; // INITIAL DWELL IN MICROSECONDS //
int MAXDWELL = 2000; // MAX DWELL IN MICROSECONDS FOR MAPPING WITH RPM //
int MINDWELL = 1500; // MIN DWELL IN MICROSECONDS FOR MAPPING WITH RPM //
//settings//
int led = 13;
int inj_flag;
int coil_flag;
int NEXTCOIL;
int RPM;
long CLK_DWELL = 65535-(DWELL*2); //math
void setup() {
//Serial.begin(9600);
//ATmega328 setup...
TCCR1A = 0; //DONT TOUCH
TCCR1B = 0; //DONT TOUCH
TCCR1B |=(0<<CS10) | (1<<CS11) | (0<<CS12); //DONT TOUCH
TIMSK1 |=(1<<TOIE1); //DONT TOUCH
//PORT SETUP
/*OUTPUT*/DDRA = B00001111; //p,p,p,D12,p,D10,p,D8
/*INPUT*/DDRL = B00000000; //p,D6,p,p,p,p,p,p
pinMode(led, OUTPUT);
}
ISR(TIMER1_OVF_vect){
if(coil_flag == 1)
{
PORTA &= !B00001111;
inj_flag=0;
coil_flag=0;
TCNT1=0;}
}
void loop() {
if ((PINL >> 0 & B00000010 >> 0) == LOW && inj_flag == 0 ) {
NEXTCOIL=FIRSTCOIL;
digitalWrite(led, HIGH);
inj_flag=1;
}
if ((PINL >> 0 & B00000001 >> 0) == LOW && coil_flag == 0) {
switch(NEXTCOIL)
{
case 1: PORTA |= B00000001;
NEXTCOIL=3;
break;
case 2: PORTA |= B00000010;
NEXTCOIL=1;
break;
case 3: PORTA |= B00000100;
NEXTCOIL=4;
break;
case 4: PORTA |= B00001000;
NEXTCOIL=2;
break;
}
TCNT1 = CLK_DWELL;
coil_flag=1;
}
}