uzzalpic
Junior Member level 2
Hi all, I am trying to write code for a 12V battery charger used PIC12F675. Its working for charging and full charged but not working for low battery. I giving my project code, schematic and fuse in attachment. Please help me about this.
https://imgbox.com/K6Q5Xa7c
https://imgbox.com/2zuvEODA
https://imgbox.com/K6Q5Xa7c
https://imgbox.com/2zuvEODA
Code:
#define ON 1
#define OFF 0
sbit low_led at GP4_bit;
sbit charge_led at GP5_bit;
sbit RELAY at GP1_bit;
sbit MOSFET at GP2_bit;
unsigned int adc_value =0;
unsigned char led_blink = 0;
double mains_voltage = 0.0;
void delay_start()
{
int i;
for(i=0; i<6; i++){
charge_led = ~charge_led;
delay_ms(1000);
}
}
void InitTimer1(){
T1CON = 0x21;
TMR1IF_bit = 0;
TMR1H = 0x0B;
TMR1L = 0xDC;
TMR1IE_bit = 1;
INTCON = 0xC0;
}
void Interrupt() {
if (TMR1IE_bit && TMR1IF_bit) {
TMR1L = 0xDC;
TMR1H = 0x0B;
if (led_blink) { // use this to switch on-off the blinking in main()
charge_led = ~charge_led;
}
TMR1IF_bit = 0;
}
}
void main() {
asm clrwdt
OPTION_REG = 0x8F;
CMCON = 0x07;
ANSEL = 0x51;
ADCON0 = 0x80;
TRISIO = 0x09;
GPIO = 0x00;
delay_ms(50);
InitTimer1();
delay_start();
ADC_Init();
do{
adc_value = ADC_Read(0);
delay_ms(5);
mains_voltage = (double)adc_value * 5.0 / 1023.0;
if(mains_voltage <= 2.15)
{
led_blink = 1;
RELAY = ON;
MOSFET = ON;
low_led = OFF;
}
delay_ms(100);
if(mains_voltage > 2.15)
{
charge_led = ON;
led_blink = 0;
RELAY = OFF;
MOSFET = ON;
low_led = OFF;
}
else if(mains_voltage < 1.58)
{
charge_led = OFF;
led_blink = 0;
RELAY = OFF;
MOSFET = ON;
low_led = ON;
}
delay_ms(50);
} while(1);
}