• Tidak ada hasil yang ditemukan

BAB IV HASIL DAN PEMBAHASAN

4.6. Program

4.6.1. Program Pada Rangkaian Lengkap

Program pada rangkaian lengkap terdiri dari 4 bagian yaitu : a. Programkeypad(urutan proses, tombol instan dan pilihan sendiri). b. Program perhitungan berat ADC termasuk kalibrasi.

c. Programon-off driver. d. Program tampilan.

Berikut ini cuplikan program tampilan awal saat sistem dinyalakan. Pada bagian atas kiri LCD 2x16 atas akan tertampil “Selamat Datang” dan bagian bawah kiri akan tampil “Tekan ON”.

Program dibawahnya adalah saat perintah untuk memasukkan berat melaluikeypad. Baris ke dua dari kiri LCD akan menampilkan angka sesuai masukan dari keypad dan di sebelah kanannya akan tertampil satuan berat gram.

Gambar 4.25. Cuplikan Program Tampilan Awal dan Masukkan Berat

Program selengkapnya terdapat pada lampiran 1.

4.6.2. Program Pada Rangkaian Sederhana

Program dalam rangakaian sederhana adalah program rata-rata pembacaan masukan ADC dan menampilkan ke layar LCD.

void main(void) {

ulang1=ulang2=ulang3=0; // set awalcounter= 0 while (1)

{

// Place your code here

baca=read_adc(0); // membaca ADC

delay_us(120); // waktu untuk pembacaan ADC ulang1++; //counter1 aktif

if(ulang1<=10) // syarat pengulangan 1 {

sum1=sum1+baca; // penambahan baca ADC }

{

rata1=sum1/10; // rata-rata 1

ulang1=0; //counter1 kembali ke 0 ulang2++; //counter2 aktif

if(ulang2<=10) // syarat pengulangan 2 {

sum2=sum2+rata1; // penambahan rata-rata 1 }

else // jika melewati syarat {

rata2=sum2/10; // rata-rata 2

ulang2=0; //counter2 kembali ke 0 ulang3++; //counter3 aktif

if(ulang3<=10) // syarat pengulangan 3 {

sum3=sum3+rata2; // penambahan rata-rata 2 }

else // jika melewati syarat {

rata3=sum3/10; // rata-rata 3

berat=6.0142*rata3-399.64; // konversi berat ADC

if(berat<=0){berat=0;} // jik berat kurang dari 0 maka dianggap 0 lcd_gotoxy(0,0); // LCD baris 0 (atas) rata kiri (kolom 0) ftoa(rata3,3,adece); // desimal step ADC dari rata-rata terakhir

lcd_puts(adece); // adece tampil ke LCD lcd_gotoxy(10,0); // LCD baris 0 kolom 10

lcd_putsf("step"); // tulisan“step” tampil pada LCD

lcd_gotoxy(0,1); // LCD baris 1 (bawah) kolom 0

ftoa(berat,3,adece); // desimal konversi berat dari rata-rata terakhir lcd_puts(adece); // adece tampil ke LCD

lcd_gotoxy(10,1); // LCD baris 1 kolom 10

lcd_putsf("gram"); // tulisan “gram” tampil pada LCD

ulang3=sum3=rata3=0; // nilaicounter, jumlah dan rata-rata 3 kembali ke 0 }

sum2=rata2=0; // nilai jumlah dan rata-rata 2 kembali ke 0 }

sum1=rata1=0; // nilai jumlah dan rata-rata 1 kembali ke 0 }

} }

66

BAB V

KESIMPULAN DAN SARAN

5.1.

Kesimpulan

Berdasarkan proses perancangan, pembuatan sampai dengan pengujian alat penakar berat air berbasis mikrokontroler dapat diambil kesimpulan sebagai berikut :

1. Alat penakar berat yang telah dibuat dapat bekerja dengan hasil yang tidak stabil terutama pada nilai beban di bawah 500 gram denganerror 8– 220 % pada alat yang sudah disederhanakan.

2. Semakin berat beban yang ditimbang maka semakin stabil sistem sehingga dapat memiliki error di bawah 4% untuk beban di atas 1.600 gram.

3. Tegangan keluaran sensor berat berupa modul strain gauge yang dipakai dalam penelitian sangat kecil dan fluktuatif, yaitu dibawah 0.1 mV dengan rentang osilasi ±60 mV dengan frekuensi yang tidak stabil.

4. Penguat instrumentasi dan filter yang dirancang tidak mampu menstabilkan tegangan keluaran sensor yang sangat kecil dan tidak stabil.

5. Power supply, grounding dan rangkaian yang komplek dapat menimbulkan interferensi tegangan yang sangat mempengaruhi keberhasilan sistem.

5.2.

Saran

Setelah melewati seluruh proses maka diperoleh beberapa saran yang bisa digunakan untuk perkembangan penelitian lebih lanjut yaitu :

1. Penguat instrumentasi yang mampu mengolah tegangan sangat kecil dengan frekuensi tidak stabil sangat diperlukan dalam membangun alat penakar berat dengan sensor beratstrain gauge.

2. Sistem dan rangkaian yang dapat mengurangi atau menghilangkan interferensi tegangan harus dirancang dengan baik dan cermat sehingga sistem menjadi stabil serta memberikan hasil yang teliti.

3. Alat ukur dengan ketelitian 0,01 mV sangat dibutuhkan dalam pengukuran tegangan keluaran sensorstrain gaugeyang sangat kecil, yaitu di bawah 0,1 mV.

DAFTAR PUSTAKA

[1] Nuresa, Y.R., 2011, Penakar Bahan Makanan Otomatis Berbasis Mikrokontroler, Skripsi Tugas Akhir, Institut Teknologi Telkom, Jakarta.

[2] Camry Electronic Ltd., 2011, Electronic Kitchen Scales EK5055, http://www.camryscale.com/showroom/ek5055.html, diakses pada 10 Juni 2013. [3] Atmel, 2007, Data Sheet 8-bit AVR with 8K Bytes In System Programmable Flash

ATMega8535-ATMega8535L, Atmel, San Jose.

[4] Boylestad R., 2002,Introductory Circuit Analysis,10th Edition, hal 390-397.

[5] Tokyo Sokki Kenkyojo Co., Ltd.,_______, Strain Gauges, Tokyo Sokki Kenkyojo Co., Ltd., Tokyo, Japan.

[6] Karris, S.T., 2005, Electronic Devices and Amplifier Circuits with MATLAB® Applications, Orchard Publications,. California, United States of America, chapter 5.16.

[7] Parallax Inc., 2011,Data Sheet of 4x4 Matrix Membrane Keypad,Parallax Inc. [8] NetMedia, 2002, Data Sheet of 2x16 Serial LCD Display Module, v1.2, NetMedia

Inc., Stallard Place, Tucson.

[9] Solenoid-Valve-Info.com, 2013, What is Solenoid Valve?, http://www.solenoid- valve-info.com, diakses pada 7 November 2013.

[10] Seeed Studio Works, 2014, Data Sheet of G1/2 Electric Solenoid Valve (Normally Closed), http://www.seeedstudio.com/depot/electric-solenoid-valve-p-636.html, diakses 8 Februari 2014.

[11] Floyd, T.L., 2012, Electronic Devices : Conventional Current Version, 9th ed, Prentice Hall, New Jersey, hal 193-194.

[12] Texas Instrument, 2013, Data sheet of LM741 Operasional Amplifier, Texas Instrument, Texas.

[13] Fairchild Semiconductor International, 2000, Data Sheet of TIP31 Series, Fairchild Semiconductor Corporation.

[14] Fairchild Semiconductor International, 2000, Data Sheet of 1N4001, Fairchild Semiconductor Corporation.

PROGRAM DENGAN RANGKAIAN LENGKAP

Chip type : ATmega8535

Program type : Application AVR Core Clock frequency : 12.000000 MHz

Memory model : Small

External RAM size : 0 Data Stack size : 128

*****************************************************/ #include <mega8535.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #include <delay.h> // Alphanumeric LCD functions #include <alcd.h>

#define ADC_VREF_TYPE 0xC0 // setting referensi tegangan internal 2,56 V int a,b,d,angka1,angka2,angka3,angka4,input; int baca,ulang1,ulang2,ulang3; float sum1,sum2,sum3,rata1,rata2,rata3,berat,htakar; long kalib; char adece[20]; char angka[20];

// Read the ADC 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; }

// Declare your global variables here

void abot() // program perhitungan berat ADC {

baca=read_adc(0); // baca ADC

delay_us(120); // waktu pembacaan ADC ulang1++; //counter1 aktif

if(ulang1<=20) // syarat pengulangan 1 {

sum1=sum1+baca; // penambahan baca ADC }

else // jika melewati syarat

{

rata1=sum1/20; // rata-rata1

ulang1=0; //counter1 kembali 0 ulang2++; //counter2 aktif if(ulang2<=20) // syarat pengulangan 2 {

sum2=sum2+rata1; // penambahan rata-rata1 }

else // jika melewati syarat {

rata2=sum2/20; // rata-rata 2

berat=3.16*rata2-505.6; // konfersi berat ADC

if(berat<=0){berat=0;} // jika berat kurang dari 0 maka dianggap 0 lcd_gotoxy(0,1); // LCD baris 1 kolom 0

ftoa(berat,3,adece); // decimal ADC lcd_puts(adece); // tampil ADC delay_us(200); // waktu tampil ADC

}

sum1=rata1=0; // jumlah 1 dan rata-rata 2 kembali 0 }

}

