Penyusun
UCAPAN TERIMA KASIH
JUDUL i
LEMBAR PENGESAHAN ii
ABSTRAK iii
KATA PENGANTAR iv
UCAPAN TERIMA KASIH v
DAFTAR ISI vii
DAFTAR GAMBAR ix
DAFTAR TABEL x
BAB I : PENDAHULUAN 1
1.1 Latar Belakang 1
1.2 Tujuan 1
1.2.1 Umum 2
1.2.2 Khusus 2
1.3 Batasan masalah 2
1.4 Sistematika pembahasan 2
BAB V : PENUTUP 31
5.1 Kesimpulan 31
5.2 Saran-saran 31
DAFTAR PUSTAKA
DAFTAR GAMBAR
PENDAHULUAN
I.2.1. Umum
Untuk memenuhi salah satu persyaratan kurikulum akademis
pada program Diploma III Politeknik Elektronika Negeri Surabaya
Institut Teknologi Sepuluh Nopember Surabaya.
I.2.2. Khusus
Dalam penyelesaian Proyek Akhir ini, terdapat tujuan khusus
yang ingin dicapai antara lain:
Merancang serta membuat sebuah alat pendeteksi kerusakan
kabel tanah (varley loop tester) berbasis mikrokontroller.
BAB I : PENDAHULUAN
Membahas hal-hal yang berkaitan dengan latar
belakang pemilihan judul, tujuan, batasan
masalah dan sistematika pembahasan.
BAB V : PENUTUP
Bab ini merupakan bab penutup yang berisikan
kesimpulan dari hasil yang diperoleh setelah
dibandingkan dengan teori, serta berisi tentang
saran-saran atas kekurangan dan kelemahan dari
Proyek Akhir ini.
BAB II
TEORI PENUNJANG
2.1. Mikrokontroller
2.1.1. Mikrokontroller AVR
AVR merupakan seri mikrokontroller CMOS 8-bit buatan
Atmel, betbasis arsitektur RISC (Reduced Instruction Set Computer).
Hampir semua instruksi dieksekusi dalam satu siklus clock. AVR
mempunyai 32 register general-purpose, timer/ counter fleksibel
dengan mode compare, interrupt internal dan eksternal, serial UART,
programmable Watchdog Timer, dan mode power saving. Beberapa
diantaranya mempunyai ADC dan PWM internal. AVR juga
mempunyai In-System Programmable Flash on-chip yang
mengijinkan memori program untuk diprogram ulang dalam sistem
menggunakan hubungan serial SPI. Chip AVR yang digunakan
adalah Atmega16.
Atmega16 adalah mikrokontroller CMOS 8-bit daya-rendah
berbasis arsitektur RISC yang ditingkatkan. Kebanyakan intruksi
dikerjakan pada satu siklus clock, Atmega16 mempunyai throughput
mendekati 1 MIPS per MHz membuat disainer sistem untuk
mengoptimasi konsumsi daya versus kecepatan proses.
Beberapa keistimewaan dari AVR Atmega16 antara lain:
• Advanced RISC Architecture
1. 130 Powerful Instructions – Most Single Clock
Cycle Execution
2. 32 x 8 General Purpose Working Registers
3. Fully Static Operation
4. Up to 16 MIPS Throughput at 16 MHz
5. On-chip 2-cycle Multiplier
• Nonvolatile Program and Data Memories
1. 8K Bytes of In-System Self-Programmable Flash
♠ Endurance: 10,000 Write/ Erase Cycles
2. Optional Boot Code Section with Independent
Lock Bits
♠ In-System Programming by On-Chip Boot
Program
♠ True Read-While-Write Operati
3. 512 Bytes EEPROM
♠ Endurance: 100,000 Write/Erase Cycles
4. 512 Bytes Internal SRAM
5. Programming Lock
• Peripheral Features
1. Two 8-bit Timer/Counters with Separate Prescalers
and Compare Modes
2. One 16-bit Timer/Counter with Separate Prescaler,
Compare Mode, and Capture Mode
3. Real Time Counter with Separate Oscillator
4. Four PWM Channels
5. 8-Channel, 10-bit ADC
♠ 8 Single-ended Channels
♠ 7 Differential Channels for TQFP Package Only
♠ 2 Differential Channels with Programmable Gain
at 1x, 10x, or 200x for TQFP Package Only
6. Byte-oriented Two-wire Serial Interface
7. Programmable Serial USART
8. Master/Slave SPI Serial Interface
9. Programmable Watchdog Timer with Separate On-
chip Oscillator
10. On-chip Analog Comparator
• Special Microcontroller Features
1. Power-on Reset and Programmable Brown-out
Detection
2. Internal Calibrated RC Oscillator
3. External and Internal Interrupt Sources
4. Six Sleep Modes: Idle, ADC Noise Reduction,
Power-save, Power-down, Standby and Extended
Standby
• I/O and Packages
1. 32 Programmable I/O Lines
2. 40-pin PDIP, 44-lead TQFP, 44-lead PLCC, and
44-pad MLF
• Operating Voltages
1. 2.7 - 5.5V for ATmega16L
2. 4.5 - 5.5V for ATmega16
• Speed Grades
1. 0 - 8 MHz for ATmega16L
2. 0 - 16 MHz for ATmega16
Gambar 2.1. Pin-pin ATmega16 kemasan 40-pin
Fungsi Delay
Menghasilkan delay dalam program-C. Berada pada header delay.h
yang harus di-includekan sebelum digunakan. Sebelum memanggil
fungsi, interrupsi harus dimatikan terlebih dahulu, bila tidak maka
delay akan lebih lama dari yang diharapkan. Juga sangat penting
untuk menyebutkan frekuensi clock chip IC AVR yang digunakan
pada menu Project- Configure-C Compiler-Code Generation.
R1 R + Rb
= a (2-1)
R3 R4
Ra
R1
E
Rb
G
R3 R4
R1 ( Ra + Rb ) − R x (2-2)
=
R3 R4 + Rx
3.1. Pendahuluan
Pada bab ini akan dibahas mengenai perencanaan perangkat
lunak yang berhubungan dengan proses penyelesaian Proyek Akhir.
Berikut ini akan dibahas terlebih dahulu tentang blok diagram
perangkat keras dan flowchart perangkat lunak sebelum melangkah
ke prinsip dan cara kerja dari perangkat secara keseluruhan.
Keypad
Start
Inisialisasi ADC
Inisialisasi keypad
Inisialisasi LCD
R4=R3(Ra+Rb) / R1
Rx=R3(Ra+Rb)-(R1*R4) / R1+R3
N
1.5 mm²
N
Y 2.5 mm²
L=Rx:12.1 Ω/km N
Y 4 mm²
L=Rx:7.28 Ω/km Y
6 mm²
N
L=Rx:4.56 Ω/km
Y 10 mm²
L=Rx:3.03 Ω/km Y
L=Rx:1.81 Ω/km
Tampilkan
di LCD
End
VIN .1024
ADC = (3-1)
VREF
/*********************************************
This program was produced by the
CodeWizardAVR V1.24.0 Standard
Automatic Program Generator
© Copyright 1998-2003 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:office@hpinfotech.ro
Project :
Version :
Date : 7/20/2007
Author : Prima Dewi P
Company :
Comments:
Chip type : ATmega16
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*********************************************/
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15
#endasm
#include <lcd.h>
#include <delay.h>
#include <stdlib.h>
#define ADC_VREF_TYPE 0x40
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// 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
float dia_mm;
unsigned dia[4];
void ADC_view()
{ lcd_gotoxy(0,1);
ftoa(dia_mm,4,dia);
lcd_puts(dia);
lcd_putsf(" km");
}
void main(void)
{
// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("Varley Loop Test");
while (1)
{ delay_ms(1000);
dia_mm=read_adc(0);
ADC_view();
// Place your code here
};}
4.1. Pendahuluan
Perencanaan dan pembuatan alat yang telah diselesaikan
diharapkan mampu menghasilkan data atau informasi sesuai dengan
tujuan yang diharapkan.
Untuk mengetahui bahwa program kita berjalan dengan baik
atau tidak maka kita harus melakukan pengujian. Pengujian yang
dilakukan ini, untuk mendapatkan data pengukuran yang
dipergunakan sebagai bahan pertimbangan antara teori dengan data
yang diperoleh dari hasil percobaan, sekaligus melakukan setting
untuk mendapatkan tampilan output dari rangkaian yang mendekati
perhitungan. Pengujian tersebut dilakukan beberapa tahap. Adapun
pengujian yang akan dilakukan meliputi:
Pengujian ADC Mikrokontroller AVR ATmega 16
Pengujian minimum sistem AVR ATmega 16
Pengujian LCD
Pengujian Keypad
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15
#endasm
#include <lcd.h>
#include <delay.h>
#include <stdlib.h>
V I R4 Ra+Rb
Lx
V I R4 Rx Lx(m) Sebenarnya(m)
PENUTUP
5.1. Kesimpulan
Dari proses pengujian dan analisa serta pengambilan data
diatas, maka dapat diambil beberapa kesimpulan sebagai berikut:
1. Dalam perhitungan RaRb tegangan yang digunakan adalah
1,5 karena nilai R1 dan R3 sama dengan inputan 3 volt
2. Penulisan listing program menggunakan instruksi ”temp”
yaitu temporari sebagai batasan data yang diambil
3. Menggunakan resolusi 10 bit
4. ADC yang digunakan internal dari minimum sistem
Atmega16, dari settingan awal sebelum proses
pemrograman
5. Skala tegangan yang digunakan pada program
menggunakan arus maksimal 25A dari sensor
6. Resistansi jenis tanah mempengaruhi dalam proses
perhitungan pendeteksian kerusakan kabel tanah
5.2. Saran
Dari hasil yang didapat, maka alat ini sebenarnya masih jauh
dari kesempurnaan. Oleh karena itu, penulis ingin memberi saran
guna meningkatkan kinerja dari alat tersebut agar dapat dipakai
secara maksimal.
Adapun saran yang ingin disampaikan oleh penulis adalah
sebagai berikut:
Dalam pembuatan listing program menggunakan AVR
Atmega16 harus menggunakan block untuk penulisan program
yang sudah disediakan.
Pada saat pengambilan data, sebaiknya digunakan ADC dengan
resolusi 10 bit, Sehingga hasilnya dapat meminilisasi error
pembacaan. Dan data sudah sesuai dengan parameter.
DAFTAR PUSTAKA
/*********************************************
This program was produced by the
CodeWizardAVR V1.24.0 Standard
Automatic Program Generator
© Copyright 1998-2003 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:office@hpinfotech.ro
void dia_view2()
{ lcd_gotoxy(0,1);
//dia_mm=1234.4321;
ftoa(dia_mm,4,dia);
lcd_puts(dia);
lcd_putsf(" Ohm/km");
void R_view()
{ lcd_gotoxy(0,1);
ftoa(dia_mm,4,dia);
lcd_puts(dia);
lcd_putsf(" Ohm");
void L_view()
{ lcd_gotoxy(0,1);
ftoa(dia_mm,4,dia);
lcd_puts(dia);
lcd_putsf(" km");
}
void ADC_view()
{ lcd_gotoxy(0,1);
lcd_putsf("I:");
ftoa(Arus,4,dia);
lcd_puts(dia);
lcd_gotoxy(7,1);
lcd_putsf(" V:");
ftoa(Tegangan,4,dia);
lcd_puts(dia);
}
void pilih_kabel()
{ lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Pilih (UP/DN):");
if (no_kabel==0){ lcd_gotoxy(0,1); lcd_putsf("1.5
mm^2");res_kabel=12.1;};
if (no_kabel==1){ lcd_gotoxy(0,1); lcd_putsf("2.5
mm^2");res_kabel=7.28;};
if (no_kabel==2){ lcd_gotoxy(0,1); lcd_putsf("4
mm^2");res_kabel=4.56;};
if (no_kabel==3){ lcd_gotoxy(0,1); lcd_putsf("6
mm^2");res_kabel=3.03;};
if (no_kabel==4){ lcd_gotoxy(0,1); lcd_putsf("10
mm^2");res_kabel=1.81;};
}
void step0()
{
PORTD =0b11011111;
temp=0;
if (PIND.0==0)
{ while (PIND.0==0) { };
if (no_kabel>0) no_kabel--; else {no_kabel=4;} ;
pilih_kabel();
}; // up
PORTD =0b11101111;
temp=0;
if (PIND.1==0)
{while (PIND.1==0) { };
dia_mm=res_kabel;
dia_view2();
delay_ms(1000);
step_prog=1;
lcd_clear();
lcd_gotoxy(0,0);
R1=2.4;
R3=2.4;
lcd_putsf("Atr Glvno u RaRb");
}; // enter
if (PIND.0==0)
{ while (PIND.0==0) { };
if (no_kabel<4) no_kabel++; else {no_kabel=0;}
pilih_kabel();
;}; // down
}
void step1()
{
PORTD =0b11101111;
temp=0;
if (PIND.1==0)
{while (PIND.1==0) { };
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Nilai RaRb :");
RaRb=Tegangan/Arus;
step_prog=2;
dia_mm=RaRb;
R_view();
delay_ms(3000);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Atr Galvano u RX");
}; // enter
delay_ms(250);
adcI=read_adc(0);
adcV=read_adc(1);
Skala=2.5; // teg ADC
Arus=(adcI/1023)*Skala;
Skala=2.5;
Tegangan=(adcV/1023)*Skala;
ADC_view();
}
void step2()
{
PORTD =0b11101111;
temp=0;
if (PIND.1==0)
{while (PIND.1==0) { };
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Jarak RX :");
R4=Tegangan/Arus;
RX=((R3*RaRb)-(R1*R4))/(R1+R3);
dia_mm=RX;
L_view();
step_prog=3;
}; // enter
if (step_prog==2)
{
delay_ms(250);
adcI=read_adc(0);
adcV=read_adc(1);
Skala=2.5; // teg ADC
Arus=(adcI/1023)*Skala;
Skala=2.5;
Tegangan=(adcV/1023)*Skala;
ADC_view();
};
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In
Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T
State6=T State7=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In
Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T
State6=T State7=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In
Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T
State6=T State7=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In
Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T
State6=T State7=T
PORTD=0x00;
DDRD=0xF0;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE;
ADCSRA=0xA5;
SFIOR&=0x0F;
while (1)
{if (step_prog==0){ step0();};
if (step_prog==1){ step1();};
if (step_prog==2){ step2();};
};}