Study this cod below and redraw or create your own circuit.
*********************************
//
solar charge controller
#include
#include
#include
"lcd.h"
#include
"delay.h"
#include
"serial.h"
//
Prototypes
float
ReadAdc(unsigned char channel);
void
lcd_intro (void);
void
giris_olc(void);
//
Useful defines
#define
LSB(x) (unsigned char)(*(((unsigned char
*)&x)+0))
#define
MSB(x) (unsigned char)(*(((unsigned char
*)&x)+1))
#define
LWORD(x) (unsigned int)(*(((unsigned
int *)&x)+0))
#define
HWORD(x) (unsigned int)(*(((unsigned
int *)&x)+1))
#define
clrwdt() asm("clrwdt")
#define
PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))
#defined
DelayUs(x) { unsigned char _dcnt; _dcnt
= x; while(--_dcnt != 0){asm("NOP");asm("NOP");} }
#define
DelayMS(x) { unsigned char _dcnt; _dcnt
= x; while(--_dcnt !=0) {DelayUs(250);DelayUs(250);DelayUs(250);DelayUs(250);}}
#define
SampNum 40
@
CO-bit static PORTBIT(DOOR, 0);
CI
@ static bit PORTBIT(DOOR, 1);
float
giris0, Input1, input2, Input3;
float
LRV, HVD, RCV, LVD;
unsigned
char buff[15];
main
(){
//
Interrupt settings
GIE
= 0; // Disable all
interrupts
//
ADC settings
ADCON1=0b10000010; // right justified, DOOR for A / D , PORTE
digital
; // Fosc/32, CH0, ADON
//
PORT settings
PORTA=255;
PORTB
= 0;
PORTC
= 0;
PORTD
= 0;
GATE
= 3;
TRISA=0b11111111;
TRISB
= 0b00000000;
TRISC=0b00000000;
Thirty
= 0b00000000;;
TRISE
= 0b00000000;
LRV
= 13;Load Reconnect Voltage(cargo lashing)
HVD
= 143/10;High Voltage Disconnect(PV separation)
RCV=135/10;PV
Reconnect(Connecting PV)
LVD=115/10;Low
Voltage Disconnect(load allocation)
;The
above values are
based on the battery type setting points deyişen.
lcd_init();
lcd_intro();
lcd_dispmode(4+0+0);
// 4:Display on 2:cursor off 1:blink off
DelayUs(220);
while(1)
{
giris0
=(ReadAdc(0)*20/1024);
ftoa(giris0,buff);
lcd_clear();
lcd_goto(0); //1.line
(4+0+0);
// 4:Display 2:cursor 1:blink
lcd_puts("E
=");
lcd_goto(0x02);
lcd_puts(buff);
lcd_goto(0x06);
lcd_puts("In");
if
(giris0<=RCV) {CO=1;}
if
(giris0>HVD =) {CO=0;}
if
(giris0<=LVD) {CI=0;}
if
(giris0>LRV =) {CI = 1;}
Input1
=(ReadAdc(1)*75/10240);
ftoa(giris1,buff);
lcd_goto(0x08);
lcd_puts("I=");
lcd_goto(0x0A);
lcd_puts(buff);
if
(Input1> = 30) {CI = 0;}
lcd_goto(0x0E);
lcd_puts("A");
lcd_goto(0x40);
lcd_puts("P=");
lcd_goto(0x42);
input1
input2 = * giris0;
ftoa(giris2,buff);
lcd_puts(buff);
lcd_goto(0x47);
lcd_puts("The");
lcd_goto(0x49);
lcd_puts("SOC=%");
lcd_goto(0x4E);
Input3
= 100 *(giris0-LVD)/(HVD-LVD);
ftoa(giris3,buff);
lcd_puts(buff);
DelayMs(250);
DelayMs(250);
DelayMs(250);
DelayMs(250);
lcd_clear();
}
}
float
ReadAdc(unsigned char channel){
unsigned int adcvalue;
ADCON0 = (channel << 3) + 0x81; // select channel
DelayUs(20); // wait for acquasition time
ADGO = 1;
while(ADGO); // wait for conversion complete
MSB(adcvalue)=ADRESH;
LSB(adcvalue)=ADRESL;
return(adcvalue);
//******************************************
}
void
lcd_intro (void)
{
lcd_clear();
lcd_goto(0);
lcd_dispmode(4+0+0); // 4:Display 2:cursor
1:blink
lcd_putsd(" SOLAR");
lcd_goto(0x40);
lcd_putsd(" SARJ REGULATORU");
DelayMs(250);
DelayMs(250);
DelayMs(250);
DelayMs(250);
lcd_clear();
}
*********************************