void tampil1() // sub program tampil 1 {

lcd_gotoxy(0,0); // LCD baris 0 kolom 0

lcd_putsf("Selamat Datang"); // tampil“Selamat Datang”

lcd_gotoxy(0,1); // LCD baris 1 kolom 0

lcd_putsf("Tekan ON"); //tampil “Tekan ON”

}

void tampil3() // sub program tampil 3 {

lcd_gotoxy(0,0); // LCD baris 0 kolom 0

lcd_putsf("Masukan Berat!!"); //tampil “Masukkan Berat”

lcd_gotoxy(0,1); // LCD baris 1 kolom 0

lcd_puts(angka); // tampil angka (nilai berat ADC) lcd_gotoxy(6,1); // LCD baris 1 kolom 6

lcd_putsf("gr"); //tampil “gr” (satuan)

}

void main(void) // program utama {

// Declare your local variables here // Input/Output Ports initialization // Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00;

// Port B initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTB=0x00;

DDRB=0xFF;

// Port C initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTC=0x00;

DDRC=0xFF;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out // State7=T State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0

PORTD=0x00; DDRD=0x0F;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x00;

TCNT0=0x00; OCR0=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF

// OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00;

TCCR2=0x00; TCNT2=0x00; OCR2=0x00;

// External Interrupt(s) initialization // INT0: Off

