The issue is : the faster the engine spins, the higher the voltage goes. So my duty cycle will change if I use a comparator.
EDIT: To clarify my situation, I will include screenshots from Altium Designer and my C code for my AVR.
(http://i.imgur.com/mXgdYdJ.png)
// 4cyl-fi-ecu.c
// Created by: Maxime Clermont
// Define
#define CKP INT0
#define CMP INT1
#define MAP PORTA0
#define TPS PORTA1
#define ECT PORTA2
#define INJ1 PORTC0
#define INJ2 PORTC1
#define INJ3 PORTC2
#define INJ4 PORTC3
#define COIL1 PORTC4
#define COIL2 PORTC5
#define F_CPU 16000000UL // 16Mhz
// Include
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
// Variables
int cylinder = 10; //
// Prototypes
int getMAPValue(void);
int getTPSValue(void);
int getETCValue(void);
void cycle(void);
void sendSpark(int coil);
void sendFuel(int injector);
// Main
int main(void)
{
DDRC |= (1 << INJ1) | (1 << INJ2) | (1 << INJ3) | (1 << INJ4) | (1 << COIL1) | (1 << COIL2);
MCUCR |= (1 << ISC01) | (1 << ISC00) | (1 << ISC11) | (1 << ISC10);
GICR |= (1 << INT0) | (1 << INT1);
sei();
while(1)
{
}
}
ISR(INT0_vect) // CKP
{
cylinder++;
cycle();
_delay_ms(100); //debug
}
ISR(INT1_vect) // CMP
{
cylinder = 0;
}
void cycle()
{
if(cylinder == 1)
{
sendFuel(INJ1);
sendSpark(COIL1);
}
if(cylinder == 2)
{
sendFuel(INJ3);
sendSpark(COIL2);
}
if(cylinder == 3)
{
sendFuel(INJ4);
sendSpark(COIL1);
}
if(cylinder == 4)
{
sendFuel(INJ2);
sendSpark(COIL2);
}
}
void sendSpark(int coil)
{
PORTC |= (1 << coil);
_delay_ms(100); //debug
PORTC &= ~(1 << coil);
}
void sendFuel(int injector)
{
PORTC |= (1 << injector);
_delay_ms(100); //debug
PORTC &= ~(1 << injector);
}