Search This Blog

Monday, April 24, 2017

Softskill ::: List Pemrograman


Listing Program Power Bank Menggunakan Bahasa C


Indikator-indikator (seperti, teks) akan di tampilkan di display Casing Power bank menggunakan perangkat LCD. Di bawah ini adalah daftar bahasa pemrograman yang digunakan untuk menampilkan kondisi pengecekan seperti saat normal ataupun  saat pengisian di Display LCD.


#include <mega8535.h>
#include <delay.h>

// ALPHANUMERIC LCD MODULE FUNCTIONS

#asm
 .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <stdio.h>
#include <stdlib.h>

// MENU

int a;
int b;

// SOURCE

char voltip[4], arusip[4], dayaip[16];
float dtadc0, dtadc1, dayasumber;

// BATTERY

char temp3[4], temp4[4], temp5[4], temp6[4], temp7[4], temp8[4];
float dtadc2, dtadc3, dtadc4, lb1, lb2, lb3;

//CHARGING

int c, cs;
char cstat[33];

// LOAD

char voltop[4], arusop[4], dayaop[4];
float dtadc5, dtadc6, dayakeluar;
#define ADC_VREF_TYPE 0x40

// READ THE AD CONVERSION RESULT

unsigned int read_adc(unsigned char adc_input)