// INT1: Off // INT2: Off

MCUCR=0x00; MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;

// USART initialization // USART disabled UCSRB=0x00;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC Clock frequency: 750.000 kHz // ADC Voltage Reference: AREF pin // ADC High Speed Mode: Off

// ADC Auto Trigger Source: ADC Stopped ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x87; //hasil setting ADC - register SFIOR&=0xEF; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00;

// Alphanumeric LCD initialization // Connections are specified in the

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTC Bit 0 // RD - PORTC Bit 1 // EN - PORTC Bit 2 // D4 - PORTC Bit 4 // D5 - PORTC Bit 5 // D6 - PORTC Bit 6 // D7 - PORTC Bit 7 // Characters/line: 16 lcd_init(16); awal: while (b==0) {

tampil1(); // panggil sub program tampil 1 PORTD=4; // kolom 3 ( 2^2=4)

if(PIND==132) // tombol # (ON/Enter)(2^7 +4 = 132) {

while(PIND.7==1){tampil1();}

lcd_clear(); // membersihkan LCD

lcd_gotoxy(0,0); // LCD baris 0 kolom 0 lcd_putsf("Kalibrasi"); // tampil“Kalibrasi”

lcd_gotoxy(0,1); // LCD baris 1 kolom 0

lcd_putsf("Wadah Anda"); // tampil “Wadah Anda”

