До: направи си сам ЕКУ
да, добра идея, ето пиновете за начало, довечера ще нарисувам и схемка:
//********** PINS
//***PORTA,A/D
//PORTA 0-5 AD without 4
//<--
//AD channel 0(RA0) TPS
//AD channel 1(RA1) LAMBDA
//AD channel 2(RA2) ENG TEMP
//AD channel 3(RA3) AIR TEMP
//AD channel 4(RA5) on MAP
//RA4 - T0CK <-POS signal
#define MAIN_RELLAY PORTAbits.RA6
#define FUEL_PUMP PORTAbits.RA7
//***PORTB
// PORTB 0,1 - INT0, INT1 <-REF signal
//<--
#define IGN_ON PORTBbits.RB2
//<-- mpx with INT2 when sleep
//#define ISCV PORTBbits.RB3
//<--
#define TACHO PORTBbits.RB6
//-->
//#define LAMBDA_CORRECTION PORTBbits.RB4
//-->
//-->
#define LPG_RELLAY PORTBbits.RB7
//-->
//***PORTC
#define INJECTORS PORTC
//-->> 0-5, PORTCbits.RC7 is inhibit bit for the Ind Coils!!! When = 1 no sparks!
#define INJ_135 0b00010000
//PORTCbits.RC6
#define INJ_246 0b00100000
//PORTCbits.RC7
#define ALLINJECTORS 0b00110000
#define COILS PORTC
//-->> 0-5
//***PORTD
#define ADSORBER PORTDbits.RD0
#define MHz32 PORTDbits.RD1
#define LPG_ON PORTDbits.RD1
#define BTN_PLUS PORTDbits.RD2
#define BTN_MINUS PORTDbits.RD3
//<--
//***PORTE
//#define PORTEbits.RE0
//-->
//#define PORTEbits.RE1
//-->
//#define PORTEbits.RE2
//-->
#define T0CONinit 0b11111111
//Timer0
n,8 bit,ext counter on falling edge,no prescale
#define T1CONinit32 0b10110001
//32MHz, 1000 ticks = 1ms
#define T1CONinit8 0b10010001
//8MHz 1000 ticks = 1ms
#define T2CONinit8 0b01111101
//8MHz TMR2=0, PR2=32 <=> 1024microsec
#define T2CONinit32 0b01111110
//32MHz TMR2=0, PR2=32 <=> 1024microsec
#define T3CONinit32 0b10110001
//32MHz 1000 ticks = 1ms
//Timer3:16bit read/write, not source for ccp,1:8,not synch,int clock, timer on
#define T3CONinit8 0b10010001
//8MHz 1000 ticks = 1ms
//Timer3:16bit read/write, not source for ccp,1:2,not synch,int clock, timer on
#define ADCON2init32R 0b10100010
//32MHz right just
#define ADCON2init32L 0b00100010
//32MHz left just
#define ADCON2init8R 0b10100001
//8MHz right just
#define ADCON2init8L 0b00100001
//8MHz left just
//******************************************************************
OSCCON = 0b01110000;//FOSC3:FOSC0 = 1000, so INTOSC is primary! , 8MHz
//if(MHz32)
{ OSCTUNE = 0b01000000;
T1CONinit=T1CONinit32;
T2CONinit=T2CONinit32;
T3CONinit = T3CONinit32;
ADCON2initR = ADCON2init32R;
ADCON2initL= ADCON2init32L;
}/*else //8 MHZ
{ OSCTUNE = 0b00000000;//dsbl multiplier
T1CONinit=T1CONinit8;
T2CONinit=T2CONinit8;
T3CONinit = T3CONinit8;
ADCON2initR = ADCON2init8R;
ADCON2initL= ADCON2init8L;
};*/
//INTs
RCONbits.IPEN=0;//disable INT priority
INTCONbits.GIE = 1; // Enable interrupts
INTCONbits.PEIE = 1; // Enable periferal interrupts
INTCONbits.RBIE=0;//PORTB change -> INT enabled NO!
INTCON2bits.RBPU=0;//PORTB pull-ups disabled
INTCON3bits.INT1IP=1; //INT1 priority high
INTCON3bits.INT1IE=1; //enable INT1
INTCONbits.INT0IE=1; //enable INT0
INTCON2bits.INTEDG0 = 1; //external INT0 on RISING edge
INTCON2bits.INTEDG1 = 0; //external INT1 on FALLING edge
INTCON3bits.INT2IE=0; //disable INT2
//timers
T0CON=0;
INTCONbits.TMR0IE=0;
T1CON=0;
PIE1bits.TMR1IE=0;
T2CON=0;
PIE1bits.TMR2IE=0;
T3CON=0;
PIE2bits.TMR3IE=0;
// A/D
PIE1bits.ADIE=0;//disable AD INT
ADCON0 = 0;//A/D disabled
//Comparators
CMCON = 0; // comparators off
//CCPs
CCP2CON=0;
CCP1CON=0;
//PORTs
TRISA= 0b00111111;
PORTA = 0;
//TRISB = 0b000011xx
TRISBbits.TRISB2 =1;
TRISBbits.TRISB3=0; //CCP2 multiplexed
TRISBbits.TRISB4=1;
TRISBbits.TRISB5=0;
TRISBbits.TRISB6=0;
TRISBbits.TRISB7=0;
TRISC=0b00000000;
PORTC=0b00000000;
TRISD=0b00001110;
PORTD=0b00000000;
//POR
RCONbits.POR=1;
// PWM SETINGS
PR2 = 0b11111111 ;
CCP2CON = 0b00111100 ;
CCPR2L = 127;// 100% - duty cycle ;
Първоначално публикуван от ittso
Преглед на мнение
//********** PINS
//***PORTA,A/D
//PORTA 0-5 AD without 4
//<--
//AD channel 0(RA0) TPS
//AD channel 1(RA1) LAMBDA
//AD channel 2(RA2) ENG TEMP
//AD channel 3(RA3) AIR TEMP
//AD channel 4(RA5) on MAP
//RA4 - T0CK <-POS signal
#define MAIN_RELLAY PORTAbits.RA6
#define FUEL_PUMP PORTAbits.RA7
//***PORTB
// PORTB 0,1 - INT0, INT1 <-REF signal
//<--
#define IGN_ON PORTBbits.RB2
//<-- mpx with INT2 when sleep
//#define ISCV PORTBbits.RB3
//<--
#define TACHO PORTBbits.RB6
//-->
//#define LAMBDA_CORRECTION PORTBbits.RB4
//-->
//-->
#define LPG_RELLAY PORTBbits.RB7
//-->
//***PORTC
#define INJECTORS PORTC
//-->> 0-5, PORTCbits.RC7 is inhibit bit for the Ind Coils!!! When = 1 no sparks!
#define INJ_135 0b00010000
//PORTCbits.RC6
#define INJ_246 0b00100000
//PORTCbits.RC7
#define ALLINJECTORS 0b00110000
#define COILS PORTC
//-->> 0-5
//***PORTD
#define ADSORBER PORTDbits.RD0
#define MHz32 PORTDbits.RD1
#define LPG_ON PORTDbits.RD1
#define BTN_PLUS PORTDbits.RD2
#define BTN_MINUS PORTDbits.RD3
//<--
//***PORTE
//#define PORTEbits.RE0
//-->
//#define PORTEbits.RE1
//-->
//#define PORTEbits.RE2
//-->
#define T0CONinit 0b11111111
//Timer0

