Moving Text Menggunakan Dot Matriks 8x8 Berbasis Mikrokontroler ATMEGA 32A
MOVING TEXT MENGGUNAKAN DOT MATRIKS 8x8
BERBASIS MIKROKONTROLER ATmega 32A
TUGAS AKHIR
PUTRI PUSPITA SARI 112408003
PROGRAM STUDI D-III FISIKA
DEPARTEMEN FISIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN
ALAM
UNIVERSITAS SUMATERA UTARA
MEDAN
(2)
MOVING TEXT MENGGUNAKAN METODE SCAN DENGAN
IC 74HC595 BERBASIS MIKROKONTROLER ATmega 32A
TUGAS AKHIR
Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh gelar Ahli Madya
PROGRAM STUDI D-III FISIKA
DEPARTEMEN FISIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN
ALAM
UNIVERSITAS SUMATERA UTARA
MEDAN
(3)
PERSETUJUAN
Judul : MOVING TEXT MENGGUNAKAN DOT
MATRIKS 8x8 BERBASIS MIKROKONTROLER ATEMEGA 32A
Kategori : TUGAS AKHIR
Nama : PUTRI PUSPITA SARI
No Induk Mahasiswa : 112408003
Program Studi : DIPLOMA III (D3) FISIKA
Departement : FISIKA
Fakultas : MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SUMATERA UTARA
Diluluskan di
Medan, Juli 2014
Disetujui oleh :
Ketua Program Studi D-III Fisika Pembimbing
Dr. Susilawati, M.Si Drs. Kurnia Brahmana, M.Si NIP. 197412072000122001 NIP. 1960092019860110011
(4)
PERNYATAAN
MOVING TEXT MENGGUNAKAN DOT MATRIKS 8x8
BERBASIS MIKROKONTROLER ATEMEGA 32A
TUGAS AKHIR
Saya mengakui bahwa Laporan Tugas Akhir ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.
Medan, Juli 2014
PUTRI PUSPITA SARI 112408003
(5)
ABSTRAK
Pada tugas akhir ini penulis membahas masalah yang berjudul “Moving Text Menggunakan Dot Matriks 8x8 Berbasis Mikrokontroler ATMEGA 32A”. Alat ini berfungsi untuk menampilkan program yang telah diatur oleh penulis. Dalam hal ini simulasi dilakukan dengan menggunakan Mikrokontroller ATMega 32A, dan Dot Matriks. Mikrokontroller mempunyai input berbentuk program. Program ini akan ditampilkan pada Dot Matriks. Alat ini berkerja secara otomatis dengan menjalankan program terlebih dahulu, mikrokontroller memproses data dengan menggunakan Keyboard, dan CodeVision AVR sebagai program server utamanya.
(6)
PENGHARGAAN
Puji dan Syukur penulis sampaikan kepada Allah Yang Maha Kuasa karena atas berkah kasih dan karunia-Nya, Sehingga penulis dapat menyelesaikan Laporan Tugas Proyek dalam waktu yang ditetapkan.
Ucapan terimakasih penulis sampaikan kepada Bapak Drs. Kurnia Brahmana, M.si selaku dosen pembimbing pada penyelesaian Laporan Tugas Proyek ini, yang telah memberikan panduan dan perhatian kepada penulis untuk menyempurnakan Laporan Tugas Proyek ini. Ucapan terimakasih juga ditujukan kepada Ketua dan Sekretaris Departemen. Dr. Susilawati, M.si sebagai Ketua Jurusan program Studi Fisika D-III dan Dr. Perdinan Sinuaji, M.si sebagai sekretaris program Studi Fisika D-III, Kepada Dekan dan Pembantu Dekan Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Sumatera Utara, semua Dosen pada Departemen fisika FMIPA USU, dan Kepada Pegawai di FMIPA USU.
Akhirnya tidak terlupakan kepada Ibunda Hj. Manisen Br. Bangun dan Ayahnda tercinta H. Muhlis Manurung, SH atas doa dan kasih sayang serta bantuan yang berupa materi maupun nonmateri yang telah diberikan kepada penulis selama ini, serta Kakak Nisa, Abang Syamsir, Adik Atiqah dan imah, yang selama ini memberikan bantuan dan dorongan kepada penulis. Terkhusus buat Muhammad Abral yang telah memberikan dukungan dan memberikan semangat sebesar-besarnya buat penulis. Juga khususnya buat rekan-rekan seperjuangan yang telah diperjuangkan D3 Fisika Instrument stambuk 12 dan 13.
Dan yang tidak terlupakan kepada tersayang Dessy, Nanda, Sigit, Ibal, Bana, dan Fikri atas dorongan dan perhatiannya yang selama ini diberikan kepada penulis, dan tak henti-hentinya mereka untuk mengingatkan kepada penulis agar segera menyelesaikan Tugasnya.
(7)
Penulis menyadari dalam tugas Proyek ini terdapat kekurangan secara materi maupun penyajiannya. Untuk itu penulis mengharapkan kritik dan saran yang bersifat membangun untuk kesempurnaan. Akhir kata penulis mengucapkan banyak terimakasih kepada pihak yang memberikan bantuan. Semoga bermanfaat bagi pembaca.
Medan, Juli 2014
(8)
DAFTAR ISI
Halaman
Persetujuan i
Pernyataan ii
Penghargaan iii
Abstrak v
Daftar Isi vi
Daftar Gambar viii
Daftar Tabel ix
Bab 1 Pendahuluan
1.1 Latar Belakang 1
1.2 Rumusan Masalah 2
1.3 Tujuan Penulisan 2
1.4 Batasan Masalah 3
1.5 Sistematika Penulisan 3
Bab 2 Landasan Teori
2.1 Dot Matriks atau Matriks LED 5
2.2 Moving Text dengan IC 74HC595 7
2.2.1 Program Menyalanya LED Pada Koordinat 10
2.3 Mikrokontroller ATMega 32A 11
2.4 Atmel AVR ATMega32 13
2.4.1 Fitur ATMega 32A 14
2.4.2 Konfigurasi ATMega 32A 15
2.4.3 Blok Diagram ATMega 32A 20
2.4.4 Peta Memory AVR ATMega 32A 21
2.5 General Purpose Register AVR 23
2.6 RISC (Reduce Instruction Set Computing) 23 2.6.1 Arsitektur Mikrokontroller AVR RISC 24
2.7 Variabel 25
2.8 CodeVision AVR 27
2.8.1 Program Code-Vision AVR 28 2.8.2 Cara Menjalankan Code-Vision AVR 29 2.9 Pemrograman RTC DS1307 dengan Codevision 30
2.9.1 Fitur-fitur DS1307 30
2.10 Pemrograman Bahasa C Standard (ANSI C) 31 Bab 3 Rancangan Sistem
3.1 Perancangan Sistem Rangkaian 34
3.2 Diagram Blok 37
3.3 Perancangan Power Supplay (PSA) 38
3.4 Relay 39
3.5 Perancangan rangkaian Real Time Clock (RTC) DS1307 41
3.6 Saklar 42
3.7 Flow Chart 43
(9)
4.2 Pengujian Rangkaian Mikrokontroler ATMega32 44
4.3 Pengujian Rangkaian Relay 45
4.4 Analisa Bahasa Pemrograman 46
4.5 Pengujian Rangkaian dengan Menjalankan Program 48
4.6 Pengisian Text 53
4.7 Pengisian Demo 54
4.8 Penghapus Text 54
4.9 Menghapus Demo 55
4.10Font 55
Bab 5 Kesimpulan dan Saran
5.1 Kesimpulan 56
5.2 Saran-Saran 56
Daftar Pustaka 57
(10)
DAFTAR GAMBAR
Gambar 2.1 Dot Matriks 5
Gambar 2.2 Susunan Jalur-jalur Vertikal dan Horisontal 6
Gambar 2.3 Cara Pemasangan LED 6
Gambar 2.4 Rangkaian Moving Text Mode Scan dengan IC TTL 74HC595 7
Gambar 2.5 Rangkaian Belakang PCB 8
Gambar 2.6 Rangkaian Kabel yang dipasang KeDot Matriks 9 Gambar 2.7 Rangkaian Moving Text Menggunakan Dot Matriks 9 Gambar 2.8 Tampilan Program Baris dan Kolom 11
Gambar 2.9 Konfigurasi pin ATMega32 16
Gambar 2.10 Diagram Blok ATMega32 20
Gambar 2.11 Peta Memory Program AVR ATMega32 21 Gambar 2.12 Peta Memory Data AVR ATMega32 22
Gambar 2.13 General Register Purpose AVR 23
Gambar 2.14 Arisitektur Mikrokontroller AVR RISC 24 Gambar 2.15 Pengambilan Intruksi dan Pengeksekusian secara Paralel 25 Gambar 2.16 Form Pembuatan Micri chip (CodeVision AVR) 29
Gambar 2.17 Fitur-Fitur DS1307 30
Gambar 3.1 Perancangan Sistem Rangkaian 35
Gambar 3.2 Skema Rangkaian Untuk Menjalankan Program 36 Gambar 3.3 Gambar Blok Eeprom dari ATMega32 37 Gambar 3.4 Gambar Blok dengan DS1307 sebagai RTC External 38
Gambar 3.5 Rangkaian Power Supplay 39
Gambar 3.6 Simbol Relay 40
Gambar 3.7 Relay dengan Rangkaian Driver 40
(11)
DAFTAR TABEL
Table 2.1 Fungsi Khusus Port A 17
Table 2.2 Fungsi Khusus Port B 18
Table 2.3 Fungsi Khusus Port C 19
(12)
ABSTRAK
Pada tugas akhir ini penulis membahas masalah yang berjudul “Moving Text Menggunakan Dot Matriks 8x8 Berbasis Mikrokontroler ATMEGA 32A”. Alat ini berfungsi untuk menampilkan program yang telah diatur oleh penulis. Dalam hal ini simulasi dilakukan dengan menggunakan Mikrokontroller ATMega 32A, dan Dot Matriks. Mikrokontroller mempunyai input berbentuk program. Program ini akan ditampilkan pada Dot Matriks. Alat ini berkerja secara otomatis dengan menjalankan program terlebih dahulu, mikrokontroller memproses data dengan menggunakan Keyboard, dan CodeVision AVR sebagai program server utamanya.
(13)
BAB 1
PENDAHULUAN
1.1 Latar belakang
Seiring dengan perkembangan teknologi yang sangat cepat, kebutuhan
manusia akan teknologi juga sangat dibutuhkan sehingga perlu dikembangkan
alat-alat baru yang bertujuan untuk memudahkan kegiatan manusia dalam
kehidupan sehari-hari.
Perkembangan teknologi mikrokontroler misalnya telah membawa era
baru dalam dunia elektonika. Salah satu bentuk penerapannya adalah running
text, dimana alat ini berfungsi untuk menampilkan informasi berupa tulisan
berjalan menggunakan lampu LED sebagai displaynya. Dalam perancangan
alat ini, menggunakan mikrokontroler ATmega32A sebagai pengolah data
sekaligus menyimpan data-data biner yang diperlukan untuk mengendalikan
matriks LED sebagai output data.
Penerapan moving text sudah banyak digunakan di tempat-tempat
tertentu, misalnya sistem informasi yang ada di lampu lalu lintas, sign yang
ada dikantor-kantor, universitas, dan lain sebagainya. Didalam Universitas,
penggunaan moving text dapat digunakan untuk pemberian informasi ruang
kelas dengan cara yang modern Penerapan moving text didalam rancangan
ini bermanfaat dalam dunia informasi karena dapat menampilkan tulisan
berupa huruf berjalan pada display yang terdiri dari susunan LED secara
(14)
1.2 Rumusan Masalah
Laporan proyek ini membahas tentang perangkat keras yang meliputi
perakitan moving text yang terdiri dari Mikrokontroler ATMega 32A
sebagai pusat kendalinya beserta software pemrogramannnya, Dot
Matriks sebagai tampilannya, IC 74HC595 Trafo, PSA dan Keyboard.
1.3 Tujuan Penulisan
Adapun tujuan penulisan laporan proyek ini adalah untuk:
1. Sebagai salah satu syarat untuk dapat menyelesaikan program Diploma
Tiga (D-III) Fisika Instrumentasi FMIPA Universitas Sumatera Utara.
2. Pengembangan kreatifitas mahasiswa dalam bidang ilmu instrumentasi
pengontrolan dan elektronika sebagai bidang diketahui.
3. Merancang suatu alat Moving Text dan Kemudian ditampilkan pada Dot
Matriks dengan menggunakan Mikrokontroler ATMega 32A.
4. Mengetahui cara kerja Moving Text menggunakan Dot Matriks berbasis
Mikrokontroler AtMega 32A.
5. Penulis ingin memberikan penjelasan tentang penggunaan dan cara kerja dari Moving menggunakan Dot Matriks Berbasis Mikrokontroler ATMega
(15)
1.4 Batasan Masalah
Mengacu pada hal diatas Penulis Merancang Moving Text Berbasis
Mikrokontroler ATMega 32A, dengan batasan-batasan sebagai berikut :
1. Pembahasan mikrokontroler Atmega 32A.
2. Dot Matriks yang digunakan adalah LED Matriks sebagai tampilannya.
3. Pembahasan hanya meliputi rangkaian Mikrokontroler ATMega 32A,
Dot Matriks, beserta programnya.
4. Pembahasan hanya sebatas pemrograman mikrokontroler dan interfacing
untuk pemrograman dari komputer ke mikrokontroler tidak dibahas.
1.5 Sistematika Penulisan
BAB I : PENDAHULUAN
Dalam hal ini berisikan mengenai latar belakang, rumusan
Masalah, tujuan penulisan, batasan masalah, serta
istematika penulisan.
BAB II : LANDASAN TEORI
Dalam bab ini dijelaskan tentang teori pendukung yang
digunakan untuk pembahasan dan cara kerja dari
rangkaian teori pendukung itu antara lain tentang
Mikrokontroler Atmega 32A, Dot Matriks, bahasa
program yang dipergunakan, serta cara kerja dari
(16)
BAB III : RANCANGAN SISTEM
Pada bab ini akan dibahas perancangan dari alat , yaitu
blok dari rangkaian, skematik dari masing-masing
rangkaian dan diagram alir dari program yang diisikan ke
Mikrokontroler ATMega32A.
BAB IV : PENGUJIAN RANGKAIAN
Pada bab ini akan dibahas pengujian rangkaian dan hasil
pengujian dari Masing – masing pada rangkaian serta di
isikan program ke mikrokontroler ATMega32A.
BAB V : KESIMPULAN DAN SARAN
Bab ini merupakan penutup yang meliputi tentang
Kesimpulan dari pembahasan yang dilakukan dari tugas
akhir ini serta saran apakah rangkaian ini dapat dibuat
lebih efisien dan dikembangkan perakitannya pada suatu
(17)
BAB 2
LANDASAN TEORI
2.1 Dot Matriks atau Matriks LED
Matriks LED adalah sejumlah LED yang disusun dalam kolom dan baris.
LED-LED ini kemudian digunakan untuk menampilkan gambar-gambar atau
tulisan yang biasanya ditampilkan dengan efek animasi tertentu. Oleh karena itu,
matriks LED sering disebut sebagai Running Text atau Moving Sign.
Gambar 2.1 Dot Matriks
MXLED merupakan simulator dari rangkaian matriks LED. Dengan
simulator ini, kita bisa mencoba program pengendali matriks LED walaupun tanpa
hardware. MXLED membuat matriks LED dengan cara menyusun LED pada
jalur-jalur vertikal dan jalur-jalur horisontal. Kita harus menyediakan jalur
(18)
membuat jalur vertikal sebanyak jumlah kolom. Susunan jalur-jalur vertikal dan
horisontal tersebut adalah seperti gambar berikut:
Gambar 2.2 Susunan Jalur-Jalur Vertikal Dan Horisontal
Jalur-jalur vertikal dan horisontal tersebut tidak saling terhubung.
Kemudian, pada setiap titik pertemuan antara jalur vertikal dan horisontal
tersebut, pasanglah sebuah LED dengan cara menghubungkan anoda ke jalur
horisontal dan katoda ke jalur vertikal. Pemasangan LED tersebut adalah seperti
gambar berikut:
(19)
Dengan memasang LED seperti di atas, LED yang menyala adalah LED
dimana anodanya terhubung pada jalur horisontal yang tinggi (1) dan katodanya
terhubung pada jalur vertikal yang rendah (0). Hanya ada satu jalur vertikal yang
rendah pada satu waktu, sedangkan jalur-jalur lainnya harus tetap tinggi. Jalur
vertikal yang rendah ini kita sebut sebagai kolom aktif. Berbeda dengan jalur
vertikal, jalur horisontal yang terdiri dari delapan baris ini boleh bernilai tinggi
atau rendah tanpa harus memperhatikan jalur-jalur horisontal lainnya.
2.2 Moving text dengan IC 74HC595
Moving text dengan mode scanning lebih banyak digunakan untuk tujuan
komersil dibanding dengan mode static, tetapi masing-masing ada kelemahan dan
kelebihannya. Berikut ini adalah gambar rangkaian atau skema dari moving text
mode scan dengan menggunakan IC TTL 74HC595, untuk driver kolom juga
untuk driver baris yang dibantu oleh ULN2803
15 1 2 3 4 5 6 7 8
9 131610 11 1214 15 1 2 3 4 5 6 7 15 1 2 3 4 5 6 7 15 1 2 3 4 5 6 7 8
9 131610 11 1214 8
9 131610 11 1214 8
9 131610 11 1214
15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 1 2 3 4 5 6 7 8 11 12 13 14 16 15 9 17 18 GND 5 VOLT clock slx latch U L N2 803 74 HC95 9 74HC959 74HC959 74HC959 74HC959 + -TEST LED
(20)
Salah satu kelebihan dari rangkaian ini adalah jumlah kabel hanya 5
1 . Vcc
2. GND
3. DATA
4. Clock
5. Latch
Prinsip pemrogramannya adalah sebagai berikut, kirim baris dan kirim
kolom secara serentak sebanyak jumlah kolom atau kirim kolom dan kirim baris
secara serentak sebanyak jumlah baris.
Kalau eeprom bawaan dari atmega32 masih terasa kurang, dapat
ditambahkan memory eeprom external seperti 24c64, demikian juga jika RTC
bawaan atmega32 kurang memuaskan, dapat ditambahkan DS1307 sebagai RTC
external. Display dapat juga disusun dengan led sehingga berbentuk matriks.
IC 74HS595 dipasang pada bagian belakang PCB untuk menghemat PCB sbb:
(21)
Pemasangan kabel dan pengujian dot matriks dapat dilakukan dengan cara
menguhubungkan kabel pada dot matriks tersebut. Agar kita dapat membuktikan
antara kolom dan baris hidup atau tidak. Atau menggunakan MATRIX LED 8X8
yang sudah jadi, sbb:
Gambar 2.6 Rangkaian Kabel yang dipasang Ke Dot Matriks
Selanjutnya kita menguji kolom dan baris, dengan ATmega32 untuk
membuktikan atau mengetes kolom dan baris pada dot matriks menyala atau tidak
(22)
2.2.1 Program Menyalanya Led Pada Kordinat kol = 0x01; // posisi kolom scanning
while (1)
{
// Place your code here
kar = 0x55; // data yang mau dikirim (baris)
while (1)
{
soe = 0;
shift_out(kar); // kirim baris
shift_out(kol); // kirim kolom
soe = 1;
delay_ms(150);
kol = kol << 1;
if (kol == 0) kol = 0x01;
}
}
(23)
Berikut ini adalah tampilan dari program diatas pada display led
Gambar 2.8 Tampilan Program Baris Dan Kolom
2.3 Mikrokontroler
Mikrokontroler adalah piranti elektronik berbentuk IC (integrated circuit)
yang memiliki kemampuan manipulasi data (informasi) berdasarkan suatuurutan
instruksi (program) yang dibuat oleh programmer. Mikrokontroler merupakan
contoh suatu sistem komputer sederhana yang masuk kedalam kategori embedded
system (sistem tertanam). Dalam sebuah struktur mikrokontroler akan kita temukan
juga kompunen – komponen seperti : processor, memory, clock dll.
Jika berbicara tentang mikrokontroler maka tidak terlepas dengan
pengertian atau definisi tentang komputer, ada beberapa kesamaan antara
mikrokontroler dengan komputer antara lain :
1. sama – sama memiliki unit pengolah pusat atau yang lebih dikenal dengan
Central Processing Unit (CPU).
2. CPU tersebut sama – sama menjalankan program dari suatu lokasi atau tempat, biasanya dari ROM ( Read Only Memory ) atau RAM (Random
(24)
3. Sama – sama memiliki RAM yang digunakan untuk menyimpan data–
data sementara atau yang lebih dikenal dengan variabel.
4. Sama – sama memiliki beberapa masukan dan keluaran yang berfungsi
sebagai jalur komunikasi timbal balik dengan dunia luar.
Yang membedakan antara mikrokontroler dan komputer atau
mikrokomputer yaitu komputer atau mikrokomputer merupakan komputer
serbaguna (general purpose computer) yang bisa dimanfaatkan untuk
berbagai macam aplikasi atau perangkat lunak sedangkan mikrokontroler adalah
komputer berkemampuan khusus (special purpose computer) yang hanya dapat
menjalankan satu macam aplikasi saja sesuai dengan program atau aplikasi yang
telah dibuat oleh programmer.
Selain perbedaaan tersebut, mikrokontroler juga memiliki ciri khas tersendiri
diantaranya adalah:
1. Mikrokontroler bersifat tertanam (embedded ) pada satu atau beberapa
piranti yang dikenal dengan istilah embedded system atau sistem tertana.
2. Berfungsi untuk satu macam fungsi saja, dimana dalam laporan ini
berfungsi hanya untuk memantau kondisi mobil dan tidak dapat digunakan
untuk memutar musik atau aplikasi lainnya.
3. Hanya membutuhkan daya yang rendah (bisa dibawah 1 watt) bila
dibandingkan dengan komputer atau mikrokomputer yang menggunakan
daya yang besar (bisa diatas 10 watt bahkan lebih).
4. Memiliki beberapa jalur masukan (input) dan keluaran (output) yang memiliki fungsi – fungsi khusus.
(25)
6. Beberapa jenis IC seringkali tahan banting khususnya untuk aplikasi
otomotif atau mesin dan militer.
Selain dengan komputer atau mikrokomputer, mikrokontroler juga
memiliki perbedaan dengan mikroprosesor. Salah satu perbedaan yang cukup
penting adalah jika mikroprosesor hanya merupakan sebuah CPU tanpa
adanya jalur input – output dan memori sedangkan mikrokontroler seperti
dijelaskan diatas umumnya memiliki CPU, memori, jalur input – output dan
beberapa fungsi atau fitur tertentu seperti ADC (Analog to Digital Converter) yang
sudah terintegrasi dalam IC mikrokontroler tersebut. Kelebihan utama dari
mikrokontroler adalah tersedianya RAM, jalur input – output dan fitur – fitur
pendukung dalam satu IC sehingga dalam aplikasinya memiliki rangkaian yang
ringkas dan dapat diminimalisir ukuran board atau rangkaiannya.
Terdapat berbagai jenis mikrokontroler dari berbagai vendor yang beredar
luas di dunia, diantaranya yang terkenal adalah Intel, Maxim, Motorolladan
Atmel. Pada pembuatan Interface ini menggunakan mikrokontroler produksi
Atmel yaitu Atmel AVR ATMEGA32.
2.4 Atmel AVR ATMega32
Atmel AVR adalah salah satu jenis mikrokontroler yang sering digunakan
dalam bidang elektronik dan instrumentasi. Mikrokontroler ini memiliki arsitektur
RISC (Reduce Instruction Set Computing) delapan bit, dimana semua instruksi
dikemas dalam kode 16-bit (16 bits word ) dan sebagian besar instruksi dieksekusi
(26)
Nama AVR sendiri berasal dari “Alf and Vegard RISC processor ” dimana Alf
Egil Bogen dan Vegard Wollan adalah dua penemu berkebangsaan Norwegia
yang menemukan mikrokontroler AVR yang kemudian diproduksi oleh Atmel.
Untuk menulis program pada AVR dapat mempergunakan beberapa jenis
software yaitu yang disediakan oleh Atmel sendiri yaitu AVR Studio dan beberapa
software buatan pihak ketiga diantaranya AVR GCC, WinAVR, Flowcode AVR,
CodeVisionAVR, BASCOM AVR dan lainnya. Dalam pembuatan interface ini
penulis menggunakan CodeVisionAVR C Compiler versi2.03.9 standar.
2.4.1 Fitur ATMega32
ATMega32 adalah mikrokontroler keluarga AVR produksi Atmel dengan
fitur sebagai berikut :
1. Mikrokontroler AVR 8 bit yang memiliki kemampuan tinggidengan daya
rendah.
2. Arsitektur RISC dengan throughput mencapai 16 MIPS padafrekuensi 16
MHz.
3. Memiliki kapasitas Flash memori 32 Kbyte , EEPROM 1Kbyte, dan SRAM 2 KByte.
4. Saluran I/O sebanyak 32 buah yaitu Port A, Port B, Port C dan Port D.
5. CPU yang terdiri atas 32 buah register.
6. Unit interupsi internal dan eksternal.
7. Port USART untuk komunikasi serial.
8. Satu buah Timer/Counter 16 bit dengan Prescalerterpisah, mode Compare
(27)
9. Dua buah Timer/Counter 8 bit dengan Prescaler terpisah dan mode
Compare.
10.Real Time Counter dengan Oscillator tersendiri.
11.4 Channel PWM.
12.8 Channel 10 bit ADC.
2.4.2 Konfigurasi ATMega 32A
Mikrokontroler merupakan suatu device yang di dalamnya sudah
terintegrasi dengan I/O port, RAM, ROM, sehingga dapat digunakan untuk
berbagai keperluan kontroler. Mikrokontroler AVR ATmega32 merupakan low
power CMOS mikrokontroler 8 bit yang di kembangkan oleh atmel dengan
arsitektur RISC(Reduced Instruction SET Computer) sehingga dapat mencapai
troughput eksekusi instruksi 1 MIPS(Million Instruction Per Second).
Mikrokontroler AVR dapat dikelompokkan menjadi 4 kelas yaitu kelas
ATtiny,kelas AT90xx,keluarga ATmega,dan kelas AT86RFxx.pada dasarnya
yang membedakan masing-masing kelas adalah memori,peripheral,spedd.operasi
tegangan dan fungsinya sedangkan dari segi arsitektur dan instruksi yang di
(28)
Gambar 2.9 konfigurasi pin ATMega32 Secara fungsional konfigurasi pin ATMega32 adalah sebagai berikut:
1. VCC
Sumber Tegngan
2. GND (Ground)
Ground
3. Port A (PA7 – PA0)
Port A adalah 8-bit port I/O yang bersifat bi-directional dan setiap pin
memilki internal pull-up resistor. Output buffer port A dapat mengalirkan
arus sebesar 20 mA. Ketika port A digunakan sebagai input dan di pull-up
secara langsung, maka port A akan mengeluarkan arus jika internal pull-up
resistor diaktifkan. Pin-pin dari port A memiliki fungsi khusus yaitu dapat
berfungsi sebagai channel ADC (Analog to Digital Converter) sebesar 10 bit.
Fungsi-fungsi khusus pin-pin port A dapat ditabelkan seperti yang tertera
(29)
Port Alternate Function
PA7 ADC7 (ADC input channel 7)
PA6 ADC6 (ADC input channel 6)
PA5 ADC5 (ADC input channel 5)
PA4 ADC4 (ADC input channel 4)
PA3 ADC3 (ADC input channel 3)
PA2 ADC2 (ADC input channel 2)
PA1 ADC1 (ADC input channel 1)
PA0 ADC0 (ADC input channel 0)
Tabel 2.1 Fungsi khusus port A 4. Port B (PB7 – PB0)
Port B adalah 8-bit port I/O yang bersifat bi-directional dan setiap pin
mengandung internal pull-up resistor. Output buffer port B dapat mengalirkan
arus sebesar 20 mA. Ketika port B digunakan sebagai input dan di pull-down
secara external, port B akan mengalirkan arus jika internal pull-up resistor
diaktifkan.
Pin-pin port B memiliki fungsi-fungsi khusus, diantaranya :
a.SCK port B, bit 7
Input pin clock untuk up/downloading memory.
b.MISO port B, bit 6
Pin output data untuk uploading memory.
c.MOSI port B, bit 5
Pin input data untuk downloading memory.
(30)
Port Alternate Function
PB7 SCK (SPI Bus Serial Clock)
PB6 MISO (SPI Bus Master Input/Slave Output)
PB6 MOSI (SPI Bus Master Output/Slave Input)
PB5 SS (SPI Slave Select Input)
PB3
AIN1 (Analog Comparator Negative Input)
OCO (Timer/Counter0 Output Compare Match Output)
PB2
AIN0 (Analog Comparator Positive Input)
INT2 (External Interrupt 2 Input)
PB1 T1 (Timer/Counter1 External Counter Input)
PB0
T0 (Timer/Counter External Counter Input) XCK (USART
External Clock Input/Output)
Tabel 2.2 Fungsi khusus port B 5. Port C (PC7 – PC0)
Port C adalah 8-bit port I/O yang berfungsi bi-directional dan setiap pin
memiliki internal pull-up resistor. Output buffer port C dapat mengalirkan
arus sebesar 20 mA. Ketika port C digunakan sebagai input dan di pull-down
secara langsung, maka port C akan mengeluarkan arus jika internal pull-up
resistor diaktifkan. Fungsi-fungsi khusus pin-pin port C dapat ditabelkan
seperti yang tertera pada tabel dibawah ini.
Port Alternate Function
PC7 TOSC2 (Timer Oscillator Pin 2)
(31)
PC6 TD1 (JTAG Test Data In)
PC5 TD0 (JTAG Test Data Out)
PC3 TMS (JTAG Test Mode Select)
PC2 TCK (JTAG Test Clock)
PC1 SDA (Two-wire Serial Bus Data Input/Output Line)
PC0 SCL (Two-wire Serial Bus Clock Line)
Tabel 2.3 Fungsi khusus port C 6. Port D (PD7 – PD0)
Port D adalah 8-bit port I/O yang berfungsi bi-directional dan setiap pin
memiliki internal pull-up resistor. Output buffer port D dapat mengalirkan
arus sebesar 20 mA. Ketika port D digunakan sebagai input dan di pull-down
secara langsung, maka port D akan mengeluarkan arus jika internal pull-up
resistor diaktifkan. Fungsi-fungsi khusus pin-pin port D dapat ditabelkan
seperti yang tertera pada tabel dibawah ini.
Port Alternate Function
PD7 OC2 (Timer / Counter2 Output Compare Match Output)
PD6 ICP1 (Timer/Counter1 Input Capture Pin)
PD6 OCIB (Timer/Counter1 Output Compare B Match Output)
PD5 TD0 (JTAG Test Data Out)
PD3 INT1 (External Interrupt 1 Input)
PD2 INT0 (External Interrupt 0 Input)
PD1 TXD (USART Output Pin)
(32)
2.4.3 Blok Diagram ATMega32
(33)
2.4.4 Peta Memori AVR ATMega32
Arsitektur AVR mempunyai dua memori utama, yaitu memori datadan
memori program. Selain itu ATMega32 memiliki memori EEPROMuntuk
menyimpan data. ATMega32 memiliki 32 Kbyte On-chip
In-system Reprogrammable Flash Memory untuk menyimpan program. Karenasemua
instruksi AVR memiliki format 16 atau 32 bit, Flash diatur dalam8K x 16 bit.
Untuk keamanan program, memori program, flash dibagi kedalam dua bagian
yaitu bagian program boot dan aplikasi. Bootloader adalah program kecil yang
bekerja pada saat start up time yang dapatmemasukan seluruh program aplikasi
kedalam memori prosesor.
Gambar 2.11 Peta Memori Program AVR ATMega32
Memori data AVR ATMega32 terbagi menjadi 3 bagian yaitu 32buah register
umum, 64 buah register I/O dan 2 Kbyte SRAM internal. General purpose
register menempati alamat data terbawah, yaitu$00sampai $1F. Sedangkan memori
(34)
merupakan register yang khususdigunakan untuk mengatur fungsi terhadap
berbagai peripheral mikrokontroler seperti control register, Timer/Counter, fungsi –
fungsi I/Odam sebagainya
Gambar 2.12 Peta Memori Data AVR ATMega32
ATMega32 terdiri dari 1024 byte memori data EEPROM 8 bit, datadapat
tulis/baca dari memori ini. Ketika catu daya dimatikan, data terakhiryang ditulis
pada memori EEPROM masih tersimpan pada memori ini,atau dengan kata lain
(35)
2.5 General Purpose Register AVR
Gambar 2.13 General Purpose Register AVR
Gambar diatas menunjukan struktur 32 general purpose register yang terdapat
dalam CPU, masing – masing register ditentukan juga dalam alamat memori data,
dipetakan kedalam 32 lokasi pertama data user . Walaupun tidak secara fisik
diimplementasikan sebagai lokasi SRAM, namun pengaturan ini memberikan
fleksibilitas dalam mengakses register, seperti register pointer X, Y dan Z dapat
diset menuju index dari register file manapun.
2.6 RISC (Reduce Instruction Set Computing)
RISC (Reduce Instruction Set Computing) yang jika diterjemahkan berarti
“komputasi kumpulan instruksi yang disederhanakan” merupakan sebuah
arsitektur komputer dengan instruksi – instruksi dan jenis eksekusi yang paling
(36)
pada prosessor komputer lain seperti pada beberapa mikroprosesor Intel 960,
Itanium (IA64) dari IntelCorporation, Alpha AXP dari DEC, R4x00 dari MIPS
Corporation, PowerPC dan Arsitektur POWER dari International Business
Machine. Selain itu, RISC juga umum dipakai pada Advanced RISC
Machine(ARM) dan StrongARM (termasuk di antaranya adalah Intel XScale),
SPARC dan UltraSPARC dari Sun Microsystems, serta PA-RISC
dariHewlett-Packard.
Desain RISC pertama kali digagas oleh John Cocke, peneliti dariIBM di
Yorktown, New York pada tahun 1974 saat ia membuktikanbahwa sekitar 20%
instruksi pada sebuah prosesor ternyata menangani sekitar 80% dari keseluruhan
kerjanya. Komputer pertama yangmenggunakan konsep RISC ini adalah IBM
PC/XT pada era 1980-an.Istilah RISC sendiri pertama kali dipopulerkan oleh
David Patterson,pengajar pada University of California di Berkely.
(37)
Dari gambar diatas, AVR menggunakan arsitektur Harvard dengan
memisahkan antara memori dan bus untuk program dan data
untuk memaksimalkan kemampuan dan kecepatan. Instruksi dalam memori
program dieksekusi dengan pipelining single level. Dimana ketika satu instruksi
dieksekusi, instruksi berikutnya diambil dari memori program.Konsep ini
mengakibatkan instruksi dieksekusi setiap clock cycle. CPUterdiri dari 32x8 bit
general purpose register yang dapat diakses dengancepat dalam satu clock cycle, yang
mengakibatkan operasi Arithmetic Logic Unit (ALU) dapat dilakukan dalam
satucycle. Pada operasi ALU dua operand berasal dari register , kemudian operasi
dieksekusi danhasilnya disimpan kembali pada register dalam satu clock cycle.
Operasi aritmatik dan logic pada ALU akan mengubah bit – bit yang terdapat
pada Status Register (SREG). Proses pengambilan instruksi dan pengeksekusian
instruksi berjalan secara parallel, dapat dilihat pada gambar dibawah ini :
Gambar 2.15 Pengambilan instruksi dan pengeksekusian secara parallel
2.7 Variabel
Variabel adalah tempat untuk menyimpan dan mengakses datayang
(38)
jangkauan bilangan yang dapat disimpan, hal ini akibat dari byte memori yang
dipesan dan bentuk bilangan bertanda atau tidak. Misalnya unsigned char oleh
kompilerdisediakan 1 byte memori RAM sehingga hanya bisa menampung
bilangan dari 0 sampai dengan 255 sedangkan jika bertanda dari -128sampai
dengan 127.
Tipe Data Sebetulnya tidak ada bilangan negatif pada mikrokontroler
namunhanya kesepakatan saja, perbedaan bilangan negatif dengan positif dan
mikrokontroler terletak pada bit msb atau bit paling kanan tipe data
yangdigunakan dimana msb=0 jika bilangan itu positif dan sebaliknya msb=1 jika
bilangan itu adalah negatif.Pada variabel dikenal sebuah variabel yang bernama
variabel global, variabel global adalah variabel yang dapat diakses oleh
seluruhblok fungsi dalam program. Pendeklarasian variabel gobal ini
biasanyadiletakan diatas semua program, nilai variabel global berubah tiap
kalivariabel itu diakses dan variabelnya tidak hilang (menetap). Nilai yang sedang
terjadi adalah nilai terakhir ketika variabel itu diakses baik oleh fungsi main
maupun fungsi – fungsi yang lain.Selain variabel global, ada juga variabel lokal.
Variabel lokal adalah variabel yang hanya dapat diakses oleh blok fungsi
yangbersangkutan atau terbatas didalam tanda {} deklarasi fungsi itu berada.
Pendeklarasian variabel lokal ini berada pada bagian atas didalam blok fungsi
yang menggunakan variabel tersebut. Variabel lokal akandihilangkan jika
eksekusi program keluar dari fungsi yang bersangkutandan nilainya pun hilang.
Jika menghendaki nilai variabel lokal tidak hilangmaka dalam deklarasi variabel
(39)
2.8 CodeVisionAVR
CodeVisionAVR adalah sebuah cross-compiler C, Integrated Development
Environtment (IDE) dan Automatic Program Generator yangdidesain untuk
milrokontroler buatan Atmel seri AVR. CodeVisionAVR dapat dijalankan pada
sistem operasi Windows 95, 98, ME, NT4, 2000 dan XP.
Mikrokontroler AVR diproduksi menggunakan teknologi high density
nonvolatile memory on-chip ISP flash yang memungkinkan program yang ada di
dalam memori dapat di reprogram in-sistem melalui serial interface SPI dengan
menggunakan konvensional nonvolatile memory programmer atau on-chip boot
program yang berjalan pada inti AVR. Boot program dapat menggunakan
interface apa saja untuk mendownload program pada memori flash.
Software pada boot sistem akan tetap bekerja ketika flash aplikasi ini
sedang di update, hal ini merupakan operasi “read-while-write”. Dengan
mengkombinasikan CPU 8-bit RISC bersama in-system self programmable flash
pada chip monolithic, ATmega32 merupakan mikrokontroler powerfull yang
fleksibel dan merupakan solusi efektif untuk berbagai aplikasi pengontrolan.
Adapun komponen-komponen yang dapat diamati melalui I/O pada workspace
sebagai berikut :
1. Isi register
- R0 sampai dengan R15
- R16 sampai dengan R13
2. Processor - Stack pointer
(40)
- Cycle pointer
- X_register
- Y_register
- Z_register
- Frequency
- Stop Watch
3. I/O AVR
Adapun Instruksi I/O adalah sebagai berikut :
in; membaca data I/O Port atau internal peripheral register{Timers,UART, kedalam register}
Out; menulis data sebuah register ke I/O Port atau internal peripheral register.
Idi (load immediate); untuk menulis konstanta ke register sebelum konstanta itu dituliskan ke I/O port.
Sbi (set bit in I/O); untuk membuat logika high satu bit I/O register.
Cbi ( clear bit in I/O); untuk membuat logika low satu bit I/O register.
Sbic (skip if bit in I/O is cleared); untuk mengecek apakah bit I/O register clear.Jika ya, skip satu perintah dibawahnya.
Sbis (skip if bit in I/O is set); untuk mengecek apakah bit I/O register set. Jika ya, skip satu perintah dibawahnya.
2.8.1 Program Code-Vision AVR
Untuk mengaktifkan micro sistem akuisisi data, penerima sinyal control
(41)
program dengan cara mendownload program yang terlebih dahulu kita buat
dengan bahasa C pada CodeVisionAVR.
Gambar 2.16 Form pembuatan program micro chip (CodeVisionAVR).
2.8.2 Cara Menjalakn Code-Vision AVR
Software CodeVision AVR merupakan C Compiler untuk mikrokontroler
AVR. Pada CodeVision telah disediakan editor yang berfungsi untuk membuat
program dalam bahasa C, setela melakukan proses kompilasi kita dapat
mengisikan program yang telah dibuat ke dalam memory pada mikrokontroler
menggunakan programmer yang telah disediakan oleh CodeVision AVR.
Programmer yang didukung oleh CodeVision Programmer Cable dapat
diintegrasik dengan CodeVision AVR, terlebih dahulu harus dilakukan
konfigurasi sebagai berikut:
-Jalankan Software CodeVision AVR. -Pilih menu Setting . Programmer.
-Pilih tipe programmer
(42)
2.9 Pemrograman RTC DS1307 dengan Codevision.
RTC yang dimaksud disini adalah real time clock (bukan real time
computing), biasanya berupa IC yg mempunyai clock sumber sendiri dan internal
batery untuk menyimpan data waktu dan tanggal. Sehingga jika system komputer
/ microcontroller mati waktu dan tanggal didalam memori RTC tetap uptodate.
Salah satu RTC yang sudah populer dan mudah penggunaanya adalah DS1307,
apalagi pada Codevision sudah tersedia fungsi-fungsi untuk mengambil data
waktu dan tanggal untuk RTCDS1307 ini.
2.17 Gambar Fitur-Fitur DS1307
2.9.1 Fitur-fitur DS1307:
Real-time clock (RTC) menghitung detik, menit, jam,tanggal,bulan dan hari dan tahun valid sampai tahun 2100
Ram 56-byte, nonvolatile untuk menyimpan data.
2 jalur serial interface (I2C).
output gelombang kotak yg diprogram.
(43)
Konsumsi arus hanya 500nA pada batery internal.
mode dg oscillator running.
temperature range: -40°C sampai +85°C
Codevision sudah menyediakan fungsi-fungsi khusu untuk mengakses data
DS1307 jadi kita tinggal menggunakanya. Apalagi dengan fasilitas codewizard
pemrograman RTC menjadi mudah.
2.10Pemrograman Bahasa C Standard (ANSI C)
Bahasa C adalah bahasa pemrograman yang dapat dikatakan berada antara
bahasa tingkat rendah (berorientase mesin) dan bahasa tingkat tinggi (bahasa
berorientase pada manusia). Bahasa C berada satu tingkat di atas bahasa yang
berorientasi pada mesin, namun tetap satu tingkat dibawah sebagian besar bahasa
yang berorientasi persoalan.
Bahasa C cukup dekat dengan komputer untuk memberikan kendali yang
besar terhadap detil implementasi pemakaian, namun cukup jauh untuk
mengabaikan detil hardware. Karena itulah bahasa C suatu ketika dipandang
sebagai bahasa high-level dan pada saat yang lain dilihat sebagai bahasa
low-level.
Bahasa C merupakan bahasa pemrograman terstruktur, yang membagi
program kedalam bentuk sebuah blok. Tujuannya adalah untuk memudahkan
dalam pembuatan dan pengembangan program. Program yang ditulis dengan
bahasa C mudah sekali untuk dipindahkan dari satu jenis mesin ke jenis mesin
(44)
Hal ini berkat adanya standarisasi bahasa C yaitu berupa standar ANSI
(American National Standards Institute) yang dijadikan acuan oleh para pembuat
kompiler C. Memasukkan data dan menampilkan data/informasi merupakan
tindakan yang sering dilakukan dalam pemrograman. Penampilan data/informasi
biasanya ditujukan ke piranti layar (monitor), sedangkan pemasukan data biasanya
dilakukan melalui keyboard.
Untuk keperluan penampilan data/informasi, Turbo C menyediakan
sejumlah fungsi, diantaranya adalah PRINTF ( ), PUTS ( ) dan PUTCHAR ( ).
PRINTF ( ) Merupakan fungsi yang paling umum digunakan dalam
menampilkan data. Berbagai jenis data dapat ditampilkan ke layar dengan fungsi
ini. Bentuk penulisan : printf(“string kontrol”, argumen1, argumen2, …);
- String kontrol dapat berupa keterangan yang akan ditampilkan pada layar beserta
penentu format seperti %d, %f. Penentu format dipakai untuk memberi tahu
kompiler mengenai jenis data yang akan ditampilkan
- Argumen adalah data yang akan ditampilkan ke layar. Argumen ini dapatr
berupa variabel, konstanta atau ungkapan
PUTS ( ) Fungsi ini digunakan khusus untuk menampilkan data string ke
layar. Sifat fungsi ini, string yang ditampilkan secara otomatis akan diakhiri
dengan \n (pindah baris). Dibandingkan dengan printf(), perintah ini mempunyai
kode mesin yang lebih pendek.
PUTCHAR ( ) Digunakan khusus untuk menampilkan sebuah karakter ke
layar. Penampilan karakter tidak diakhiri dengan perpindahan baris, misalnya :
(45)
Memasukkan Data Dari Keyboard, Data dapat dimasukkan lewat keyboard saat
eksekusi berlangsung. Fungsi yang digunakan diantaranya adalah: scanf ( ), getch
(46)
BAB 3
RANCANGAN SISTEM
3.1 Perancangan Sistem Rangkaian
Perancangan sistem rangkaian terdiri dari dua bagian yaitu perancangan
sistem perangkat keras dan perancangan sistem perangkat lunak. Sistem perangkat
keras yang digunakan untuk pembuatan sistem terdiri dari beberapa bagian atau
komponen utama. Setiap komponen ini membutuhkan antarmuka yang merupakan
jalur komunikasi dengan komponen lainnya dan sebagai titik koneksi sumber daya
atau tegangan yang dibagi dengan komponen lainnya. Oleh karena itu,
perancangan antarmuka ini tidak boleh sembarangan dan harus lebih diperhatikan
kelebihan dan kekurangannya. Misalnya saja dari segi komunikasi, antarmuka
yang dibuat untuk komponen yang bersangkutan nantinya harus dapat membuat
komponen ini dapat berkomunikasi dengan komponen-komponen lainnya. Jika
antarmuka komponen ini nantinya juga dapat digunakan untuk pengembangan
sistem perangkat keras lainnya atau dapat bekerja dengan kecepatan yang tinggi
sehingga tidak membutuhkan penundaan waktu yang cukup lama untuk
mengeksekusi suatu perintah atau instruksi, maka hal ini merupakan nilai lebih
(47)
(48)
(49)
3.2 Diagram Blok
Gambar 3.3 Blok Eeprom dari ATmega32
Kalau eeprom bawaan dari atmega32 masih terasa kurang, dapat
ditambahkan memory eeprom external seperti 24c64, demikian juga jika RTC
bawaan atmega32 kurang memuaskan, dapat ditambahkan DS1307 sebagai RTC
(50)
Untuk jelasnya perhatikan diagram block berikut ini:
Gambar 3.4 Gambar Blok dengan DS1307 sebagai RTC External Secara garis besar, perancangan alat moving text dengan Dot Matriks
berbasis ATmega32 terdiri dari empat blok rangkaian utama. Untuk dapat
mengetahui tampilan Moving Text yang dihasilkan menggunakan Dot Matriks.
Mikrokontroller ATmega32 merupakan otak dari seluruh system. Di dalam
mikrokontroler inilah semua data akan diolah.
3.3 Perancangan Power Supplay (PSA)
Rangkaian ini berfungsi untuk mensupplay tegangan ke seluruh rangkaian
yang ada. Rangkaian PSA yang dibuat terdiri dari dua keluaran, yaitu 5 volt dan
12 volt, keluaran 5 volt digunakan untuk mensupplay tegangan ke seluruh
(51)
Vreg
LM7805CT
IN OUT
TIP32C
100ohm
100uF
330ohm 220V 50Hz 0Deg
TS_PQ4_12
2200uF 1uF
1N5392GP 1N5392GP
12 Volt
5 Volt
Gambar 3.5 Rangkaian Power Supplay (PSA)
Trafo CT merupakan trafo stepdown yang berfungsi untuk menurunkan tegangan
dari 220 volt AC menjadi 12 volt AC. Kemudian 12 volt AC akan disearahkan
dengan menggunakan dua buah dioda, selanjutnya 12 volt DC akan diratakan oleh
kapasitor 2200 μF. Regulator tegangan 5 volt (LM7805CT) digunakan agar keluaran yang dihasilkan tetap 5 volt walaupun terjadi perubahan pada tegangan
masukannya. LED hanya sebagai indikator apabila PSA dinyalakan. Transistor
PNP TIP 32 disini berfungsi untuk mensupplay arus apabila terjadi kekurangan
arus pada rangkaian, sehingga regulator tegangan (LM7805CT) tidak akan panas
ketika rangkaian butuh arus yang cukup besar. Tegangan 12 volt DC langsung
diambil dari keluaran 2 buah dioda penyearah.
3.4 Relay
Beberapa aplikasi pada industri dan kontrol proses memerlukan relay
sebagai elemen kontrol penting. Relay merupakan saklar elektromagnetik yang
berfungsi untuk memutuskan, membuat atau mengubah satu atau lebih kontak
elektrik. Ada beberapa macam relay yang terdapat di pasaran. Pada pokoknya
(52)
transistor mekanis k Re adalah sa dengan pe pada rang listrik mau daya cair pengebora Re
dan relay m
karena lebih
elay pengen
aklar magne
emberian en
kaian. EMR
upun elektro
an dan di
an (tanah), p
G
elay biasany
mekanis. Da
h awet dan m
ndali elektro
etis. Relay
nergi elektr
R mempuny
onis. Misaln
berbagai m
pengeboran G R1 100 k D1 IN400 Gambar 3. ya hanya alam peranc mudah dalam omagnetis ini mengh romagnetis,
yai variasi a
nya EMR d
macam kon
(plat), peng
Gambar 3.6
01
.7 Relay De mempunya
angan alat,
m pemakaia
(an electro
hubungkan yang mem aplikasi yan dapat diguna ntrol urutan ggilingan da
6 Simbol Re
Vcc
GND
engan Rang ai satu kum
penulis men
annya.
omechanical
rangkaian
mbuka atau
ng luas baik
akan pada k
n mesin, m
an pengerin elay com no Q1 gkaian Driv mparan, tet nggunakan
l relay = E
beban on
menutup k
k pada rang
kontrol dari misalnya op ndaan. m nc ver tapi relay
relay EMR) / off ontak gkaian kran-perasi dapat
(53)
bergerak. Kontak yang bergerak dipasang pada plunger. Kontak ditunjuk sebagai
normally open (NO) dan normally close (NC). Apabila kumparan diberi tenaga,
terjadi medan elektromagnetis. Aksi dari medan pada gilirannya menyebabkan
plunger bergerak pada kumparan kontak NO dan membuka kontak NC. Jarak
gerak plunger biasanya pendek yaitu sekitar 0,25 inchi atau kurang. Kontak NO
akan membuka ketika tidak ada arus mengalir pada kumparan, tetapi tertutup
secepatnya setelah kumparan menghantarkan arus atau diberi tenaga. Kontak NC
akan tertutup apabila kumparan tidak diberi daya dan membuka ketika kumparan
diberi daya. Masing-masing kontak biasanya digambarkan sebagai kontak yang
tampak dengan kumparan tidak diberi daya. Sebagian besar relay kontrol mesin
mempunyai beberapa ketentuan untuk pengubahan kontak NO menjadi NC, atau
sebaliknya. Itu berkisar dari kontak sederhana (flip-over) untuk melepaskan
kontak dan menempatkan kembali dengan perubahan lokasi pegas.Berikut jenis
gambar relay yang dipasaran.
3.5 Perancangan rangkaian Real Time Clock (RTC) DS1307
RTC adalah jenis pewaktu yang bekerja berdasarkan waktu yang
sebenarnya atau dengan kata lain berdasarkan waktu yang ada pada jam kita. Agar
dapat berfungsi, pewaktu ini membutuhkan dua parameter utama yang harus
(54)
DS1307 merupakan salah satu tipe IC RTC yang dapat bekerja dalam daya listrik
rendah. Di dalamnya berisi waktu jam dan kalender dalam format BCD. Waktu
jam dan kalender memberikan informasi detik, menit, jam, hari, tanggal, bulan,
dan tahun. Pendeteksi sumber listrik juga disediakan untuk mendeteksi kegagalan
sumber listrik dan langsung mengalihkannya ke sumber baterai. RTC difungsikan
sebagai penyimpan data jam walaupun sumber tegangan utama mati atau rusak.
3.6 Saklar
Saklar adalah sebuah perangkat yang digunakan untuk memutuskan
jaringan listrik, atau untuk menghubungkannya. Jadi saklar pada dasarnya adalah
alat penyambung atau pemutus aliran listrik. Selain untuk jaringan listrik arus
kuat, saklar berbentuk kecil juga dipakai untuk alat komponen elektronika arus
lemah.
Secara sederhana, saklar terdiri dari dua bilah logam yang menempel pada
suatu rangkaian, dan bisa terhubung atau terpisah sesuai dengan keadaan sambung
(on) atau putus (off) dalam rangkaian itu. Material kontak sambungan umumnya
dipilih agar supaya tahan terhadap korosi. Kalau logam yang dipakai terbuat dari
bahan oksida biasa, maka saklar akan sering tidak bekerja. Untuk mengurangi
efek korosi ini, paling tidak logam kontaknya harus disepuh dengan logam anti
korosi dan anti karat. pada dasarnya tombol bisa diaplikasikan untuk sensor
mekanik, karena bisa dijadikan sebagai pedoman pada mikrokontroller untuk
(55)
3.7 Flow Chart Program
TIDAK KOLOM =Jumlah Kolom
YA ?
SET DATA oe = 0 MULAI
SET JUMLAH KOLOM
SET JUMLAH BARIS
KIRIM KOLOM DAN BARIS
KIRIM DATA
Oe =1
(56)
BAB 4
PENGUJIAN RANGKAIAN
4.1 Pengujuan Rangkaian Power Suplay
Pengujian rangkaian power supply ini bertujuan untuk mengetahui
tegangan yang dikeluarkan oleh rangkaian tersebut, dengan mengukur tegangan
keluaran dari power supply menggunakan multimeter digital. Setelah dilakukan
pengukuran maka diperoleh besarnya tegangan keluaran sebesar 5 volt. Dengan
begitu dapat dipastikan apakah terjadi kesalahan terhadap rangkaian atau tidak.
Jika diukur, hasil dari keluaran tegangan tidak murni sebesar +9 Volt dan +12
Volt, tetapi +8.97Volt dan +12.03 Volt. Hasil tersebut dikarenakan beberapa
faktor, diantaranya kualitas dari tiap-tiap komponen yang digunakan nilainya
tidak murni. Selain itu, tegangan jala-jala listrik yang digunakan tidak stabil.
4.2
Pengujian Rangkaian Mikrokontroler ATMega32
Pengujian pada rangkaian mikrokontroler ATMega32 ini dapat dilakukan
dengan menghubungkan rangkaian ini dengan rangkaian power supply sebagai
sumber tegangan. Kaki 10 dihubungkan dengan sumber tegangan 5 volt,
sedangkan kaki 11 dihubungkan dengan ground. Kemudian tegangan pada kaki 10
diukur dengan menggunakan Voltmeter. Langkah selanjutnya adalah memberikan
program sederhana pada mikrokontroler ATMega32, program yang diberikan
(57)
#include <mega32.h>
#include <delay.h>
#include <stdio.h>
while (1)
{
// Place your code here
PORTA=0xFF;
DDRA=0xFF;
{
delay_us(100);
PORTA=0x00;
DDRA=0x00;
}
4.3 Pengujian Rangkaian Relay
Pengujian rangkaian relay dapat dilakukan dengan memberikan tegangan 5
volt dan 0 volt pada basis transistor C945. Transistor C945 merupakan transistor
jenis NPN, transistor jenis ini akan aktip jika pada basis diberi tegangan > 0,7 volt
dan tidak aktif jika pada basis diberi tegangan < 0,7 volt. Aktifnya
transistor akan mengaktifkan relay. Pada alat ini relay digunakan untuk
mengaktifkan/menonaktifkan motor dc secara otomatis, dimana hubungan yang
digunakan adalah normally open (NO), berarti relay aktif jika diberi input 5 volt
(high) dari mikrokontroler. Dengan demikian jika relay aktip maka motor dc juga
(58)
Pengujian dilakukan dengan memberikan tegangan 5 volt pada basis
transistor, jika relay aktip dan motor dc juga aktif, maka rangkaian ini telah
berfungsi dengan baik. Pengujian selanjutnya dilakukan dengan menghubungkan
input rangkaian ini ke mikrokontroler pada PD.0 kemudian memberikan
program sederhana pada mikrokontroler ATmega. Program yang diberikan
adalah sebagai berikut:
PORTD.0=1
. . .
Perintah di atas akan memberikan logika high pada PD.0, sehingga PD.0
akan mendapatkan tegangan 5 volt. Tegangan 5 volt ini akan mengaktipkan
transistor C945, sehingga relay menjadi aktip dan kipas juga aktif. Berikutnya
memberikan program sederhana untuk menonaktipkan relay. Programnya sebagai
berikut:
PORTD.0=0
. . .
Perintah di atas akan memberikan logika low pada PD.0 sehingga PD.0
akan mendapatkan tegangan 0 volt. Tegangan 0 volt ini akan menonaktipkan
transistor C945, sehingga relay menjadi tidak aktip dan kipas juga tidak aktif.
4.4 Analisa Bahasa Pemrograman
Bahasa C adalah bahasa pemrograman yang dapat dikatakan berada antara
bahasa tingkat rendah (berorientase mesin) dan bahasa tingkat tinggi (bahasa
(59)
berorientasi pada mesin, namun tetap satu tingkat dibawah sebagian besar bahasa
yang berorientasi persoalan.
Bahasa C cukup dekat dengan komputer untuk memberikan kendali yang
besar terhadap detil implementasi pemakaian, namun cukup jauh untuk
mengabaikan detil hardware. Karena itulah bahasa C suatu ketika dipandang
sebagai bahasa high-level dan pada saat yang lain dilihat sebagai bahasa
low-level.
Bahasa C merupakan bahasa pemrograman terstruktur, yang membagi
program kedalam bentuk sebuah blok. Tujuannya adalah untuk memudahkan
dalam pembuatan dan pengembangan program. Program yang ditulis dengan
bahasa C mudah sekali untuk dipindahkan dari satu jenis mesin ke jenis mesin
lainnya.
Hal ini berkat adanya standarisasi bahasa C yaitu berupa standar ANSI
(American National Standards Institute) yang dijadikan acuan oleh para pembuat
kompiler C. Memasukkan data dan menampilkan data/informasi merupakan
tindakan yang sering dilakukan dalam pemrograman. Penampilan data/informasi
biasanya ditujukan ke piranti layar (monitor), sedangkan pemasukan data biasanya
(60)
4.5 Pengujian Rangkaian dengan Menjalankan Program
Berikut adalah listing program untuk mengetes huruf R pada matriks 8x8
apakah sudah berfungsi:
/*******************************************************
This program was created by the
CodeWizardAVR V3.08 Standard
Automatic Program Generator
© Copyright 1998-2013 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 12/28/2013
Author :
Company :
Comments:
Chip type : ATmega32A
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size : 0
(61)
*******************************************************/
#include <mega32a.h>
#include <serialout.h>
#include <delay.h>
#define sdt PORTC.2
#define sclk PORTC.3
#define soe PORTC.4
// Declare your global variables here
void main(void)
{
// Declare your local variables here
unsigned char kol, kar;
kol = 0x01; // posisi kolom scanning
// huruf_R =0xff,0xff,0x11,0x31,0x71,0xdf,0x8e,0x00; baris
// kolom 1 2 3 4 5 6 7 8 kolom
while (1)
(62)
// Place your code here
kar = 0x55; // data yang mau dikirim (baris)
while (1)
{
soe = 0;
kol = 0x01;
kar = 0xff;
shift_out(kol); // kirim kolom
shift_out(kol); // kirim kolom
shift_out(kar); // kirim baris
soe = 1;
delay_ms(2);
soe = 0;
kol = 0x02;
kar = 0xff;
shift_out(kol); // kirim kolom
shift_out(kol); // kirim kolom
shift_out(kar); // kirim baris
soe = 1;
(63)
soe = 0;
kol = 0x04;
kar = 0x11;
shift_out(kol); // kirim kolom
shift_out(kol); // kirim kolom
shift_out(kar); // kirim baris
soe = 1;
delay_ms(2);
soe = 0;
kol = 0x08;
kar = 0x31;
shift_out(kol); // kirim kolom
shift_out(kol); // kirim kolom
shift_out(kar); // kirim baris
soe = 1;
delay_ms(2);
soe = 0;
kol = 0x10;
kar = 0x71;
shift_out(kol); // kirim kolom
shift_out(kol); // kirim kolom
(64)
soe = 1;
delay_ms(2);
soe = 0;
kol = 0x20;
kar = 0xdf;
shift_out(kol); // kirim kolom
shift_out(kol); // kirim kolom
shift_out(kar); // kirim baris
soe = 1;
delay_ms(2);
soe = 0;
kol = 0x40;
kar = 0x8e;
shift_out(kol); // kirim kolom
shift_out(kol); // kirim kolom
shift_out(kar); // kirim baris
soe = 1;
delay_ms(2);
soe = 0;
kol = 0x80;
(65)
shift_out(kol); // kirim kolom
shift_out(kol); // kirim kolom
shift_out(kar); // kirim baris
soe = 1;
delay_ms(2);
}
}
}
Display dengan matrix yang disusun dengan LED atau menggunakan LED
matrix 8x8 yang sudah jadi, sama saja. Perbedaannya cuma pada saat perakitan,
pembuatan display dengan menyusun LED lebih repot.
Moving Text yang sudah jadi, pengaturannya adalah sebagai berikut:
4.6 Pengisian text
Text dapat diisi dalam 6 halaman
F1 untuk mengisi halaman 1 max 1000 karakter
F2 untuk mengisi halaman 2 max 1000 karakter
F3 untuk mengisi halaman 3 max 1000 karakter
F4 untuk mengisi halaman 4 max 1000 karakter
F5 untuk mengisi halaman 5 max 1000 karakter
F6 untuk mengisi halaman 6 max 1000 karakter
Jika text terisi sudah melebihi 1000, maka otomatis tersimpan dan tulisan
(66)
Setiap pengisian halaman diakhiri dengan spasi dan tekan enter, sebaiknya
diakhiri dengan spasi sebanyak 6 spasi untuk menjaga jarak antar halaman tidak
terlalu berdekatan dan tekan tombol ENTER,
Pada saat pengetikan dapat ditekan BACKSPACE untuk mengapus
ketikan yang salah, kemudian diteruskan dengan mengetik yang benar.
4.7 Pengisian Demo
F7 untuk mengisi demo 1 max sepanjang display
F8 untuk mengisi demo 2 max sepanjang display
F9 untuk mengisi demo 3 max sepanjang display
F10 untuk mengisi demo 4 max sepanjang display
F11 untuk mengisi demo 5 max sepanjang display
F12 untuk mengisi demo 6 max sepanjang display
Pada pengisian demo tidak ada fasilitas untuk menghapus, jika ada yang
salah, tekan enter dan ulangi nomor fungsi dan ketik kembali dengan benar
kemudian enter.
4.8 Penghapusan text
Text dapat diisi dalam 6 halaman dapat dihapus dengan cara
Menghapus halaman 1 Tekan F1 dan tekan spasi kemudian enter
Menghapus halaman 2 Tekan F2 dan tekan spasi kemudian enter
Menghapus halaman 3 Tekan F3 dan tekan spasi kemudian enter
Menghapus halaman 4 Tekan F4 dan tekan spasi kemudian enter
(67)
Menghapus halaman 6 Tekan F6 dan tekan spasi kemudian enter
4.9 Menghapus Demo
Menghapus DEMO 1 Tekan F7 dan tekan spasi kemudian enter
Menghapus DEMO 2 Tekan F8 dan tekan spasi kemudian enter
Menghapus DEMO 3 Tekan F9 dan tekan spasi kemudian enter
Menghapus DEMO 4 Tekan F10 dan tekan spasi kemudian enter
Menghapus DEMO 5 Tekan F11 dan tekan spasi kemudian enter
Menghapus DEMO 6 Tekan F12 dan tekan spasi kemudian enter
4.10 Font
Tekan tombol CAPSLOCK atau SHIFT untuk mengubah bentuk font dari
karakter tipis menjadi karakter tebal, lampu CAPSLOCK akan kelihatan menyala
warna merah pada box hitam yang berhubungan dengan keyboard.
Pada saat lampu hijau menyala, berarti tulisan huruf kecil,
(68)
BAB 5
KESIMPULAN DAN SARAN
5.1Kesimpulan1. Penggunaan Dot Matriks lebih bagus sehingga dapat menampilkan
tampilan yang kita inginkan dalam pengujiannya akan lebih menarik.
2. Alat ini dapat selama 24 jam dan tidak dapat berhenti, terkecuali mati
listrik.
5.2 Saran
1. Dengan beberapa pengembangan dan penyempurnaan sistem dari alat ini
akan dapat lebih sempurna lagi hasilnya.
2. Penggunaan Dot Matriks yang lebih bagus sehingga dapat
menampilkan tampilan yang kita inginkan dalam pengujiannya akan
lebih menarik.
3. Diharapakan pembaca dapat memberi saran dan kritik terhadap
(69)
DAFTAR PUSTAKA
Budiharto, Widodo. 2005. Panduan Lengkap Belajar Mikrokontroller Perancangan
Sistem dan Aplikasi Mikrokontroller. Jakarta: PT. Alex Media
Komputindo.
Elektur, 1996. 302 Rangkaian Elektronika. Penerjemah P.Pratomo dkk. Jakarta: Percetakan PT.Gramedia.
Sultan Setiawan, 2006. Mudah dan Menyenagkan Belajar Mikrokontroler.
Andi Offset.
http://www.sulhansetiawan.com/id/merancang-rangkaian-matriks-led
(70)
(71)
Program Untuk Mengetes Huruf R Pada Matriks 8x8
/*******************************************************
This program was created by the
CodeWizardAVR V3.09 Standard
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : rtx Feb 2014
Version : 0.9
Date : 3/28/2013
Author : kbram
Company : ekatron
Comments:
Chip type : ATmega32A
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
*******************************************************/
#include <mega32a.h>
(72)
#define sdt PORTC.2
#define sclk PORTC.3
#define soe PORTC.4
#define led PORTC.7
#define signal PIND.0
#define dt_in PINA
unsigned char jam, menit, detik;
// Declare your global variables here
unsigned char const pj_kolom = 48;
unsigned char dm_jam[] = {0x00,'1','2',':','3','1',0xaa};
flash char hrf_1[]={0x82,0xff,0xff,0x80,0x00,0x00}; //1 6
flash char hrf_2[]={0x82,0xc1,0xe1,0xb1,0x9f,0x8e,0x00,0x00}; //2 8
flash char hrf_3[]={0x42,0x81,0x89,0x89,0xff,0x76,0x00,0x00}; //3 8
flash char hrf_4[]={0x30,0x38,0x24,0xa2,0xff,0xff,0xa0,0x00,0x00}; //4 9
flash char hrf_5[]={0x4f,0x8f,0x89,0x89,0xf9,0x71,0x00,0x00}; //5 8
flash char hrf_6[]={0x7e,0xff,0x89,0x89,0x89,0xf9,0x72,0x00,0x00}; //6 9
flash char hrf_7[]={0x03,0x03,0xf3,0xfb,0x0f,0x07,0x03,0x00,0x00}; //7 9
(73)
flash char hrf_8[]={0x76,0xff,0x89,0x89,0x89,0xff,0x76,0x00,0x00}; //8 9
flash char hrf_9[]={0x4e,0x9f,0x91,0x91,0x91,0xff,0x7e,0x00,0x00}; //9 9
flash char hrf_0[]={0x7e,0xff,0x81,0x81,0x81,0xff,0x7e,0x00,0x00}; //0 9
flash char hrf_tnd_ttk_koma[]={0x36,0xb6,0x76,0x00,0x00}; //; 5
// I2C Bus functions
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Declare your global variables here
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
signed int txt_idx;
bit isi, txt;
pj_kol = pj_kolom;
(74)
key_in = dt_in; // ps2key stroked
// entering control sequence player
// entering page 1
if (key_in == 0x05) // page one if F1 is pressed
{
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
for (ndx = 0; ndx < 8; ndx ++) // satu baris
{
kirim_kolom(pj_kol,ndx); // sepanjang display
}
}
if (key_in == 13)
{
pg_idx = 0;
(75)
if (txt_idx < 2) iprom_write(p1_sts_addr,0);
text[txt_idx] = 0xaa;
for (ee_addr = page1_start; ee_addr < page1_end; ee_addr++)
{
xkar = text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
if (xkar == 0xaa) break;
}
break;
}
}
}
/// entering page 2
if (key_in == 0x06) // page 2 if F2 is pressed
{
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
(76)
for (ndx = 0; ndx < 8; ndx ++) // satu baris
{
kirim_kolom(pj_kol,ndx); // sepanjang display
}
}
}
} // leaving page 2
// entering page 3
if (key_in == 0x04) // page 3 if F3 is pressed
{
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
for (ndx = 0; ndx < 8; ndx ++) // satu baris
{
kirim_kolom(pj_kol,ndx); // sepanjang display
}
}
if (key_in == 13)
{
(77)
iprom_write(p3_sts_addr,1);
if (txt_idx < 2) iprom_write(p3_sts_addr,0);
text[txt_idx] = 0xaa;
for (ee_addr = page3_start; ee_addr < page3_end; ee_addr++)
{
xkar = text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
if (xkar == 0xaa) break;
}
break;
}
} // leaving page 3
}
// entering page4
if (key_in == 0x0c) // page 4 if F4 is pressed
{
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
(78)
{
kirim_kolom(pj_kol,ndx); // sepanjang display
if (signal == 0)
{
key_in = dt_in; // ascii char in
}
}
}
}
if (key_in == 13)
{
pg_idx = 0;
iprom_write(p4_sts_addr,1);
if (txt_idx < 2) iprom_write(p4_sts_addr,0);
text[txt_idx] = 0xaa;
for (ee_addr = page4_start; ee_addr < page4_end; ee_addr++)
{
xkar = text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
if (xkar == 0xaa) break;
}
break;
(79)
}
} // leaving page 4
// entering page 5
if (key_in == 0x03) // page 5 if F5 is pressed
{
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
for (ndx = 0; ndx < 8; ndx ++) // satu baris
{
kirim_kolom(pj_kol,ndx); // sepanjang display
}
}
if (key_in == 13)
{
pg_idx = 0;
iprom_write(p5_sts_addr,1);
if (txt_idx < 2) iprom_write(p5_sts_addr,0);
text[txt_idx] = 0xaa;
(80)
for (ee_addr = page5_start; ee_addr < page5_end; ee_addr++)
{
xkar = text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
if (xkar == 0xaa) break;
}
break;
}
}
} // leaving page 5
// entering page 6
if (key_in == 0x0b) // page 6 if F6 is pressed
{
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
for (ndx = 0; ndx < 8; ndx ++) // satu baris
{
kirim_kolom(pj_kol,ndx); // sepanjang display
(81)
if (key_in == 13)
{
pg_idx = 0;
iprom_write(p6_sts_addr,1);
if (txt_idx < 2) iprom_write(p6_sts_addr,0);
text[txt_idx] = 0xaa;
for (ee_addr = page6_start; ee_addr < page6_end; ee_addr++)
{
xkar = text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
if (xkar == 0xaa) break;
}
break;
}
}
} // leaving page 6
/// entering animation text
// entering demo 1
if (key_in == 0x83) // demo one if F7 is pressed
{
(82)
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
for (ndx = 0; ndx < 8; ndx ++) // satu baris
{
kirim_kolom(pj_kol,ndx); // sepanjang display
}
}
if (key_in == 13)
{
pg_idx = 0;
iprom_write(d1_sts_addr,1);
if (txt_idx < 2) iprom_write(d1_sts_addr,0);
text[txt_idx] = 0xaa;
for (ee_addr = demo1_start; ee_addr < demo1_end; ee_addr++)
{
xkar = d_text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
if (xkar == 0xaa) break;
}
(83)
}
}
}
/// entering demo 2
if (key_in == 0x0a) // demo 2 if F8 is pressed
{
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
for (ndx = 0; ndx < 8; ndx ++) // satu baris
{
kirim_kolom(pj_kol,ndx); // sepanjang display
}
}
if (key_in == 13)
{
pg_idx = 0;
iprom_write(d2_sts_addr,1);
(84)
text[txt_idx] = 0xaa;
for (ee_addr = demo2_start; ee_addr < demo2_end; ee_addr++)
{
xkar = d_text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
if (xkar == 0xaa) break;
}
break;
}
}
} // leaving page 2
// entering demo 3
if (key_in == 0x01) // demo 3 if F9 is pressed
{
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
for (ndx = 0; ndx < 8; ndx ++) // satu baris
(85)
kirim_kolom(pj_kol,ndx); // sepanjang display
}
}
if (key_in == 13)
{
pg_idx = 0;
iprom_write(d3_sts_addr,1);
if (txt_idx < 2) iprom_write(d3_sts_addr,0);
text[txt_idx] = 0xaa;
for (ee_addr = demo3_start; ee_addr < demo3_end; ee_addr++)
{
xkar = d_text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
if (xkar == 0xaa) break;
}
break;
}
} // leaving page 3
}
// entering demo4
if (key_in == 0x09) // demo 4 if F10 is pressed
(86)
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
for (ndx = 0; ndx < 8; ndx ++) // satu baris
{
kirim_kolom(pj_kol,ndx); // sepanjang display
}
}
if (key_in == 13)
{
pg_idx = 0;
iprom_write(d4_sts_addr,1);
if (txt_idx < 2) iprom_write(d4_sts_addr,0);
text[txt_idx] = 0xaa;
for (ee_addr = demo4_start; ee_addr < demo4_end; ee_addr++)
{
xkar = d_text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
(87)
}
break;
}
}
} // leaving page 4
// entering demo 5
if (key_in == 0x1c) // demo 5 if F11 is pressed
{
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
for (ndx = 0; ndx < 8; ndx ++) // satu baris
{
kirim_kolom(pj_kol,ndx); // sepanjang display
}
}
if (key_in == 13)
{
pg_idx = 0;
(88)
if (txt_idx < 2) iprom_write(d5_sts_addr,0);
text[txt_idx] = 0xaa;
for (ee_addr = demo5_start; ee_addr < demo5_end; ee_addr++)
{
xkar = d_text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
if (xkar == 0xaa) break;
}
break;
}
}
} // leaving page 5
// entering demo 6
if (key_in == 0x07) // demo 6 if F12 is pressed
{
txt_idx = 0;
while (1)
{
isi = 0;
for (idx = 0; idx < pj_kol; idx++) // satu kali tampil
{
(89)
{
kirim_kolom(pj_kol,ndx); // sepanjang display
}
}
if (key_in == 13)
{
pg_idx = 0;
iprom_write(d6_sts_addr,1);
if (txt_idx < 2) iprom_write(d6_sts_addr,0);
text[txt_idx] = 0xaa;
for (ee_addr = demo6_start; ee_addr < demo6_end; ee_addr++)
{
xkar = d_text[pg_idx];
pg_idx++;
iprom_write(ee_addr,xkar);
if (xkar == 0xaa) break;
}
break;
}
}
} // leaving demo 6
}
(90)
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
unsigned char jh, jl, mh, ml;
// Reinitialize Timer1 value
TCNT1H=0x85EE >> 8;
TCNT1L=0x85EE & 0xff;
// Place your code here
led_tick++;
if (led_tick == 1) led = 0;
if (led_tick > 3) led = 1;
if (led_tick > 15) led_tick = 0;
rtc_get_time(&jam,&menit,&detik);
jh = jam/10;
jl = jam%10;
mh = menit/10;
ml = menit%10;
}
void main(void)
{
// Declare your local variables here
unsigned char p1_sts, p2_sts, p3_sts, p4_sts, p5_sts, p6_sts;
(91)
// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=Out Bit1=Out Bit0=Out
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=0 Bit1=0 Bit0=0
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port C initialization
// Function: Bit7=Out Bit6=In Bit5=In Bit4=Out Bit3=Out Bit2=Out Bit1=In Bit0=In
DDRC=(1<<DDC7) | (0<<DDC6) | (0<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=0 Bit6=T Bit5=T Bit4=0 Bit3=0 Bit2=0 Bit1=T Bit0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
// Port D initialization
(92)
DDRD=(0<<DDD7) | (1<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 62.500 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 0.5 s
// Timer1 Overflow Interrupt: On
(93)
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x85;
TCNT1L=0xEE;
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=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;
(1)
case '*': {
lebar = 9;
geser_karakter(lebar,pj_kol); }
break; case '(': {
lebar = 6;
geser_karakter(lebar,pj_kol); }
break; case ')': { lebar = 6;
geser_karakter(lebar,pj_kol); }
break;
case '{': {
lebar = 6;
geser_karakter(lebar,pj_kol); }
break; case '}': {
(2)
lebar = 6;
geser_karakter(lebar,pj_kol); }
break; case '[': {
lebar = 13;
geser_karakter(lebar,pj_kol); }
break; case ']': {
lebar = 13;
geser_karakter(lebar,pj_kol); }
break; // angka case '1': {
lebar = 6;
geser_karakter(lebar,pj_kol); }
break; case '2': {
(3)
geser_karakter(lebar,pj_kol); }
break; case '3': { lebar = 8;
geser_karakter(lebar,pj_kol); }
break; case '4': {
lebar = 9;
geser_karakter(lebar,pj_kol); }
break; case '5': {
lebar = 8;
geser_karakter(lebar,pj_kol); }
break; case '6': {
lebar = 9;
geser_karakter(lebar,pj_kol); }
(4)
break; case '7': {
lebar = 9;
geser_karakter(lebar,pj_kol); }
break; case '8': {
lebar = 9;
geser_karakter(lebar,pj_kol); }
break; case '9': {
lebar = 9;
geser_karakter(lebar,pj_kol); }
break; case '0': { lebar = 9;
geser_karakter(lebar,pj_kol); }
break; }
(5)
///
//// converting text from eeprom to text buffer
// unsigned char eeprom2textbuffer (unsigned char xkar)
void kirim_kolom (unsigned char jkol, unsigned char nbar) // jkol = jumlah kolom, nbar = nomor baris
{
unsigned char kar, pos, i; bit xbit;
kar = pos << nbar;
for (i=0x00; i<0x08; i++) {
xbit=kar & 0x01; if (xbit) sdt = 1; kar = kar >> 1; }
soe = 1; }
void kirim_kolom_demo (unsigned char jkol, unsigned char nbar) // jkol = jumlah kolom, nbar = nomor baris
(6)
{
unsigned char kar, pos, i; bit xbit;
pos = 0x01; soe = 0;
for (i=0x00; i<jkol; i++) {
xbit= ((dm_buff[i] >> nbar) & 0x01); if (xbit) sdt = 1;
}
kar = pos << nbar;
soe = 1; }