delay_ms(1000); // waktu tampil 1.000 ms lcd_clear(); // membersihkan LCD lcd_gotoxy(0,0); // LCD baris 0 kolom 0 lcd_putsf("Tekan Clear"); //tampil “Tekan Clear”

while(1) {

abot(); // panggil program sub program abot delay_us(100); // waktu jeda

kalib=berat; // berat wadah disimpan menjadi kalib lcd_gotoxy(0,1); // LCD baris 1 kolom 0

ftoa(kalib,3,adece); // decimal untuk kalibrasi lcd_puts(adece); // tampil ADC (berat wadah) delay_us(100); // waktu tampil ADC

PORTD=1; //keypadkolom 1 (2^0=1)

if(PIND==129) // tombol * (clear) untuk kalibrasi {

goto kalibrasi; // lompat ke kalibrasi } } kalibrasi: b=1; } }

while(b==1) // kalibrasi wadah { for(a=1;a<=8;a=a*2) { PORTD=a; if(a==1) { if(PIND.7==1)

{ while(PIND.7==1){}; // berat wadah disimpan lcd_clear(); // memory tampilan lcd clear lcd_gotoxy(0,0); // LCD baris 0 kolom 0 lcd_putsf("Menyimpan"); // tampil“menyimpan”

lcd_gotoxy(0,1); // LCD baris 1 kolom 0

ftoa(kalib,3,adece); // decimal ADC untuk kalibrasi lcd_puts(adece); // tampil ADC (nilai wadah) delay_ms(500); // waktu tampil 500 ms b=2; // masuk ke b=2

} }

lcd_clear(); // membersihkan tampilan LCD

angka[0]='0'; //tampilan nol setelah kalibrasi, angka pertama, dan seterusnya angka[1]='0'

angka[2]='0'; angka[3]='0'; }

}

while (b==2) //input keypadpada pilihan sendiri { atas:

