Disusun Oleh :
ALEXANDER DAVID SIHOTANG
NIM. 10/298535/NT/13968
Disusun Oleh :
ALEXANDER DAVID SIHOTANG
NIM. 10/298535/NT/13968
PERNYATAAN
Dengan ini saya menyatakan bahwa proyek akhir ini tidak terdapat karya
yang pernah diajukan untuk memperoleh ahli madya di suatu perguruan tinggi,
dan sepanjang pengetahuan saya tidak terdapat karya atau pendapat yang pernah
ditulis atau diterbitkan oleh orang lain, kecuali yang secara tertulis diacu dalam
naskah ini dan disebutkan dalam daftar pustaka.
INTISARI
Perkembangan
kemajuan
teknologi merupakan
hal
yang sangat
ABSTRACT
MOTTO
PERSEMBAHAN
Karya kecil ini saya persembahkan untuk :
Kedua orang tua Bapak dan Ibu yang sangat saya cintai dan selalu
menyayangi, membimbing, memberi semangat, dan mendoakan. Adik ku yang
selalu memberi semangat dan dorongannya agar dapat menyelesaikan proyek
akhir. Sahabat- sahabat, dan saudara-saudara ku semua yang tidak dapat
disebutkan satu- satu terimakasih atas dukungan dan doanya.
PRAKATA
Puji syukur kepada Tuhan yang Maha ESA atsa karunianya, berkah, serta
anugerahnya-Nya sehingga saya sendiri dapat menyelesaikan dan menyusun
Laporan Tugas Akhir dengan baik dan lancar sehingga laporan ini dapat
terselesaikan.
Laporan ini disususn untuk menyelesaikan salah satu persyaratan dalam
menyelesaikan pendidikan di Program Diploma Teknik Elektro UGM. Dalam
laporan Tugas Akhir ini saya mengambil judul Bel Sekolah Terprogram Berbasis
Mikrokontroler
4.
pendidikan
di
Program
Diploma
Teknik
Elektro
Penyusun
DAFTAR ISI
44
DAFTAR GAMBAR
Gambar 2.1
Gambar 2.2
Gambar 2.3
Gambar 2.4
Gambar 2.5
Gambar 2.6
Gambar 2.7
Gambar 2.8
Gambar 2.9
Gambar 3.2
Gambar 3.3
Gambar 3.4
Gambar 3.5
Gambar 3.6
Gambar 3.7
Gambar 3.8
Gambar 3.9
Tombol 4x1.............................................................................. 41
Gambar 4.1
Gambar 4.2
Gambar 4.3
Gambar 4.4
Gambar 4.5
Gambar 4.6
Gambar 4.7
Gambar 4.8
Gambar 4.9
DAFTAR TABEL
BAB I
PENDAHULUAN
1.1
Latar Belakang
Seiringnya dengan kemajuan zaman sehingga hampir semua yang manual
1.2
1.3
1.4
Batasan Masalah
Mengenai ruang lingkup batasan masalah yang akan digunakan dibatasi
tombol
yang
dipergunakan
untuk
mempermudah
1.5
1.6
berikut :
BAB I PENDAHULUAN
Membahas tentang judul tugas akhir, latar belakang masalah, maksud dan
tujuan, batasan masalah, metode pengumpulan data, dan sistematika penulisan.
BAB V PENUTUP
Membahas tentang kesimpulan dan saran sehingga tugas akhir ini dapat
dikembangkan lebih lanjut dalam masyarakat yang menggukan alat tersebut.
BAB II
DASAR TEORI
2.1
Catu Daya
Perangka elektronika seharusnya dicatu oleh sumber listrik searah DC
(direct current) yang stabil agar dapat bekerja dengan baik sesuai dengan
kegunaan dan perancangannya. Baterai atau accu adalah sumber catu daya DC
yang paling baik. Namun apabila digunakan untuk apikasi yang membutuhkan
catu daya lebih besar, sumber dari baterai atau accu tidak akan cukup. Sumber
catu daya yang lain adalah sumber listrik bolak balik AC (altrnating carrent) dari
pembangkit tenaga listrik. Untuk mengubah menjadi tegangan DC yang baik dan
stabil diperlukan suatu tahapan proses yang secara umun diperhatikan pada
Gambar 2.1.
Transformator
Transformator (trafo) adalah alat yang dapat menaikan dan menurunkan
tegangan sesuai dengan kebutuhan. Transformator ternuat dari suatu terah baja
lunak tertutup yang berlais lapis dilengkapi dengan kumparan primer dan
sekunder. Apabila kemparan orimer P dihubungkan pada arus bolak balik, maka
akan timbul arus gaya magnet yangakan menginduksi kumparan primer P juga
kumparan sekunder S. Besar tegangan kumparan sekunder S terinduksi tergantung
pada jumlah lilitan kumparan primer P dan sekunder S ditunjukan pada Gambar
2.2.
keluaranl. Apabila jumlah lilitan pada kumparan sekundernya lebih tinggi nilainya
dari pada tegangan yang masuk dan sebagainya.
Hubungan tersebut dinyatakan dengan persamaan :
U1 : U2 = N1 :N2
Dimana : U1 : tegangan primer
N1 : jumlah lilitan primer
2.1.2
U2 : teganan sekunder
N2 : jumlah lilitan sekunder
Rangkaian Peyearah
Untuk mendapatkan supply tegangan DC, dibutuhkan rangkaian penyearah
a. Peyearah Jembatan
b. Bentuk Gelombang
2 GND
Berfungsi sebagai ground
3 SDA
Berfungsi sebagai masukan / keluaran (I/O) untuk 12C serial
interface. Pin ii bersifat open drain, sehingga membutuhkan resistor
pull up.
4 SCL
Berfungsi sebagai clock untuk input 12C dan digunakan untuk
mensingkronisasikan
pergerakan
data
dalam
serial
interface.
2.2.3 Register-register
register DS 1307
RTC DS 1307 mempunyai 8 pemetaan alamat (address
(address map
map) pada RTC
dimana register-register
register RTC di tempatkan pada lokasi pengalamatan 00h sampai
07h. Sedangkan register
register-register RAM (Ramdom
Ramdom Access Memory)
Memory ditempatkan
pada lokasi pengalamatan 08h samapai 3Fh.
Tabel 2.1 Peta alamat RTC DS1307
Bit -7
Output Control (OUT) yaitu, jika pin SQW/OUT di-disable
sehingga tidak mengeluarkan clock, bit-7 ini menentukan level sinyal
yang keluar dari pin SQW/OUT. Jika bit-7 ini LOW, maka level pin
SQW/OUT ikut LOW dan jika bit-7 ini HIGH, maka level pin
SQW/OUT ikut HIGT
2. Bit-4
Squqre-wave Enable digunakan untuk enable/disable keluarnya clock
dari pin SQW/OUT. HIGH berarti enable dan LOW berarti disable.
Frekuensi sinyal clock yang keluar dari pin SQW/OUT ditentukan oleh
kondisi bit-1 dan bit-0
3. Bit 1 dan 0
Rate Selectr (RS1,RS0) unutk menentukan frekuensi yang keluar dari
pin SQW/OUT. Kombinasi nilai RS0 dan RS1 menghasilkan output
gelombang kotak dengan nilai frekuensi masing-masing.
Tabel 2.3 Rate select (RS1 dan RS0)
2.3
Mikrokontroler Atmega
2.3.1
sebuah chip mikrokontroler telah terintegrasi memori, CPU, dan I/O. Hal tersebut
membuat mikrokontroler dapat langsung dibuat sistem dengan menambahkan
sebuah
peripheral
lain.
Sifat
mikrokontroler
yang
mampu
diprogram
Seperti terlihat pada Tabel 2.4 semua jenis AVR ini telah dilengkapi
dengan memory flash yang memiliki bervariasi dari 1KB 128 KB. Secara teknis
memori jenis ini dapat diprogram melalui saluran antarmuka yang dikenal dengan
nama Serial Peripheral Interface (SPI) yang terdapat pada setiap seri AVR
tersebut. Dengan menggunakan perangkat lunak programmer yang tepat,
pengisian memori flash dengan menggunakan saluran SPI ini dapat dilakukan
bahkan chip AVR telah terpasang pada sistem akhir, sehingga pemrograman
sangat fleksibel dan tidak merepotkan pengguna dan metode ini secara praktis
dengan nama ISP (In System Programming).
2.3.2
10. Untuk kemasan TQFP ADC dapat diatur 7 buah kanal jenis diferensial
dan khusus 2 kanal dengan penguatan yang dapat diatur melalui
register sebesar 1x, 10x atau 20x
11. Antarmuka kominikasi serial USART yang dapat diprogram dengan
kecepatan maksimal 2,5 Mbps
12. Antarmuka SPI master/slave
13. Watchdog timer dengan osilator di dalam chip yang dapat diprogram
14. Terdapat komprator analog didalam chip
15. Terdapat pendeksian tegangan gagal yang dapat diprogram (brownout
detection)
16. Osilator RC internal yang terkalibrasi
17. Sumber interupsi eksternal dan internal
18. Terdapat pilihan mode sleep : idle, pereduksian noise ADC,
penghematan daya konsumsi, penurunan daya,dan kondisi standby
19. Terdapat 32 pin masukan dan inputan yang terprogram
20. Tegangan pengoprasian
a. 2,7 5,5 Volt untuk ATMEGA32L
b. 4,5 5,5 Volt untuk ATMEGA32
21. Kecepatan
a. 0 8 MHz untuk ATMEGA32L
b. 0 16 MHz untuk ATMEGA32
22. Konsumsi daya pada 1 MHz, 3 Volt, suhu 25C untul ATMEGA32L
a.
Aktif
: 1,1 mA
b.
Mode
: 0,35 mA
c.
Mode
: kurang dari 1 uA
Nama
10
VCC
11,31
GND
30
AVCC
32
AREF
1 -- 8
PB0 -- PB7
33 -- 40
PA0 -- PA7
14 -- 21
PD0 -- PD7
22 -- 29
PC0 -- PC7
RESET
12, 13
XTAL 1
dan 2
Fungsi
ATMEGA32
memiliki
arsitektur
Harvard
yaitu,
memisahkan memori untuk kode program dan memori untuk data sehingga dapat
memaksimalkan kerja dan paralelisme. Instruksi instruksi dalam memori
program dieksekusi dalam satu alur tunggal, dimana pada saat satu intruksi
dikerjakan instruksi berikutnya sudah diamabil (pre-fethed) dari memori program.
Konsep inilah yang memungkinkan instruksi instruksi dieksekusi dalam setiap
satu siklus clock.
32 x 8 register serbaguna untuk mendukung operasi pada Artihmetic Logic
Unit (ALU) yang dapat dilakukan dalam satu siklus. 6 dari register ini dapat
digunakan sebagai 3 buah registerpointer 16-bit padamode pengalamatan tak
langsung unutk mengambil data ruang memori data. Ketiga register pointer 18-bit
ini disebut dengan register X, register Y, dan register Z.
Hampir semua intruksi AVR memiliki format 16-bit (word). Setiap alamat
program terdiri dari instruksi 16-bit atau 32-bit. Selain itu register serbaguna
diatas, terdapat register lain yang terpetakan dengan teknik memori mapped I/O
selebar 64 Byte. Beberapa register control Timer/Counter, Interupsi, ADC,
USART, SPI, EEPROM, dan fungsi I/O lainnya. Register register ini
menempati memori pada alamat 0x20 - 0x3fh.
2.3.5 Peta Memori ATMEGA32
2.3.5.1 Memori ATMEGA32
Arsitektur AVR mempuyai 2 memori utama yaitu, memori data dan
memori program. Selain itu ATMEGA32 memilik memori EEPROM untuk
menyimpan
data.
ATMEGA32
memiliki
32Kbyte
On-chip
In-system
menyimpan data informasi yang tidak boleh hilang saat catu daya dimatikan tetapi
bisa diperbarui, misalnya untuk data ID, kata kunci (passowrd), dan lain lain.
LCD 162
atau angka yang terbaca. Huruf atau angka yang akan ditampilkan dikirim ke
LCD dalam bentuk kode ASCII, kode ASCII ini diterima dan diolah oleh
mikrokontroler didalam LCD menjadi titik-titik LCD yang terbaca sebagai huruf
atau angka. Dengan demikian tugas mikrokontroler pemakai tampilan LCD
hanyalah mengirimkan kode-kode ASCII untuk tampilan.
Berikut spesifikasi dari LCD secara umum :
1. Jumlah baris
2. Jumlah karakter perbaris
3. Tegangan kerja
Fungsi dari pin pada LCD karakter :
1. Pin 1 : Vss/GND : Tegangan 0 volt atau ground
2. Pin 2 : Vcc : Tegangan Vcc
3. Pin 3 : VEE/Vcontrast : Tegangan pengatur kontras pada LCD
4. Pin 4 : RS : 0 : Instruksi 1 : Data
5. Pin 5 : R/W : Signal yang masuk digunakan untuk memilih mode
membaca atau menulis 0 : menulis 1 : membaca
6. Pin 6 : E : Untuk mulai mengirim data atau intruksi
7. Pin 7 sampai dengan pin 14 : Untuk mengirimkan data kerakter
8. Pin 15 dan Pin 16 : Untuk mengatur cahaya pada background atau
insruksi.
LCD ini hanya memerlukan daya yang sangat kecil, tegangan yang
dibutuhkan juga sangat rendah yaitu 5V.
Symbol
Level
Keterangan
Vss
Dihubungkan ke 0 V (Ground)
Vcc
Vee
RS
H/L
R/W
H/L
DB0
H/L
Pin data D0
DB1
H/L
Pin data D1
DB2
H/L
Pin data D2
10
DB3
H/L
Pin data D3
11
DB4
H/L
Pin data D4
12
DB5
H/L
Pin data D5
13
DB6
H/L
Pin data D6
14
DB7
H/L
Pin data D7
15
V+BL
16
V-BL
IC UM3483
pin
keterangan
TSP
CE
LP
SL
AS
NC
Tidak dihubungkan
ENV
Envelope
GND
Ground
MTO
10
OP1
Pre-amplifier output 1
11
OP2
Pre-amplifier output2
12
MT1
13
NC
14
OSC2
15
OSC1
16
VCC
Tidak dihubungkan
BAB III
PERANCANGAN ALAT
Pada bab ini akan dibahas dalam mekanisme perancangan alat dari
perangkat keras (hardware) ataupun perangkat lunak (software). Tahap pertama
dimulai dari desain alat, perancangan blok diagram sistem perangcangan
perangkat keras (hardware), serta perancangan perangkat lunak (software).
3.1 Perancangan Alat
3.1.1 Blok Diagram
Berikut adalah blok diagram dari skema BEL SEKOLAH TERPROGRA
BERBASIS MIKROKONTROLER ATMega32 agar dapat dengan mudah
mengetahui sistem kerja pada alat tersebut.
bersumber dari tegangan 220 PLN yang diturunkan oleh transformator stepdown
dah disearahkan oleh penyearah gelombang penuh kemudian diregulasi oleh
regulator 7805 namu sisi kelebihan yang lain pada alat ketika listrik pada PLN
mati alat tetap menyala karena tegangan disimpan pada aki.
3.1.2 Rangkaian Catu Daya
Setiap rangkaian catu daya tentunya membutuhkan catu daya sehingga
perancangan catu daya menjadi sangat penting. Rangkaian catu daya dibuat terdiri
dari transformator, rangkaian penyearah transfer switch, filter dan regulator
.Catu daya digunakan pada rangkaian ada 2, yaitu catu daya tegangan 5V dan catu
daya 12. Catu daya dengan output tegangan 5V digunakan sebagai suplly sistem
tagangan ATMEGA32, LCD, dan RTC.
Alat ini dibuat untuk tujuan mengkondisi suatu sekolah yang ingin memiliki
ketepatan waktu dan efisiensi waktu pada jam pelajaran disekolah agar dapat
memaksimalkan jam pelajaran. Dimana waktu ketika saat proses akademik di
kebanyakan sekolah dapat terbuang percuman karena kurangnya efisiensi waktu
ketika saat pergantian jam pelajaran, jam masuk sekolah, jam istirahat,dan jam
pulang sekolah.
Ketika menggunakan alat ini semua dapat diproses secara otomatis hanya
dengan memasukan jadwal ataupun waktu yang dipakai di setiap sekolah. Waktu
akan secara otomatis tersimpan di RTC (Real Time Clock) ketika sudah
Hari
2. Waktu yang meliputi jam, menit, detik, tanggal, bulan dan tahun
3. Alaram
Bagian-bagian tersebut terhubung menjadi satu agar alat dapat berjalan
dengan baik. Sedangkan block catu daya difungsikan sebagai catudaya bagian
input, uotput, dan kontroler.
3.1.4
ataupun output. Berikut adalah rangkaian dari sistem ATMEGA32. Criystal yang
digunakan pada sistem ini adalah sebesar 12 MHz serta 2 buah kapasitor keramik
bernilai 22 pF.
Adapun fungsi-fungsi dari port yang akan digunakan pada Gambar 3.3 diatas,
yaitu :
1
Keterangan LCD
Port Mikrokontroler.
1
2
4
5
6
11
12
13
14
15
16
GND
VCC
RS
RW
EN
D4
D5
D6
D7
NC
NC
GND
VCC
PortB.0
PortB.1
PortB.2
PortB.3
PortB.4
PortB.5
Port B.6
PortB.7
GND
= 56K
R5
= 330K
VR trimpot
= 100K
C1
= 33pF
C2
= 20nF/10V
C3
= 20nf
C4
= 100nF/10V
C5
= 20uF/10V
C6
= 100uf
C7
= 4,7uF/10V
Q1
= 9012
Q2
= 9013
IC
= UM 3483
SW
= Push ON
LS
= 8Ohm
sistem aklif
low.
Pada
Perangkat Lunak
menjadi
file
hexadesimal dengan ekstensi file *.hex. File .hex ini kemudian di-download
ke dalam mikrokontroler dengan menggunakan perangkat lunak AVR MKII
melalui perantara USB Downloader.
3.2.2 Flowchart
Flowchart digunakan sebagai dasar acuan dalam membuat program,
berikut ini adalah flowchart keseluruhan sistem
mulai
Inisialisai Port,
ADC, RTC
Tampilkan Waktu,
Tanggal dan
Kondisi Batry
Data RTC=
Data
EEPROM?
Tampilkan Menu
ya
Nyalakan Lagu Alarm
Tombol ok
Ditekan?
If
detik==18
ya
ya
Ya
Set waktu
Atur Jam
tdk
Ya
Set
tanggal
Atur tanggal
tdk
Ya
Set
alaram
tdk
Atur Alarm
BAB IV
PENGUJIAN DAN PEMBAHASAN
Pada bab ini membuat hasil dari pengujian dan pembahasan agar dapat
mengetahui sistem kerja rangkaian. Dari rangkaian tesebut kemudian dilakukan
pengujian agar dapat mengetahui dan mendapatkan data. Kemudian dari data
tersebut akan dibandingkan dengan penyesuaian dari teori-teori yang sudah
didapatkan. Tujuan utama dari pengujian ini adalah untuk membuktikan apakah
sistem yang dipergunakan pada alat telah memenuhi spesifikasi yang telah
direncanakan
sebelumnya.
Hasil
pengujian
akan
dimanfaatkan
untuk
Pengujian Fungisonal
Pengujian funsional bagian demi bagian dan sistem keseluruhan yang
terdapat pada rangkaian terdiri dari pengujian rangkaian catu daya, sistem
minimum mikrokontroler ATMega32, rangkaian bel, dan software.
Vout
No
Bagian
Tanpa
Beban
beban
penuh
5V
5V
4,95 V
12 V
12 V
11.8 V
Vin
Regulator
1
7805
Regulator
2
7812
Bentuk gelombang
Tegangan Terukur
No
Bagian
Vin
Tanpa
Beban
Beban
Penuh
3.
Ground
0V
0V
0V
Bentuk Gelombang
Tegangan terukur
No
Bagian
Tanpa
Beban
beban
penuh
5V
4.95 V
12 V
11.96 V
0V
0V
Bentuk gelombang
Regulator
1
7805
Regulator
2
7812
Ground
output dari catu daya tersebut terdapat led indikator, apabila led menyala
menunjukan bahwa tegangan sudah mengalir pada rangkaian. Regulasi beban
biasanya dipengaruhi aleh faktor ripple (riak) dan koefisien suhu dari komponen
yang digunakan. Regulasi beban dapat dicari menggunakan rumus sebagai
berikut.
%Reg. Beban =
100%
100%=1%
,
100% = 0,33%
merupakan
unit
sebagai
pengontrol
utama
dari
Mikrokontroler
ATMega32
LCD 162
RTC DS1307 digunakan sebagai pewaktu jam digital dan kalender yang
merupakan tampilan utama sistem yang digunkan. Jam digital menunjukan data
waktu untuk jam, menit dan detiknya, terdapat pula tamabahan waktu untuk hari,
tanggal, bulan dan tahun. Fungsi utama dari rangkaian ini difungsikan sebagai
pewaktu untuk penanda bel sekolah otomatis. Contoh pada saat masuk sekolah
jam 07.15 WIB maka alat akan bekerja secara otomatis sesuai dengan pengaturan
waktu yang telah ditentukan oleh pihak sekolah. Blok diagaram perancangan
seperti gambar dibawah ini :
RTC DS1307
Mikrokontroler
ATMega32
LCD 162
Stopwatch
00 : 10 : 00
00 : 10 : 00
00 : 45 : 00
00 : 45 : 00
01 : 00 : 00
01 : 00 : 00
02 : 00 : 00
02 : 00 : 00
Terlihat dari data tabel pengujian keakuratan RTC dengan stopwach diatas
dapat diketahui bahwa waktu pada RTC sudah tepat waktu dan akurat. Berikut
adalah Gambar 4.3 pengujian dengan stopwatch.
Mikrokontroler
ATMEGA32
OK
Gambar 4.4 Blok Diagram Pengujian Tombol
MENU
UP
DOWN
OK
MENU
UP
DOWN
OK
4,8
4,8
4,8
4,8
4,8
4,8
4,8
4,8
4,8
4,8
4,8
4,8
bertugas sebagai penanda pada battery pada keadaan full, medium, low, dan very
low.
Keterangan LED :
1. Indikator LED menyala secara keseluruhan untuk battery full
2. Indikator LED menyala hanya tiga keadaan untuk battery medium
3. Indikator LED menyala hanya dua keadaaan untuk battery low
4. Indikator LED menyala hanya satu keadaan untuk battery very low
Berikut salah satu gambar pada saat percobaan keadaan battery full lampu
indikator LED akan menyala semua.
dalam keadaan listrik mati maka battery atau aki akan segera menggantikan peran
dari listrik menjadi penyuplai tegangan pada rangkaian agar tetep berjalan dengan
keinginan, dan pada saat listrik menyala battery akan terisi secara otomatis
sebagai tenaga cadangan pada rangkaian. Terlihat seperti gambar berikut ini.
Hasil Pengujian
NO
Keterangan
Waktu
Waktu
Keterangan bel
6.30
6.30
Lagu 2
Masuk
7.15
7.15
lagu 1
Pelajaran ke-2
8.00
8.00
lagu 1
Pelajaran ke-3
8.45
8.45
lagu 1
Pelajaran ke-4
9.30
9.30
lagu 3
Istirahat-1
9.45
9.45
Lagu 2
Masuk
10.30
10.30
lagu 1
Pelajaran ke-6
11.15
11.15
lagu 1
Pelajaran ke-7
12.00
12.00
lagu 3
Istirahat-2
10
12.15
12.15
Lagu 2
Masuk
11
13.00
13.00
lagu 4
Pulang
minggu tanpa mematikan hingga berakhir. Pengujian hari libur tersaji pada Tabel
4.6.
Tabel 4.6 Tabel Pengujian Hari Libur
Pengujian
Hasil Pengujian
NO
Keterangan
Hari & Tanggal
Hari&Tanggal
Ket. Bel
Senin, 7-10-2013
Senin, 7-10-2013
Nyala
Hari Biasa
Selasa, 8-10-2013
Selasa, 8-10-2013
Nyala
Hari Biasa
Rabu, 9-10-2013
Rabu, 9-10-2013
Nyala
Hari Biasa
Kamis, 9-10-2013
Nyala
Hari Biasa
Jumat, 11-10-2013
Nyala
Hari Biasa
Sabtu, 12-10-2013
Nyala
Hari Biasa
Mati
Minggu
Jumat, 11-102013
Sabtu, 12-102013
Kamis, 10-102013
Minggu, 13-10-
Minggu, 13-10-
2013
2013
Pengujian ini meliputi analisa program dari bagian per bagian. Didalam
Pemograman bahasa C sendiri terdapat beberapa blok penulisan seperti header,
deklarasi konstanta, deklarasi variabel, deklarasi fungsi, program fungsi dan
program utama. Berikut ini akan dijelaskan beberapa blok atau bagian yang
digunakan didalam pemograman rangkaian dari segi sistem minimum
mikrokontroler ATMega32, antara lain :
4.3.1 Header
Bagian header meliputi :
#include <mega32.h>
#include <delay.h>
#include <i2c.h>
#include <ds1307.h>
#include <alcd.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
//header ATmega32
//header delay
//I2C Bus functions
//DS1307 Real Time Clock functions
//Alphanumeric LCD functions
//standar Input/Output
//
//standar liburary
#define
#define
#define
#define
ok
!PINC.4 //definsi tombol ok di PINC.4
down !PINC.3 //definsi tombol down di PINC.3
up
!PINC.2 //definisi tombol up di PINC.2
cancel !PINC.1 //definisi cancel di PINC.1
dimana
pada
program
ini
program
define
digunakan
untuk
4.3.3
Deklarasi Fungsi
Merupakan subprogram utama yang menjalankan suatu fungsi tertentu.
Program fungsi ini akan dijalankan apabila dipanggil, baik dipanggil dalam
program utama maupun program fungsi lainnya. Pada pemrograman rangkaian
ini menggunakan beberapa fungsi, antara lain :
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
if(down){while(up);v_week_day--;if(v_week_day<=0)v_week_day=6;}
//decerement nilai variable hari
if(ok){while(ok);setting_tanggal();} //if ok pergi ke fungsi setting tanggal
if(cancel){while(cancel);rtc_main();} //if cancel pergi fungsi rtc main
}
}
tampil_lcd(0,1,"%s%2i: :%4i",dday[v_week_day],v_day,v_year);
delay_ms(50);
if(up){while(up);v_month++;if(v_month>12)v_month=1;}
if(down){while(up);v_month--;if(v_month<=0)v_month=12;}
if(ok){while(ok);setting_tahun();}
if(cancel){while(cancel);rtc_main();}
}
}
tampil_lcd(3,0,"Pilih hari");
if(up){while(up);pointer++;if(pointer>6)pointer=1;}
if(down){while(down);pointer--;if(pointer<1)pointer=6;}
switch(pointer){
case 1 : hari=1;tampil_lcd(0,1,"senin ");break;
case 2 : hari=2;tampil_lcd(0,1,"selasa");break;
case 3 : hari=3;tampil_lcd(0,1,"rabu ");break;
case 4 : hari=4;tampil_lcd(0,1,"kamis ");break;
case 5 : hari=5;tampil_lcd(0,1,"jumat ");break;
case 6 : hari=6;tampil_lcd(0,1,"sabtu ");break;
}
if(ok){while(ok);goto setwaktu;}
if(cancel){while(cancel);rtc_main();}
}
setwaktu:
lcd_clear();
while(1){
tampil_lcd(3,0,"Set Alarm[%2d]",cacah+1);
delay_ms(50);
tampil_lcd(3,0,"Set Alarm[ ]",cacah+1);
delay_ms(50);
if(up){while(up);cacah++;if(cacah>9)cacah=0;}
if(down){while(down);cacah--;if(cacah<=0)cacah=9;}
if(ok){while(ok);goto bawah;}
if(cancel){while(cancel);rtc_main();}
}
bawah:
lcd_clear();
if(hari==1)alarm=cacah;
if(hari==2)alarm=cacah+10;
if(hari==3)alarm=cacah+20;
if(hari==4)alarm=cacah+30;
if(hari==5)alarm=cacah+40;
if(hari==6)alarm=cacah+50;
while(1){
tampil_lcd(0,1,"%2d:%2d lagu:%2d
",alarm_jam[alarm],alarm_menit[alarm],alarm_lagu[cacah]);
delay_ms(50);
tampil_lcd(0,1," :%2d lagu:%2d ",alarm_menit[alarm],alarm_lagu[cacah]);
delay_ms(50);
if(up){while(up);alarm_jam[alarm]++;if(alarm_jam[alarm]>23)alarm_jam[alarm]
=0;}
if(down){while(down);alarm_jam[alarm]-;if(alarm_jam[alarm]<0)alarm_jam[alarm]=23;}
if(ok){
while(ok);
ee_jam[alarm]=alarm_jam[alarm];
goto set_menit;
}
}
set_menit:
delay_ms(500);
lcd_clear();
while(1){
tampil_lcd(0,1,"%2d:%2d lagu:%2d
",alarm_jam[alarm],alarm_menit[alarm],alarm_lagu[cacah]);
delay_ms(50);
tampil_lcd(0,1,"%2d: lagu:%2d ",alarm_jam[alarm],alarm_lagu[cacah]);
delay_ms(50);
if(up){while(up);alarm_menit[alarm]++;if(alarm_menit[alarm]>59)alarm_menit[a
larm]=0;}
if(down){while(down);alarm_menit[alarm]-;if(alarm_menit[alarm]<0)alarm_menit[alarm]=59;}
if(ok){
while(ok);
ee_menit[alarm]=alarm_menit[alarm];
goto set_lagu;
}
}
set_lagu:
delay_ms(500);
lcd_clear();
while(1){
tampil_lcd(0,1,"%2d:%2d lagu:%2d
",alarm_jam[alarm],alarm_menit[alarm],alarm_lagu[cacah]);
delay_ms(50);
tampil_lcd(0,1,"%2d:%2d lagu: ",alarm_jam[alarm],alarm_menit[alarm]);
delay_ms(50);
if(up){while(up);alarm_lagu[cacah]++;if(alarm_lagu[cacah]>9)alarm_lagu[cacah]
=1;}
if(down){while(down);alarm_lagu[cacah]-;if(alarm_lagu[cacah]<1)alarm_lagu[cacah]=9;}
if(ok){
while(ok);
ee_lagu[cacah]=alarm_lagu[cacah];
goto atas;
}
if(cancel){
while(cancel);
ee_lagu[cacah]=alarm_lagu[cacah];
goto setwaktu;
}
}
}
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if(week_day == 1)
for(j=10;j<20;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j-10]-=1;
putar=alarm_lagu[j-10];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if(week_day == 2)
for(j=20;j<30;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j-20]-=1;
putar=alarm_lagu[j-20];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if(week_day == 3)
for(j=30;j<40;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j-30]-=1;
putar=alarm_lagu[j-30];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if(week_day == 4)
for(j=40;j<50;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j-40]-=1;
putar=alarm_lagu[j-40];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if(week_day == 5)
for(j=50;j<60;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j-50]-=1;
putar=alarm_lagu[j-50];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if ((__ADC >= 90) && (__ADC <= 95)){
tampil_lcd(0,0,"Vlow");
PORTD = 0b1000000;
}
if ((__ADC >= 96) && (__ADC <= 100)){
tampil_lcd(0,0,"Low ");
PORTD = 0b1100000;
}
if ((__ADC >= 101) && (__ADC <= 105)){
tampil_lcd(0,0,"Med ");
PORTD = 0b1110000;
}
if (__ADC >= 106){
tampil_lcd(0,0,"Full ");
PORTD = 0b1111100;
}
loncat:
if(cancel){while(cancel);menu();}
}
ADCSRA=0x86;
SFIOR&=0xEF;
lcd_init(16);
tampil_lcd (0,0,"Bel Sekolah ");
tampil_lcd (0,1,"Brbsis Mikro ");
delay_ms(1500);
lcd_clear();
}
BAB V PENUTUP
5.1
Kesimpulan
Setelah melakukan berbagai percobaan dan analisis terhadap alat yang
Saran
Apabila alat ini ingin dikembangkan terdapat beberapa kemungkinan yang
DAFTAR PUSTAKA
[1] Data sheet ATMega32, Regulator 7805,RTC DS1307, UM3483, LCD 16x2,
diakses di http://www.alldatasheet.com
[2] Bejo, Agus., C & AVR Rahasia Kemudahan Bahasa C dalam Mikrokontroler
ATmega 8535, Graha Ilmu, Yogyakarta, 2008.
[3] Eko putra, Agfianto, Mikrokontroler AT89 dan AVR, Gava Media;
Yogyakarta 2010.
[4] Wibawanto, Hari, Elektronika Dasar, Elex Media Komputindo, Yogykarta
2009.
LAMPIRAN
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.3 Standard
Automatic Program Generator
Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 29/9/2013
Author : Alexander David Sihotang
Company : Diploma Teknik Elektro
Comments:
Chip type
: ATmega32
Program type
: Application
AVR Core Clock frequency: 12.000000 MHz
Memory model
: Small
External RAM size
:0
Data Stack size
: 512
*****************************************************/
#include <mega32.h>
#include <delay.h>
#include <i2c.h>
#include <ds1307.h>
#include <alcd.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
//header ATmega32
//header delay
//I2C Bus functions
//DS1307 Real Time Clock functions
//Alphanumeric LCD functions
//standar Input/Output
//
//standar liburary
#define
#define
#define
#define
ok
!PINC.4 //definsi tombol ok di PINC.4
down !PINC.3 //definsi tombol down di PINC.3
up
!PINC.2 //definisi tombol up di PINC.2
cancel !PINC.1 //definisi cancel di PINC.1
int v_year;
unsigned int pointer, alarm, j;
unsigned char __ADC;
signed char alarm_jam[60],alarm_menit[60],alarm_lagu[20];
/*===============Deklarasi Variable EEPROM==============*/
__eeprom int ee_jam[60]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
ee_menit[60]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
ee_lagu[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/*==================Deklarasi Prototype FUngsi==============*/
void setting_jam();
void set_alarm();
void setting_menit();
void setting_hari();
void setting_tanggal();
void setting_bulan();
void setting_tahun();
void menu();
void rtc_main();
/*=======================Fungsi Read_ADC================*/
unsigned char 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 ADCH;
}
/*================Fungsi Tampil
LCD=========================*/
void tampil_lcd(unsigned char kolom,unsigned char baris,char flash*fmtstr,...){
char lcd[17];
va_list(ap);
va_start(ap,fmtstr);
vsprintf(lcd,fmtstr,ap);
va_end(ap)
lcd_gotoxy(kolom,baris);
lcd_puts(lcd);
}
/*========================Fungsi Setting Nilai
Jam==================*/
void setting_jam(){
lcd_clear(); //menghapus lcd dari data sebelumnya
while(1){
delay_ms(50);
tampil_lcd(7,0,"%2i:%2i:00",v_hour,v_minute); //menampilkan nilai
variable settingan jam, menit
delay_ms(100);
tampil_lcd(7,0," :%2i:00",v_minute);
if(up){while(up);v_hour++;if(v_hour>23)v_hour=0;} //increment nilai
variable jam
if(down){while(up);v_hour--;if(v_hour<=0)v_hour=23;} //decrement nilai
variable jam
if(ok){while(ok);setting_menit();} //if ok pergi ke fungsi setting menit
if(cancel){while(cancel);rtc_main();} //if cancel pergi ke fungsi rtc main
}
}
/*===================Fungsi Setting Menit====================*/
void setting_menit(){
lcd_clear(); //menghapus lcd dari data sebelumnya
while(1){
delay_ms(50);
tampil_lcd(7,0,"%2i:%2i:00",v_hour,v_minute);//menampilkan nilai variable
settingan menit
delay_ms(100);
tampil_lcd(7,0,"%2i: :00",v_hour);
if(up){while(up);v_minute++;if(v_minute>59)v_minute=0;}//increment nilai
variable menit
if(down){while(up);v_minute--;if(v_minute<=0)v_minute=59;} //decrement
nilai variable menit
if(ok){while(ok);rtc_set_time(v_hour,v_minute,0);rtc_main();} //if ok pergi
ke rtc main
if(cancel){while(cancel);rtc_main();} //if cancel pergi ke rtc main
}
}
/*=====================Fungsi Setting
Hari=========================*/
void setting_hari(){
tampil_lcd(0,1,"%s%2i: :%4i",dday[v_week_day],v_day,v_year);
delay_ms(50);
if(up){while(up);v_month++;if(v_month>12)v_month=1;}
if(down){while(up);v_month--;if(v_month<=0)v_month=12;}
if(ok){while(ok);setting_tahun();}
if(cancel){while(cancel);rtc_main();}
}
}
}
set_menit:
delay_ms(500);
lcd_clear();
while(1){
tampil_lcd(0,1,"%2d:%2d lagu:%2d
",alarm_jam[alarm],alarm_menit[alarm],alarm_lagu[cacah]);
delay_ms(50);
tampil_lcd(0,1,"%2d: lagu:%2d ",alarm_jam[alarm],alarm_lagu[cacah]);
delay_ms(50);
if(up){while(up);alarm_menit[alarm]++;if(alarm_menit[alarm]>59)alarm_menit[a
larm]=0;}
if(down){while(down);alarm_menit[alarm]-;if(alarm_menit[alarm]<0)alarm_menit[alarm]=59;}
if(ok){
while(ok);
ee_menit[alarm]=alarm_menit[alarm];
goto set_lagu;
}
}
set_lagu:
delay_ms(500);
lcd_clear();
while(1){
tampil_lcd(0,1,"%2d:%2d lagu:%2d
",alarm_jam[alarm],alarm_menit[alarm],alarm_lagu[cacah]);
delay_ms(50);
tampil_lcd(0,1,"%2d:%2d lagu: ",alarm_jam[alarm],alarm_menit[alarm]);
delay_ms(50);
if(up){while(up);alarm_lagu[cacah]++;if(alarm_lagu[cacah]>9)alarm_lagu[cacah]
=1;}
if(down){while(down);alarm_lagu[cacah]-;if(alarm_lagu[cacah]<1)alarm_lagu[cacah]=9;}
if(ok){
while(ok);
ee_lagu[cacah]=alarm_lagu[cacah];
goto atas;
}
if(cancel){
while(cancel);
ee_lagu[cacah]=alarm_lagu[cacah];
goto setwaktu;
}
}
}
/*===============Fungsi RTC Main================*/
void rtc_main(){
int x=0,putar=0;
lcd_clear();
rtc_init(0,0,0);
while(1){
mulai:
PORTD.0=0;
__ADC = read_adc(0);
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
rtc_get_date(&week_day,&day,&month,&year);
tampil_lcd(7,0,"%2d:%2d:%2d\n",hour,minute,sec);
tampil_lcd(6,1,"%2d/%2d/%4d",day,month,2000+year);
tampil_lcd(0,0,"%03d", __ADC);
lcd_gotoxy(0,1);
lcd_puts(dday[week_day]);
if(week_day == 6) ;
if(week_day == 0)
for(j=0;j<10;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j]-=1;
putar=alarm_lagu[j];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if(week_day == 1)
for(j=10;j<20;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j-10]-=1;
putar=alarm_lagu[j-10];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if(week_day == 2)
for(j=20;j<30;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j-20]-=1;
putar=alarm_lagu[j-20];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if(week_day == 3)
for(j=30;j<40;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j-30]-=1;
putar=alarm_lagu[j-30];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if(week_day == 4)
for(j=40;j<50;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j-40]-=1;
putar=alarm_lagu[j-40];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if(week_day == 5)
for(j=50;j<60;j++){
if(hour==alarm_jam[j] && minute==alarm_menit[j] && sec==0 ){
alarm_lagu[j-50]-=1;
putar=alarm_lagu[j-50];
PORTD.0=1;
PORTD.1=0;
lcd_clear();
while(1){
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
rtc_get_time(&hour,&minute,&sec);
if(sec==4){
for(x=0;x<=putar;x++){
PORTD.0=1;
delay_ms(40);
tampil_lcd(0,0,"%d",x);
PORTD.1=0;
delay_ms(1900);
}
break;
}
}
while(1){
rtc_get_time(&hour,&minute,&sec);
tampil_lcd(5,0,"ALARM !!!");
tampil_lcd(5,1,"%2d:%2d:%2d\n",hour,minute,sec);
delay_ms(100);
lcd_clear();
delay_ms(100);
if(sec>18){
PORTD.0=0;
PORTD.1=0;
goto mulai;
}
}
}
}
if ((__ADC >= 90) && (__ADC <= 95)){
tampil_lcd(0,0,"Vlow");
PORTD = 0b1000000;
}
if ((__ADC >= 96) && (__ADC <= 100)){
tampil_lcd(0,0,"Low ");
PORTD = 0b1100000;
}
if ((__ADC >= 101) && (__ADC <= 105)){
tampil_lcd(0,0,"Med ");
PORTD = 0b1110000;
}
if (__ADC >= 106){
tampil_lcd(0,0,"Full ");
PORTD = 0b1111100;
}
loncat:
if(cancel){while(cancel);menu();}
}
}
/*========================Fungsi Tampil
Menu========================*/
void menu(){
pointer=1;
lcd_clear();
while(1){
tampil_lcd(3,0,"MENU");
if(up){while(up);delay_ms(200);pointer++;if(pointer>3)pointer=1;}
if(down){while(down);delay_ms(200);pointer--;if(pointer<=0)pointer=3;}
switch(pointer){
case 1 : tampil_lcd(0,1,"1.Set Waktu ");break;
case 2 : tampil_lcd(0,1,"2.Set Tanggal ");break;
case 3 : tampil_lcd(0,1,"3.Set Alarm ");break;
}
if(ok){while(ok);
switch(pointer){
case 1 : setting_jam();break;
case 2 : setting_hari();break;
case 3 : set_alarm();break;
}
}
if(cancel){while(cancel);rtc_main();}
}
}
/*==========================Fungsi
Inisialisai=======================*/
void init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0xFF;
PORTC = 0xFF;
DDRC = 0x00;
PORTD = 0b00000000; DDRD=0xFF;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x86;
SFIOR&=0xEF;
lcd_init(16);
tampil_lcd (0,0,"Bel Sekolah ");
tampil_lcd (0,1,"Brbsis Mikro ");
delay_ms(1500);
lcd_clear();
}
/*==========================Fungsi
Main======================*/
void main()
{
init();
i2c_init();
rtc_main();
}