#define T1CONinit32 0b10110001
//32MHz, 1000 ticks = 1ms
#define T1CONinit8 0b10010001
//8MHz 1000 ticks = 1ms
#define T2CONinit8 0b01111101
//8MHz TMR2=0, PR2=32 <=> 1024microsec
#define T2CONinit32 0b01111110
//32MHz TMR2=0, PR2=32 <=> 1024microsec
#define T3CONinit32 0b10110001
//32MHz 1000 ticks = 1ms
//Timer3:16bit read/write, not source for ccp,1:8,not synch,int clock, timer on
#define T3CONinit8 0b10010001
//8MHz 1000 ticks = 1ms
//Timer3:16bit read/write, not source for ccp,1:2,not synch,int clock, timer on
#define ADCON2init32R 0b10100010
//32MHz right just
#define ADCON2init32L 0b00100010
//32MHz left just
#define ADCON2init8R 0b10100001
//8MHz right just
#define ADCON2init8L 0b00100001
//8MHz left just
//******************************************************************
OSCCON = 0b01110000;//FOSC3:FOSC0 = 1000, so INTOSC is primary! , 8MHz
//if(MHz32)
{ OSCTUNE = 0b01000000;
T1CONinit=T1CONinit32;
T2CONinit=T2CONinit32;
T3CONinit = T3CONinit32;
ADCON2initR = ADCON2init32R;
ADCON2initL= ADCON2init32L;
}/*else //8 MHZ
{ OSCTUNE = 0b00000000;//dsbl multiplier
T1CONinit=T1CONinit8;
T2CONinit=T2CONinit8;
T3CONinit = T3CONinit8;
ADCON2initR = ADCON2init8R;
ADCON2initL= ADCON2init8L;
};*/
//INTs
RCONbits.IPEN=0;//disable INT priority
INTCONbits.GIE = 1; // Enable interrupts
INTCONbits.PEIE = 1; // Enable periferal interrupts
INTCONbits.RBIE=0;//PORTB change -> INT enabled NO!
INTCON2bits.RBPU=0;//PORTB pull-ups disabled
INTCON3bits.INT1IP=1; //INT1 priority high
INTCON3bits.INT1IE=1; //enable INT1
INTCONbits.INT0IE=1; //enable INT0
INTCON2bits.INTEDG0 = 1; //external INT0 on RISING edge
INTCON2bits.INTEDG1 = 0; //external INT1 on FALLING edge
INTCON3bits.INT2IE=0; //disable INT2
//timers
T0CON=0;
INTCONbits.TMR0IE=0;
T1CON=0;
PIE1bits.TMR1IE=0;
T2CON=0;
PIE1bits.TMR2IE=0;
T3CON=0;
PIE2bits.TMR3IE=0;
// A/D
PIE1bits.ADIE=0;//disable AD INT
ADCON0 = 0;//A/D disabled
//Comparators
CMCON = 0; // comparators off
//CCPs
CCP2CON=0;
CCP1CON=0;
//PORTs
TRISA= 0b00111111;
PORTA = 0;
//TRISB = 0b000011xx
TRISBbits.TRISB2 =1;
TRISBbits.TRISB3=0; //CCP2 multiplexed
TRISBbits.TRISB4=1;
TRISBbits.TRISB5=0;
TRISBbits.TRISB6=0;
TRISBbits.TRISB7=0;
TRISC=0b00000000;
PORTC=0b00000000;
TRISD=0b00001110;
PORTD=0b00000000;
//POR
RCONbits.POR=1;
// PWM SETINGS
PR2 = 0b11111111 ;
CCP2CON = 0b00111100 ;
CCPR2L = 127;// 100% - duty cycle ;
Коментар