{

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// DELAY NEEDED FOR THE STABILIZATION OF THE ADC INPUT VOLTAGE

delay_us(10);

// START THE AD CONVERSION

ADCSRA|=0x40;

// WAIT FOR THE AD CONVERSION TO COMPLETE

while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void source()
{

 // VOLT

dtadc0=5*(((float)read_adc(0))*5/1023);
ftoa(dtadc0,2,voltip);
lcd_gotoxy(6,0);
lcd_putsf("Volt");
lcd_gotoxy(6,1);
lcd_puts(voltip);
lcd_gotoxy(10,1);
lcd_putsf("V");
delay_ms(25);

 // ARUS

dtadc1=5.405*((((float)read_adc(1))*5/1023)-2.5);
ftoa(dtadc1,1,arusip);
lcd_gotoxy(12,0);
lcd_putsf("Arus");
lcd_gotoxy(12,1);
lcd_puts(arusip);
lcd_gotoxy(15,1);
lcd_putsf("A");
delay_ms(25);

 // DAYA

dayasumber=dtadc0*dtadc1;
ftoa(dayasumber,2,dayaip);
lcd_gotoxy(0,0);
lcd_putsf("Daya");
lcd_gotoxy(0,1);
lcd_puts(dayaip);
lcd_gotoxy(4,1);
lcd_putsf("W ");
delay_ms(25);
}
void battery()
{

 // BATTERY 1

dtadc2=27.027*(((float)read_adc(2))*5/1023);
ftoa(dtadc2,0,temp3);
lcd_gotoxy(0,0);
lcd_putsf("Bat1");
lcd_gotoxy(0,1);
lcd_puts(temp3);
lcd_gotoxy(3,1);
lcd_putsf("%");

// BATTERY 2

dtadc3=27.027*(((float)read_adc(3))*5/1023);
ftoa(dtadc3,0,temp4);
lcd_gotoxy(6,0);
lcd_putsf("Bat2");
lcd_gotoxy(6,1);
lcd_puts(temp4);
lcd_gotoxy(9,1);
lcd_putsf("%");

// BATTERY 3

dtadc4=27.027*(((float)read_adc(4))*5/1023);
ftoa(dtadc4,0,temp5);
lcd_gotoxy(12,0);
lcd_putsf("Bat3");
lcd_gotoxy(12,1);
lcd_puts(temp5);
lcd_gotoxy(15,1);
lcd_putsf("%");
delay_ms(75);
lcd_clear();;
}
void charging()
{

 // SOURCE CHECKING

dtadc0=((float)read_adc(0))*5/1023;
if (dtadc0<1)
{b=3;}

 // BATTERY 1

dtadc2=27.027*(((float)read_adc(2))*5/1023);
ftoa(dtadc2,0,temp3);
if (dtadc2>=95)
{lb1=1;};
if (dtadc2<=70)
{lb1=0;};
if (dtadc2>70&&dtadc2<98)
{lb1=2;};
ftoa(lb1,0,temp6);

 // BATTERY 2

dtadc3=27.027*(((float)read_adc(3))*5/1023);
ftoa(dtadc3,0,temp4);
if (dtadc3>=95)
{lb2=1;};
if (dtadc3<=70)
{lb2=0;};
if (dtadc3>70&&dtadc3<98)
{lb2=2;};
ftoa(lb2,0,temp7);

 // BATTERY 3

dtadc4=27.027*(((float)read_adc(4))*5/1023);
ftoa(dtadc4,0,temp5);
if (dtadc4>=95)
{lb3=1;};
if (dtadc4<=70)
{lb3=0;};
if (dtadc4>70&&dtadc4<98)
{lb3=2;};
ftoa(lb3,0,temp8);

// CHARGING BATTERY 1

if (lb1==0&&lb2==0&&lb3==0)
{PORTD=0x09;};
if (lb1==0&&lb2==0&&lb3==1)
{PORTD=0x09;};
if (lb1==0&&lb2==1&&lb3==0)
{PORTD=0x09;};
if (lb1==0&&lb2==1&&lb3==1)
{PORTD=0x09;};

 // CHARGING BATTERY 2

if (lb1==1&&lb2==0&&lb3==0)
{PORTD=0x0A;};
if (lb1==1&&lb2==0&&lb3==1)
{PORTD=0x0A;};

 // CHARGING BATTERY 3

if (lb1==1&&lb2==1&&lb3==0)
{PORTD=0x0C;};

 // BYPASS TO DUMMY LOAD

if (lb1==1&&lb2==1&&lb3==1)
{PORTD=0x00;};
if (PORTD==0x09)
{cs=1;};
if (PORTD==0x0A)
{cs=2;};
if (PORTD==0x0C)
{cs=3;};
if (PORTD==0x00)
{cs=0;};

 // INDICATOR CHARGING

if (PORTD==0x09||PORTD==0x0A||PORTD==0x0C)
{PORTB.4=1;}
else
{PORTB.4=0;};
}
void load()
{

 // VOLT

dtadc5=5*((float)read_adc(5))*5/1023;
ftoa(dtadc5,2,voltop);
lcd_gotoxy(6,0);
lcd_putsf("Volt");
lcd_gotoxy(6,1);
lcd_puts(voltop);
lcd_gotoxy(10,1);
lcd_putsf("V");
delay_ms(25);


// ARUS

dtadc6=5.405*((((float)read_adc(6))*5/1023)-2.5);
ftoa(dtadc6,1,arusop);
lcd_gotoxy(12,0);
lcd_putsf("Arus");
lcd_gotoxy(12,1);
lcd_puts(arusop);
lcd_gotoxy(15,1);
lcd_putsf("A");
delay_ms(25);

 // DAYA

dayakeluar=dtadc5*dtadc6;
ftoa(dayakeluar,2,dayaop);
lcd_gotoxy(0,0);
lcd_putsf("Daya");
lcd_gotoxy(0,1);
lcd_puts(dayaop);
lcd_gotoxy(4,1);
lcd_putsf("W ");
delay_ms(25);
if (dtadc6>0)
{PORTB.5=1;}
else
{PORTB.5=0;};
}
void warning()
{
PORTD=0xF0; //discharging all battery
lcd_gotoxy(3,0);
lcd_putsf("Sources Is Not Available!");
PORTB.6=1;
PORTB.7=1;
delay_ms(25);
PORTB.4=0;
PORTB.5=0;
PORTB.6=0;
PORTB.7=0;
delay_ms(25);
if (PINB.0==0||PINB.2==0)
{
PORTB.7=0;
b=0;
lcd_clear();
};
}

// DECLARE YOUR GLOBAL VARIABLES HERE

void main(void)
{
PORTA=0x00; DDRA=0x00;
PORTB=0x00; DDRB=0xF8;
PORTC=0x00; DDRC=0xFF;
PORTD=0x00; DDRD=0x0F;
TCCR0=0x00; TCNT0=0x00; OCR0=0x00;
TCCR1A=0x00; TCCR1B=0x00;
TCNT1H=0x00; TCNT1L=0x00;
ICR1H=0x00; ICR1L=0x00;
OCR1AH=0x00; OCR1AL=0x00;
OCR1BH=0x00; OCR1BL=0x00;
ASSR=0x00; TCCR2=0x00; TCNT2=0x00;
OCR2=0x00; MCUCR=0x00; MCUCSR=0x00;
TIMSK=0x00; ACSR=0x80; SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84; SFIOR&=0xEF;

// LCD MODULE INITIALIZATION

lcd_init(16);
a=0; b=0; c=0;
PORTD=0x00;
PORTB.3=1;

// GREETING MESSAGE

lcd_gotoxy(1,0);
lcd_putsf("Welcome To The Green Technology");
delay_ms(150);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("DISPLAY -1126-");
delay_ms(150);
lcd_clear();
while (1)
{
PORTB.7=0;

// KEEP THE PROCESS IF CHARGING WAS ACTIVATED

if (c==1)
{charging();

 // SOURCE CHECKING

dtadc0=((float)read_adc(0))*5/1023;
if (dtadc0<=2)
{
lcd_clear();
a=3; b=3; c=0;
};
};

// HOME DISPLAY

while (a==0)
{
lcd_gotoxy(4,0);
lcd_putsf("-Active-");
lcd_gotoxy(5,1);
lcd_putsf("[menu]");
if (PINB.1==0)
{
a++;
delay_ms(25);
lcd_clear();
};

 // KEEP CHARGING

if (c==1)
{charging();


// SOURCE CHECKING

dtadc0=((float)read_adc(0))*5/1023;
if (dtadc0<=2)
{
lcd_clear();
a=3; b=3; c=0;
};
};

 // LOAD STATUS

dtadc6=5.405*((((float)read_adc(6))*5/1023)-2.5);
if (dtadc6>0)
{PORTB.5=1;}
else
{PORTB.5=0;};
};

// SOURCE DISPLAY

while (a==1&&b==0)
{
lcd_gotoxy(5,0);
lcd_putsf("Source");
if (PINB.0==0)
{
a=0; b=0;
delay_ms(25);
};
if (PINB.1==0)
{
a++;b=0;
delay_ms(25);
lcd_clear();
};
if (PINB.2==0)
{
b=1;
delay_ms(25);
lcd_clear();
};

 // KEEP CHARGING

 if (c==1)
{charging();

 // SOURCE CHECKING

dtadc0=((float)read_adc(0))*5/1023;
if (dtadc0<=2)
{
lcd_clear();
a=3; b=3; c=0;
};
};
};

// SOURCE MENU

while (a==1&&b==1)
{
source();
if (PINB.0==0)
{
b=0;
delay_ms(25);
lcd_clear();
};

 // KEEP CHARGING

if (c==1)
{charging();

 // SOURCE CHECKING

dtadc0=((float)read_adc(0))*5/1023;
if (dtadc0<=2)
{
lcd_clear();
a=3; b=3; c=0;
};
};
}


// BATTERY DISPLAY

while (a==2&&b==0)
{
lcd_gotoxy(4,0);
lcd_putsf("Battery");
if (PINB.0==0)
{
a=0;
delay_ms(25);
};
if (PINB.1==0)
{
a++;b=0;
delay_ms(25);
lcd_clear();
};
if (PINB.2==0)
{
b=1;
delay_ms(25);
lcd_clear();
};

 // KEEP CHARGING

if (c==1)
{charging();

 // SOURCE CHECKING

dtadc0=((float)read_adc(0))*5/1023;
if (dtadc0<=2)
{
lcd_clear();
a=3; b=3; c=0;
};
};
}

// BATTERY MENU

while (a==2&&b==1)
{
battery();
if (PINB.0==0)
{
b=0;
delay_ms(25);
lcd_clear();
};

 // KEEP CHARGING

if (c==1)
{charging();

 // SOURCE CHECKING

dtadc0=((float)read_adc(0))*5/1023;
if (dtadc0<=2)
{
lcd_clear();
a=3; b=3; c=0;
};
};
}

// CHARGING DISPLAY

while (a==3&&b==0)
{
lcd_gotoxy(4,0);
lcd_putsf("Charging");
if (PINB.0==0)
{
a=0;
delay_ms(25);
};
if (PINB.1==0)
{
a++;b=0;
delay_ms(25);
lcd_clear();
};
if (PINB.2==0)
{
b=1;
delay_ms(25);
lcd_clear();
};




 // KEEP CHARGING

if (c==1)
{charging();

 // SOURCE CHECKING

dtadc0=((float)read_adc(0))*5/1023;
if (dtadc0<=2)
{
lcd_clear();
a=3; b=3; c=0;
};
};
}

//START CHARGING

while (a==3&&b==1)
{
lcd_gotoxy(5,0);
lcd_putsf("Start");
lcd_gotoxy(3,1);
lcd_putsf("Charging ?");
if (PINB.2==0)
{
b=2;
delay_ms(25);
lcd_clear();
};
if (PINB.0==0)
{
b=0;
delay_ms(25);
lcd_clear();
};
}

// CHARGING MENU

while (a==3&&b==2)
{
charging();
lcd_gotoxy(4,0);
lcd_putsf("Charging");
lcd_gotoxy(3,1);
sprintf(cstat,"Battery 0%d",cs);
lcd_puts(cstat);
if (PINB.0==0)
{
b=0;
delay_ms(25);
lcd_clear();
};
c=1;                                 // CHARGING FLAG
}

//WARNING IF SOURCES IS NOT AVAILABLE

while (a==3&&b==3)
{warning();}

//LOAD DISPLAY

while (a==4&&b==0)
{
lcd_gotoxy(6,0);
lcd_putsf("Load");
if (PINB.0==0)
{
a=0;
delay_ms(25);
};
if (PINB.1==0)
{
a=1;b=0;
delay_ms(25);
lcd_clear();
};
if (PINB.2==0)
{
b=1;
delay_ms(25);
lcd_clear();
};

 // KEEP CHARGING

if (c==1)
{charging();

 // SOURCE CHECKING

dtadc0=((float)read_adc(0))*5/1023;
if (dtadc0<=2)
{
lcd_clear();
a=3; b=3; c=0;
};
};
};

// LOAD MENU

while (a==4&&b==1)
{
load();
if (PINB.0==0)
{
b=0;
delay_ms(25);
lcd_clear();
}


 // KEEP CHARGING

if (c==1)
{charging();

 // SOURCE CHECKING

dtadc0=((float)read_adc(0))*5/1023;
if (dtadc0<=2)
{
lcd_clear();
a=3; b=3; c=0;
};
};
}
}
}             // End


Jika di atas adalah Power bank yang digunakan untuk menampilkan indikator berbasis Digital, di bawah ini adalah Power Bank yang akan menampilkan Indikator berbasis Analog. Dalam hal ini indikator yang di maksud adalah berupa LED.



            Cara kerja singkat dari rangkaian ini didasarkan pada switching dari dua transistor BC547 sekaligus sebagai driver untuk LED indikator. Dioda zener yang terhubung dengan transistor T1 berfungsi sebagai penstabil tegangan yang disesuaikan dengan baterai yang akan digunakan. LED hijau akan menyala apabila tegangan baterai normal atau pengisian baterai telah penuh. Resistor R1 dan VR 5K disetting untuk menyesuaikan bias dari transistor T1 secara perlahan. Ketika transistor dalam keadaan bekerja, maka T2 akan tertarik ke ground sehingga LED merah akan padam.
             Sebenarnya ini hanyalah segelintir rangkaian dari sekian banyak rangkaian Kontrol Level Baterai yang ada. Baik yang bentuknya Analog ataupun Digital yang berbasis Mikrokontroler.





No comments:

Post a Comment