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.
Subscribe to:
Post Comments (Atom)

No comments:
Post a Comment