for(a=1;a<=8;a=a*2) {

PORTD=a;

tampil3(); // tampilan saat perintah masukkan berat if(a==1) //keypadkolom1

{ // angka ke 1 if(PIND.7==1&&d==0){while(PIND.7==1&&d==0){tampil3();};d=0;b=4;} if(PIND.6==1&&d==0){while(PIND.6==1&&d==0){tampil3();};angka[0]='7';an gka1=7;d=1;} if(PIND.5==1&&d==0){while(PIND.5==1&&d==0){tampil3();};angka[0]='4';an gka1=4;d=1;} if(PIND.4==1&&d==0){while(PIND.4==1&&d==0){tampil3();};angka[0]='1';an gka1=1;d=1;} // angka ke 2 if(PIND.7==1&&d==1){while(PIND.7==1&&d==1){tampil3();};d=0;b=4;} if(PIND.6==1&&d==1){while(PIND.6==1&&d==1){tampil3();};angka[1]='7';an gka2=7;d=2;} if(PIND.5==1&&d==1){while(PIND.5==1&&d==1){tampil3();};angka[1]='4';an gka2=4;d=2;}

if(PIND.4==1&&d==1){while(PIND.4==1&&d==1){tampil3();};angka[1]='1';an gka2=1;d=2;} // angka ke 3 if(PIND.7==1&&d==2){while(PIND.7==1&&d==2){tampil3();};d=0;b=4;} if(PIND.6==1&&d==2){while(PIND.6==1&&d==2){tampil3();};angka[2]='7';an gka3=7;d=0;} if(PIND.5==1&&d==2){while(PIND.5==1&&d==2){tampil3();};angka[2]='4';an gka3=4;d=0;} if(PIND.4==1&&d==2){while(PIND.4==1&&d==2){tampil3();};angka[2]='1';an gka3=1;d=0;} // angka ke 4 if(PIND.7==1&&d==3){while(PIND.7==1&&d==3){tampil3();};d=0;b=4;} if(PIND.6==1&&d==3){while(PIND.6==1&&d==3){tampil3();};angka[3]='7';an gka4=7;d=0;} if(PIND.5==1&&d==3){while(PIND.5==1&&d==3){tampil3();};angka[3]='4';an gka4=4;d=0;} if(PIND.4==1&&d==3){while(PIND.4==1&&d==3){tampil3();};angka[3]='1';an gka4=1;d=0;} } if(a==2) // kolom2 { //angka 1 if(PIND.7==1&&d==0){while(PIND.7==1&&d==0){tampil3();};angka[0]='0';an gka1=0;d=1;} if(PIND.6==1&&d==0){while(PIND.6==1&&d==0){tampil3();};angka[0]='8';an gka1=8;d=1;} if(PIND.5==1&&d==0){while(PIND.5==1&&d==0){tampil3();};angka[0]='5';an gka1=5;d=1;} if(PIND.4==1&&d==0){while(PIND.4==1&&d==0){tampil3();};angka[0]='2';an gka1=2;d=1;} //angka 2 if(PIND.7==1&&d==1){while(PIND.7==1&&d==1){tampil3();};angka[1]='0';an gka2=0;d=2;}

if(PIND.6==1&&d==1){while(PIND.6==1&&d==1){tampil3();};angka[1]='8';an gka2=8;d=2;} if(PIND.5==1&&d==1){while(PIND.5==1&&d==1){tampil3();};angka[1]='5';an gka2=5;d=2;} if(PIND.4==1&&d==1){while(PIND.4==1&&d==1){tampil3();};angka[1]='2';an gka2=2;d=2;} //angka 3 if(PIND.7==1&&d==2){while(PIND.7==1&&d==2){tampil3();};angka[2]='0';an gka3=0;d=0;} if(PIND.6==1&&d==2){while(PIND.6==1&&d==2){tampil3();};angka[2]='8';an gka3=8;d=0;} if(PIND.5==1&&d==2){while(PIND.5==1&&d==2){tampil3();};angka[2]='5';an gka3=5;d=0;} if(PIND.4==1&&d==2){while(PIND.4==1&&d==2){tampil3();};angka[2]='2';an gka3=2;d=0;} //angka 4 if(PIND.7==1&&d==3){while(PIND.7==1&&d==3){tampil3();};angka[3]='0';an gka4=0;d=0;} if(PIND.6==1&&d==3){while(PIND.6==1&&d==3){tampil3();};angka[3]='8';an gka4=8;d=0;} if(PIND.5==1&&d==3){while(PIND.5==1&&d==3){tampil3();};angka[3]='5';an gka4=5;d=0;} if(PIND.4==1&&d==3){while(PIND.4==1&&d==3){tampil3();};angka[3]='2';an gka4=2;d=0;} } if(a==4) //kolom3 { //angka 1 if(PIND.7==1&&d==0){while(PIND.7==1&&d==0){tampil3();};b=3;} if(PIND.6==1&&d==0){while(PIND.6==1&&d==0){tampil3();};angka[0]='9';an gka1=9;d=1;} if(PIND.5==1&&d==0){while(PIND.5==1&&d==0){tampil3();};angka[0]='6';an gka1=6;d=1;}

if(PIND.4==1&&d==0){while(PIND.4==1&&d==0){tampil3();};angka[0]='3';an gka1=3;d=1;} //angka 2 if(PIND.7==1&&d==1){while(PIND.7==1&&d==1){tampil3();};b=3;} if(PIND.6==1&&d==1){while(PIND.6==1&&d==1){tampil3();};angka[1]='9';an gka2=9;d=2;} if(PIND.5==1&&d==1){while(PIND.5==1&&d==1){tampil3();};angka[1]='6';an gka2=6;d=2;} if(PIND.4==1&&d==1){while(PIND.4==1&&d==1){tampil3();};angka[1]='3';an gka2=3;d=2;} //angka 3 if(PIND.7==1&&d==2){while(PIND.7==1&&d==2){tampil3();};b=3;} if(PIND.6==1&&d==2){while(PIND.6==1&&d==2){tampil3();};angka[2]='9';an gka3=9;d=0;} if(PIND.5==1&&d==2){while(PIND.5==1&&d==2){tampil3();};angka[2]='6';an gka3=6;d=0;} if(PIND.4==1&&d==2){while(PIND.4==1&&d==2){tampil3();};angka[2]='3';an gka3=3;d=0;} //angka 4 if(PIND.7==1&&d==3){while(PIND.7==1&&d==3){tampil3();};b=3;} if(PIND.6==1&&d==3){while(PIND.6==1&&d==3){tampil3();};angka[3]='9';an gka4=9;d=0;} if(PIND.5==1&&d==3){while(PIND.5==1&&d==3){tampil3();};angka[3]='6';an gka4=6;d=0;} if(PIND.4==1&&d==3){while(PIND.4==1&&d==3){tampil3();};angka[3]='3';an gka4=3;d=0;} }

if(a==8) //kolom4 untuk menu instan, tampil3 >>masukkan berat {

if(PIND.7==1){while(PIND.7==1){tampil3();} //baris 4 angka[0]='2';angka[1]='0';angka[2]='0';angka[3]='0';angka1=2;} if(PIND.6==1){while(PIND.6==1){tampil3();} //baris 3 angka[0]='1';angka[1]='0';angka[2]='0';angka[3]='0';angka1=1;}

if(PIND.5==1){while(PIND.5==1){tampil3();} //baris 2 angka[0]='0';angka[1]='5';angka[2]='0';angka[3]='0';angka2=5;} if(PIND.4==1){while(PIND.4==1){tampil3();} //baris 1 angka[0]='0';angka[1]='2';angka[2]='5';angka[3]='0';angka2=2;angka3=5;} } } }

while(b==3) //ribuan, ratusan, puluhan, satuan {

input=(angka1*1000)+(angka2*100)+(angka3*10)+(angka4*1); delay_ms(500); //jeda 500 ms

if(input>2000) //jika berat lebih dari 2.000 gram {

lcd_clear(); //memoryLCDclear

lcd_gotoxy(0,0); //LCD baris 0 kolom 0

lcd_putsf("Terlalu Berat"); // tampil “Terlalu Berat”

lcd_gotoxy(0,1); // LCD baris 1 kolom 0

lcd_putsf("Berat Max 2000gr"); //tampil “Berat Max 2000gr”

delay_ms(1000); // jeda waktu tampil lcd_clear(); //memorylCDclear

b=2; //kembali ke pilihan sendiri angka[0]='0'; //tampilan kembali nol angka[1]='0';

angka[2]='0'; angka[3]='0';

angka1=angka2=angka3=angka4=0; goto atas; //loncat ke pilihan sendiri }

if(input<50) //jika masukan kurang dari 50 gram {

lcd_gotoxy(0,0); //LCD baris 0 kolom 0 lcd_putsf("Terlalu Ringan"); //tampil “Terlalu Ringan”

lcd_gotoxy(0,1); //LCD baris 1 kolom 0 lcd_putsf("Berat Min 50gr"); //tampil “Berat Min 50gr”

delay_ms(1000); //jeda waktu tampil lcd_clear(); //memoryLCDclear

//d=0; b=2;

angka[0]='0'; //nilai kembali ke 0 angka[1]='0'; angka[2]='0'; angka[3]='0'; angka1=angka2=angka3=angka4=0; goto atas; } else{lcd_clear();b=5;} } while(b==4) { angka[0]='0'; angka[1]='0'; angka[2]='0'; angka[3]='0'; angka1=angka2=angka3=angka4=d=0; b=2; goto atas; }

lcd_gotoxy(0,0); //LCD baris 0 kolom 0

lcd_putsf("Memproses"); // taampil “memproses”

PORTB.4=0; //perintah driver on (NOT dengan optocoupler) delay_ms(100); //jeda

while(b==5) {

abot(); //panggil sub program abot (proses penakaran)

if(berat>=input+kalib) // berat terhitung adalah wadah ditambah isi {

lcd_clear(); //memoryLCDclear

b=6; // masuk ke b=6

} }

while(b==6) {

htakar=berat-kalib; // berat actual adalah berat total dikurangi wadah PORTB.4=1; //driver off (optocoupler)

lcd_gotoxy(0,0); // LCD baris 0 kolom 0 lcd_putsf("proses selesai");// tampil “proses selesai”

lcd_gotoxy(0,1); //LCD baris 1 kolom 0 ftoa(htakar,3,adece); //desimal hasil penakaran lcd_puts(adece); //hasil penakaran ditampilkan delay_ms(3000); // jeda waktu tampil

b=0;

goto awal; //kembali ke kalibrasi awal }

PROGRAM DENGAN RANGKAIAN SEDERHANA

Chip type : ATmega8535

Program type : Application AVR Core Clock frequency : 12.000000 MHz

Memory model : Small

External RAM size : 0 Data Stack size : 128

*****************************************************/ #include <mega8535.h> #include <stdio.h> #include <delay.h> #include <stdlib.h> #include <math.h> // Alphanumeric LCD functions #include <alcd.h> #define ADC_VREF_TYPE 0xC0

// 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; }

// Declare your global variables here char adece[30]; int baca,ulang1,ulang2,ulang3; float berat,rata1,rata2,rata3,sum1,sum2,sum3; void main(void) {

// Declare your local variables here

// Input/Output Ports initialization // Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;

DDRC=0x00;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x00;

TCNT0=0x00; OCR0=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization

// Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00;

TCCR2=0x00; TCNT2=0x00; OCR2=0x00;

// External Interrupt(s) initialization // INT0: Off

// INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;

// USART initialization // USART disabled UCSRB=0x00;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC Clock frequency: 187.500 kHz

// ADC Voltage Reference: Int., cap. on AREF // ADC High Speed Mode: Off

// ADC Auto Trigger Source: ADC Stopped ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x87; SFIOR&=0xEF; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00; // Alphanumeric LCD initialization // Connections are specified in the

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTC Bit 0 // RD - PORTC Bit 1 // EN - PORTC Bit 2 // D4 - PORTC Bit 4 // D5 - PORTC Bit 5 // D6 - PORTC Bit 6 // D7 - PORTC Bit 7 // Characters/line: 16 lcd_init(16); ulang1=ulang2=ulang3=0; while (1) {

baca=read_adc(0); // membaca ADC

delay_us(120); // waktu untuk pembacaan ADC

ulang1++; //counter1 aktif

{

sum1=sum1+baca; // penambahan baca ADC

}

else // jika melewati syarat

{

rata1=sum1/10; // rata-rata 1

ulang1=0; //counter1 kembali ke 0

ulang2++; //counter2 aktif

if(ulang2<=10) // syarat pengulangan 2

{

sum2=sum2+rata1; // penambahan rata-rata 1 }

else // jika melewati syarat

{

rata2=sum2/10; // rata-rata 2

ulang2=0; //counter2 kembali ke 0

ulang3++; //counter3 aktif

if(ulang3<=10) // syarat pengulangan 3

{

sum3=sum3+rata2; // penambahan rata-rata 2

}

else // jika melewati syarat

{

rata3=sum3/10; // rata-rata 3

berat=6.0142*rata3-399.64; // konversi berat ADC

lcd_gotoxy(0,0); // LCD baris 0 (atas) rata kiri (kolom 0) ftoa(rata3,3,adece); // desimal step ADC dari rata-rata terakhir

lcd_puts(adece); // adece tampil ke LCD

lcd_gotoxy(10,0); // LCD baris 0 kolom 10

lcd_putsf("step"); // tulisan “step” tampil pada LCD

lcd_gotoxy(0,1); // LCD baris 1 (bawah) kolom 0

ftoa(berat,3,adece); // desimal konversi berat dari rata-rata terakhir

lcd_puts(adece); // adece tampil ke LCD

lcd_gotoxy(10,1); // LCD baris 1 kolom 10

lcd_putsf("gram"); // tulisan “gram” tampil pada LCD

delay_ms(200); // waktu untuk tampil

ulang3=sum3=rata3=0; // nilaicounter, jumlah dan rata-rata 3 kembali ke 0

}

sum2=rata2=0; // nilai jumlah dan rata-rata 2 kembali ke 0

}

sum1=rata1=0; // nilai jumlah dan rata-rata 1 kembali ke 0

}

}

Dalam dokumen Alat penakar berat berbasis mikrokontroler. (Halaman 80-111)

Dokumen terkait