You are on page 1of 275

PENDAHULUAN

Pada era sekarang ini mikroelektronika sangat berkembang pesat, IC dan prosesorprosesor mini sudah banyak dipasaran dan mudah untuk didapatkan. Hal ini yang
mengakibatkan mikrokontroler sangat murah karena hampir semua peralatan elektronika
yang kita lihat sehari-hari menggunakan teknologi ini, seperti jam digital, pintu otomatis
yang ada di mall-mall, palang pintu parkir, lampu merah, counter down (angka yang ada
pada lampu merah) dan masih banyak yang lain.
Jika anda melihat benda atau alat yang seperti kami sebutkan diatas pasti anda
berfikir bagaimana ya cara membuat alat seperti itu??, wahpasti susah dan ribet banget
!!!

memang

sebenarnya

untuk

merancang

sebuah

system

yang

menggunakan

mikrokontroler membutuhkan dasar teori tentang mikrokontroler, pengetahuan elektronika


dan pemrograman yang sangat mendasar dan kompleks, dan itu bukan hal yang mudah dan
dapat anda pahami dalam waktu yang singkat.
Namun anda tidak perlu bingung harus memulai dari mana untuk belajar
mikrokontroler. dengan adanya kit
mikrontroler akan teratasi. Kit

ini segala kegundahan dan rasa takut anda pada

ini memang ditunjukkan untuk anda yang benar-benar

awam dalam hal mikroelektronika dan pemrograman. Disini anda akan mempraktekkan
secara langsung tanpa harus terlebih dahulu membaca dasar-dasar teori yang bisa membuat
anda semakin bingung. Dan anda bisa langsung melihat hasil kerja anda secara real tanpa
harus menggunakan simulasi dan membayangkan bagaimana hasilnya.
Dalam kit ini, selain anda belajar mikrokontroler dan pemroraman juga akan
menjelaskan bagaimana cara membuat PCB dengan standart pabrikan internasional dan
sekali lagi untuk membuat PCB dengan satndart pabrikan internasional tidaklah serumit
dan sesusah yang anda bayangkan. Dan sebenarnya sangat mudah dan tidak membutuhkan
waktu yang cukup lama, bahakan hanya membutuhkan waktu + 30 menit saja. Pembuatan
PCB ini akan dijelaskan pada bagian suplemen buku yang ada pada bab-bab terakhir.

Berkenalan dengan Mini32

Mini 32 merupakan suatu development


board yang digunakan sebagai controller untuk
berbagai

aplikasi

interface,

diantaranya

pngendalian LED, seven-segment, dot matrix,


LCD

dsb.

development

Kelebihan
board

utama
ini

mini

adalah

32
tidak

membutuhkan downloader/programmer untuk


mendownload program dari computer ke chip
Atmega 32, cukup dengan menggunakan kabel
USB mini B yang harganya jauh lebih murah
dibandingkan jika anda harus membeli sebuah
downloader.

Sekilas Tentang Mini-32


Apa sih mikrokontroller yang digunakan dalam Mini 32 ini ?
Bagian ini akan menjawab dan menjelaskan tentang chip mikrokontroller yang
digunakan pada mini 32.
Mini

32

ini

mikrokontroller

menggunakan

ATMEL

Selain

Atmega32

itu

mikrokontroller

sebagai prosesor yang merupakan salah

ATMEL Atmega32 ini memiliki fitur

satu jenis mikrokontroller keluaran AVR

yang

yang menganut arsitektur RISC (Reduce

internal,

Instruction Set Compute).

Timer/Counter,

AVR

memiliki

keunggulan

PWM,

lengkap

diantaranya

EEPROM

Port

internal,

Watchdog

I/O,

ADC
timer,

Komparator

dll.

dibandingkan mikrokontroler yang lain.

Dengan adanya fitur yang sangat

AVR

lengkap ini ATMEL Atmega32L dapat

memiliki

program
sebagian

yang

kemampuan
sangat

besar

cepat

instruksi

dieksekusi dalam 1 siklus clock.

eksekusi
karena
hanya

didesain

dan

deprogram

berbagai aplikasi elektronika.

untuk

Berikut akan dijelaskan beberapa fitur yang ada pada ATMEL Atmega32 :
1. Merupakan mikrokontroler AVR 18 yang mempunyai kemampuan yang tinggi
dengan kebutuhan daya yang rendah.
2. Mempunyai 32 buah register.
3. fitur pheripheral
-

Real time counter dengan osilator terpisah

4 buah chanel PWM

Pemrograman serial USART

4. I.nput/Output
-

mempunyai 32 pin I/O

mempunyai 40 pin PDIP

5. hanya membutuhkan 2,7 5,5 V sebagai sumber tegangan/power.

Bagaimana Development Board ini disusun.


Development board ini disusun bagi Anda yang ingin
belajar mikokontroller khususnya mikrokontroller Atmega32.
Development
interaktif,

board
dimana

ini

disusun

Anda

secara

dapat

sistematis

belajar

dan

sekaligus

mempraktekkan secara langsung apa yang sedang Anda


pelajari. Development board ini dapat dengan mudah di pelajari
khusunya bagi Anda yang masih awam atau masih pemula
dalam hal mikrokontroller karena dalam paket development
board di sertakan modul/kit yang akan Anda pelajari disetiap
bab nya. Modul/Kit yang disertakan berupa aplikasi dasar
tentang materi-materi yang Anda pelajari, dan tentunya bisa
Anda kembangkan menjadi sebuah alat atau sistem sesuai
dengan kebutuhan Anda.

Apa itu code vision

Code vision adalah sebuah aplikasi yang


digunakan
untuk
membantu
dalam
pemrograman mikrokontroler yang bekerja
dalam lingkungan pengembangan perangkat
lunak yang terintegrasi (integrated development
Environment/IDE), code vision dilengkapi
dengan source code editor, compiler, linker,
dan dapat memanggil AVR studio untuk
debuggernya.

Bahasa pemrograman code vision


Bahasa pemrograman yang digunakan pada code vision yaitu menggunakan bahasa
pemrograman low level language (assembly) dan high level language (C, Basic, Java, PHP
dsb). Namun dalam buku ini kita akan menggunakan bahasa pemrograman high level yaitu
C, karena selain mudah untuk dipahami struktur penulisannya juga lebih ringkas dibanding
menggunakan bahasa assembler.

Installasi code vision


Langkah awal sebelum kita mencoba untuk menggunakan mini 32 Development
System yang telah kita dapat dan kita aplikasikan menggunakan LED,Seven-Segment,LCD
dsb terlebih dahulu kita harus menginstal codevision yang terdapat pada cd source, code
vision berfungsi sebagai editor serta compiler untuk mikrokontroler AVR seperti yang
digunakan pada development board kita yaitu atmega32L langkahnya sebagai berikut :
1. Masukkan CD kedalam CD drive
2. Buka windows explorer
3. Pilih CD/DVD Drive
4. Buka folder code vision,double klik file dengan nama CodeVision v2.03.4.exe
Setelah kita men-doble klik file tersebut maka proses installasipun akan berjalan, proses
installasi code vision sebagai berikut :

Gambar 1.1
Memilih bahasa installasi

Gambar 1.2
Kotak dialog continue setup
Klik next

Gambar 1.3
Memilih letak Folder Installasi

Gambar 1.4
Memilih letak Shortcuts

Gambar 1.5
Informasi mengenai letak installasi,
klik install

Gambar 1.6
Proses extracting file sekaligus proses
installasi

Gambar 1.7
Proses installasi telah selesai
Klik finish

Restart komputer anda

LED (Light Emitting Diodes)

ight Emitting Diodes atau lebih sering disebut LED adalah komponen semikonduktor
yang mampu merubah energi listrik menjadi cahaya. Sekarang ini hampir semua alat

atau instrumen menggunakan LED sebagai salah satu komponennya. LED bentuknya kecil
dan harganya murah sehingga sangat sederhana untuk digunakan. LED bisa memancarkan
cahaya

yang

berbeda

semikonduktornya.

bergantung

pada

senyawa

kimia

di

dalam

komponen

Keuntungan :
1. LED memancarkan cahaya
yang lebih terang per
wattnya daripada bola lampu
pijar.
2. Lebih mudah dan hemat
untuk menghasilkan
pancaran cahaya berwarna.
3. Dapat menyala dengan
cepat.

Kerugian :
Tengangannya sangat sensitive.
LED harus diberikan tegangan yang
lebih rendah dari batas maksimumnya
dan dialirkan arus dibawah nilai
batasnya. Dapat juga dirangkai seri
dengan resistornya.

Simbol LED
Simbol yang biasa digunakan sebagai simbol LED adalah simbol dioda standar tetapi
dengan

sepasang

anak

panah

keluar

yang

menunjukkan

bahwa

dioda

tersebut

memancarkan cahaya.

Gambar 2.1 Simbol LED


Ada beberapa perbedaan kecil antara beberapa simbol standar LED, ada simbol yang
terkadang dihitamkan ada juga yang tidak dihitamkan. Sering juga ditemui simbol LED
dengan lingkaran yang mengelilinginya, terkadang lingkaran tersebut dihitamkan, terkadang
juga tidak.

Mengenal Pin LED


Beberapa orang terkadang masih bingung membedakan antara mana dioda dan mana
katoda dari sebuah LED.

Gambar 2.2 Pin LED


Seperti yang bisa dilihat, sisi katoda memiliki potongan datar pada fiber glassnya.
Dapat dilihat pula bahwa sisi katoda lebih kecil dibandingkan dengan anodanya, tapi jangan
tertipu pada syarat ini terutama pada LED bekas karena anda tidak tahu apakah kaki kaki
LED tersebut pernah dipotong atai tidak . Kita tahu bahwa banyak sekali jenis LED yang
lain, lebih amannya lihat saja datasheet nya atau mudahnya silahkan uji sebelum disolder

Rangkaian Dasar LED


Gambar 2.3 Rangkaian Led.

Blinking LED/LED kedip.


Aplikasi dasar tentang led yang pertama yaitu Blink LED atau LED yang nyala secara
berkedip. Disini kita akan mempraktekkan bagaimana cara untuk menghidupkan LED
dengan variasi yaitu blink (berkedip). Sebelumnya kita harus membuat sebuah rangkaian led
sederhana. Alat dan bahan sebagai berikut :

Alat dan Bahan :


1. Led 5mm sebanyak 5 buah.

6. Kabel IDE

2. Resistor 220 ohm sebanyak 5 buah.


sebanyak 16 buah.

7. Soket IDE

3. PCB 5x10 cm.


sebanyak 16 buah.

8. Black housing

4. Solder.
single 8 pin.

9. Konektor IDE

5. Tenol.

Setelah semua alat dan bahan terkumpul. Susun/rangkai

led dan resistor pada PCB

sesuai dengan gambar skematik datas. Berikut contoh rangkaian led yang sudah jadi :

Gambar 2.4 Tampak depan.

Selanjutnya kita akan menghubungkan rangkaian led yang telah kita buat sebelumnya ke
mini 32 dengan menggunakan kabel.
Langkahnya sebagai berikut:
1. Hubungkan rangkaian LED dengan Port D pada mini 32.
2. Hubungkan mini 32 ke komputer dengan kabel USB mini B.
3. Buka code vision dan atur konfigurasi chip,clock serta Port keluarannya. Seperti
penjelasan dibawah ini :
Kita

dapat

menjalankan

aplikasi

ini

melalui

menu

startall

programcodevisionCAVRCodeVision C compiler, atau juga dapat melalui desktop dengan


mendouble klik shortcut codevision.

Gambar 2.5 berikut adalah tampilan awal codevision

Untuk memulai projek baru /new project kita pilih menu filenew maka akan muncul kotak
dialog seperti dibawah ini :

Gambar 2.6membuat projek baru

Pilih project kemudian klik OK, kemudian akan muncul kotak dialog konfirmasi kita pilih
yes

Gambar 2.7 konfirmasi projek baru menggunakan codewizardAVR

Kemudian akan muncul kotak dialog konfigurasi mengenai chip serta pin yang akan kita
gunakan

Gambar 2.8 konfigurasi CHIP dan PORT

Pada menu chip, chip yang kita gunakan pada mini 32 adalah ATmega32 dengan nilai
clock

7.372000,

kemudian

kita

setting

port

yang

akan

kita

gunakan

sebagai

output/keluaran yang kemudian disambungkan pada rangkaian LED, sebenarnya kita dapat
menggunakan salah satu dari keempat port diatas, namun pada kesematan kali ini kita
hanya akan menggunakan port D sebagai output dan kita sambungkan dengan rangkaian
LED. Maka kita setting port D sebagai output dengan memilih sub menu port D kemudian
klik In pada bit ke-0 sampai dengan bit ke-7,maka secara otomatis akan berubah menjadi
out

Gambar 2.9 langkah penyimpanan konfigurasi

Setelah kita setting chip, clock serta port yang kita gunakan, langkah selanjutnya
adalah menyimpan konfigurasi tersebut melalui filesave as, kemudian beri nama file, file
yang pertama bereksistensi .cwp, file .cwp kita beri nama led_blink.cwp .kemudian pilih
Generate,Save and Exit, seperti langkah sebelumnya kita beri nama file .c ini dengan nama
file led_blink.c dan file .prj dengan nama led_blink.prj

Gambar 2.10 kode program yang pertama kali

Kotak dialog diatas merupakan lembar kerja dimana kita akan menulis program.

Contoh Program
#include <mega32.h>
#include <delay.h>
void main(void)

// fungsi utama

// Loop pembuka fungsi utama


PORTD=0xFF;

// konfigurasi Port D aktif low

DDRD=0xFF;

// konfigurasi port D sebagai output

while (1)
{
PORTD=0xFF;

// led nyala semua

delay_ms(1000);

// tunda satu detik

PORTD=0x00;

// led mati semua

delay_ms(1000);

// tunda satu detik

}
}

// Loop pembuka while

// Loop pembuka while


// Loop penutup fungsi utama

Program akan berulang terus menerus karena syarat whie (1), dan akan menghasilkan nilai
benar, maka pernyataan yang ada didalam kalang while akan dijalankan berulang dan led
tampak hidup dan mati secara berulang-ulang(blink/kedip) .

Save file yang sudah anda ketik dengan memilih menu FileSave atau klik icon disket
pada tollbar. Pilih menu project kemudian pilih build all, kemudian akan muncul kotak
dialog sebagai berikut :

Kotak dalog tersebut berisi


tentang semua informasi program
yang telah kita buat sebelumnya, jika
sudah muncul informasi no warning
dan no errors berarti program yang
telah
kita
buat
siap
untuk
didownload kedalam mini 32.

Gambar 2.11 compiller information

Led berjalan (shift)


Pada praktik LED yang ke- 2 ini, kita akan mencoba menghidupkan led berjalan/geser
kanan. Seluruh proses installasi perangkat kerasny sama dengan praktik blink led, yang
membedakan hanyalah pada programnya saja
Berkut adalah script program led berjalan :
#include <mega32.h>
#include <delay.h>
int Lampu;
void main(void)
{
DDRD=0xFF;
Lampu=1;
while (1)
{
PORTD= ~Lampu;

//Deklarasi tipe data


//Fungsi utama
// Pengaturan Pin Sebagai Output
// Inisialisasi variable lampu

// Nilai Lampu = Port Output

Lampu = Lampu << 1 ; // Nilai Lampu digeser kekiri 1 bit


if (Lampu>128)
{
Lampu=1;
}

delay_ms(500);

// Waktu tunda

}
}
Setelah anda menulis program pada code vision kemudian simpan dengan nama
led_shift. Setelah dipastikan tidak ada error dan warning (bisa dilihat pada kotak dialog
information setelah program di build all), kemudian download program ke mini 32 dan lihat
hasilnya.

Binary counter
Pada praktik LED yang ke- 3 ini, kita akan mencoba menghidupkan led binary counter.
Seluruh proses installasi perangkat kerasnya sama dengan praktik led sebelumnya, yang
membedakan hanyalah pada programnya saja
Berkut adalah script program led berjalan :
#include <mega32.h>
#include <delay.h>
int Sign;

// Deklarasi tipe data

void main(void)
{
Sign=0;
DDRD=0xFF;
PORTD= ~Sign;
nilai Sign
delay_ms(1000);

// Fungsi Utama

while (1)
{
Sign ++;

//Inisialisasi nilai Sign=0


// Port D dikonfigurasikan sebagai output
// Semua keluaran Port D akan sesuai/sama dengan
//Tunda 1 detik

// Nilai Sign akan bertambah 1

PORTD= ~Sign;

// Semua keluaran Port D akan sesuai/sama dengan

delay_ms(1000);

//Tunda 1 detik

if (Sign==255)
{
Sign=0;
}
}

nilai Sign

// Nilai Sign diubah kembali ke posisi nol

}
Setelah anda menulis program pada code vision kemudian simpan dengan nama
led_bc. Setelah dipastikan tidak ada error dan warning ( bisa dilihat pada kotak dialog
information setelah program di build all), kemudian download program ke mini 32 dan lihat
hasilnya.

Pengenalan Seven Segment.


Seven Segment adalah suatu segmen - segmen yang digunakan menampilkan angka.
Seven segment ini tersusun atas 7 batang LED yang disusun membentuk angka 8 dengan
menggunakan huruf a-f yang disebut DOT MATRIKS. Setiap segmen ini terdiri dari 1 atau 2
Light Emitting Diode ( LED ).

Gambar 3.1 Skema seven segment.

Jenis- jenis Seven Segment

Common Anoda
Disini, semua anoda dari diode disatukan secara parallel dan semua itu
dihubungkan ke VCC dan kemudian LED dihubungkan melalui tahanan pembatas
arus keluar dari penggerak. Karena dihubungkan ke VCC, maka Common Anoda ini
berada pada kondisi Aktif High.

Common Katoda
Disini semua katoda disatukan secara parallel dan dihubungkan ke Ground.
Karena seluruh katoda dihubungkan ke Ground, maka Common Katoda ini berada
pada kondisi Aktif Low.

Gambar 3.2 Seven Segment Common Anoda dan Common Katoda.

berikut adalah tampilan dari seven segment

Gambar 3.3 Tampilan seven segment.

setelah melihat hasil dari tampilan seven segment diatas pasti timbul pertanyaan,
bagaimana caranya supaya seven segment bisa menampilkan tampilan seperti yang ada
pada gambar diatas. Disini kita akan menjawab pertanyaan itu.

Di awal tadi kita sudah tahu apa sebenarnya seven segment itu, tiap-tiap segment
yang ada pada seven segment dibentuk oleh sebuah led, dimana led tersebut akan menyala
jika diberi tegangan antara 3,5 sampai dengan 5 Volt. Untuk menampilkan sebuah angka
ataupun huruf pada penampil seven segment tentunya dibutuhkan beberapa led yang harus
menyala, misal untuk menampilkan angka 0, maka led yang harus menyala/ON adalah
A,B,C,D,E,F. Sedangkan led G dalam keadaan mati/OFF

Setelah membaca penjelasan mengenai pengenalan dasar seven segment diatas,


selanjutnya kita akan menggambar rangkaian dasar sevent segment yang nantinya akan
dibuat PCB serta modulnya dan setelah itu dihubungkan dengan mini 32 kemudian
diprogram.

Alat dan bahan :


1. Seven segment 1 buah.

6. Konektor IDE single 8 pin.

2. PCB 8x6 cm.

7. Tenol.

3. Resistor 220 Ohm 8 buah.

8. Solder.

4. Resistor 1 Kohm 1 buah.


5. Transistor C9012 1 buah.

Gambar 3.4 Rangkaian Seven Segment.

Menampilkan angka dari 0,1,2,3....dst

Contoh program uji segment


#include<mega32.h>
#include<delay.h>
void main(void)
{
DDRC = 0b11111111;
While(1);
{
PORTC = 0b11111110;
}
}

Test segmen 1
#include<mega32.h>
#include<delay.h>
void main(void)
{
DDRC = 0xFF;
//port C di fungsikan sebagai output
While(1);
{
PORTC = 0b11111101;
}
}

Test segmen 2
#include<mega32.h>
#include<delay.h>
void main(void)
{
DDRC = 0b11111111;
//port C di fungsikan sebagai output
While(1);
{
PORTC = 0b11111011;
}
}

Test segmen 3
#include<mega32.h>
#include<delay.h>
void main(void)
{
DDRC = 0b11111111; //port C di fungsikan sebagai output
While(1);
{
PORTC = 0b11110111;
}
}

Contoh program counter up


#include<mega32.h>
#include<delay.h>
Unsigned char Angka;
void main(void)
{
DDRC = 0b11111111;
Angka=0b11111001;
PORTC=Angka;
Delay_ms(1000);
Angka=0b10100100;
PORTC=Angka;
Delay_ms(1000);
Angka=0b11001111;
PORTC=Angka;
Delay_ms(1000);
}

//variabel Angka dengan tipe data unsigned char

Contoh program counter down


#include<mega32.h>
#include<delay.h>
Unsigned char Angka;
void main(void)
{
DDRC = 0b11111111;
Angka=0b11001111;
PORTC=Angka;
Delay_ms(1000);
Angka=0b10100100;
PORTC=Angka;
Delay_ms(1000);
Angka=0b11111001;
PORTC=Angka;
Delay_ms(1000);
}

//variabel Angka dengan tipe data unsigned char

Mungkin sebagian dari anda asing mendengar istilah dot matrik dan timbul
pertanyaan, apa sih dot matrix itu??. Dot matrix merupakan salah satu penampil yang pada
dasarnya tersusun dari led (dot) yang disusun berbentuk baris dan kolom(matrix). Hampir
sama dengan seven segment dan hanya susunan led/segment yang berbeda.
sebenarnya ada beberapa jenis dot matrix, namun pada keempatan kali ini kita hanya
akan membahas dot matrix 8x8 dan 16x16. Dot matrix 8x8 artinya dot matrix yang
mempunyai dot sebanyak 8 baris medatar dan 8 baris menurun. Begitu juga untuk dot
matrix 16x16.
Dot matrix lebih fleksibel dibandingkan dengan penampil-penampil yang lain seperti
led dan seven segment, selain dapat menampilkan angka dan huruf dot matrix juga dapat
untuk menampilkan gambar dan karakter/emoticon. Tapi proses scaning/penampilan
tampilan agak sedikit susah. Jika pada seven segment, anda hanya perlu menghidupkan 8
buah led yang sudah tersusun, namun pada dot matrix anda harus menentukan tiap baris
dan kolomnya.

Gambar 4.1 skema dot matrix.

Sebagai contoh jka anda ingin menampilkan angka 1 pada dot matrix 8x8 maka
susunan dot yang menyala sebagai berikut :
BARIS
0

Setelah membaca sedikit pengenalan dan penjelasan mengenai dot matrix, kemudian
kita buat modul dot matrix sederhana yang nantinya akan kita hubungkan dengan mini 32
dan kita program.

Alat dan Bahan :


1. Dot Matrix 5x7 1 buah (warna terserah)
2. Konektor IDC 12 pin.
3. Soket IDC 12 buah.
4. Black housing 12 buah.
5. Kabel IDC.
6. PCB 5x5 cm.
7. Solder.
8. Tenol.

Contoh program penulisan karakter pada dot matrix

#include <mega32.h>
#include<delay.h>
Void main(main)
{
DDRA=0xFF; //Port A di fungsikan sebagai output.
DDRC=0xFF; //Port C di fungsikan sebagai output.
While(1);
{
PORTA=0b11111110;
PORTC=0b11111111;
delay_ms(1);
PORTC=0b00000000;
delay_ms(10);

PORTA=0b11111101;
PORTC=0b11111111;
delay_ms(1);
PORTC=0b0000100;
delay_ms(10);
PORTA=0b11111011;
PORTC=0b00000100;
delay_ms(1);
PORTC=0b00000000;
delay_ms(10);
PORTA=0b11110111;
PORTC=0b00000100;
delay_ms(1);
PORTC=0b00000000;
delay_ms(10);
PORTA=0b11101111;

PORTC=0b00000100;
delay_ms(1);
PORTC=0b00000000;
delay_ms(10);
}
}

Liquid Cristal Display (LCD)

Liquid
merupakan

Crystal
sebuah

Display

(LCD)

teknologi

layar

digital yang menghasilkan citra pada


sebuah

permukaan

yang

rata

(flat)

dengan memberi sinar pada kristal cair


dan filter berwarna, yang mempunyai
struktur molekul polar, diapit antara
dua elektroda yang transparan. Bila
medan

listrik

diberikan,

molekul

menyesuaikan posisinya pada medan,


membentuk

susunan

kristalin

yang

mempolarisasi cahaya yang melaluinya.

Gambar 4.1 LCD 16x2.

LCD (Liquid Crystal Display)


merupakan komponen display yang
dapat menampilkan karakter huruf,
angka, simbol yang dikemas dalam
16 karakter display sebanyak 2 baris.
Dalam penggunaannya LCD dapat
diprogram dengan 4 bit dan 8 bit
data,

tergantung

Dalam
ditentukan

kebutuhannya.

pemogramannya,
dengan

pada karakter LCD.

LCD

pengalamatan

LCD

berfungsi

menampilkan

suatu nilai hasil sensor, menampilkan


teks, atau menampilkan menu pada
aplikasi

mikrokontroler.

merupakan
tampilan
konsumsi
tersebut

modul
16

daya

LCD

ini

LCD

dengan

baris

dengan

rendah.

Modul

dilengkapi

dengan

mikrokontroler yang didesain khusus


untuk mengendalikan LCD.

Sedang

modul

graphics

LCD 128x64 ini hampir


sama dengan LCD kolom
16x2,
LCD
dapat

hanya
grafik

saja
ini

pada
sudah

menampilakan

gambar/grafik
dimensi 128x64.

dengan
Gambar 4.2 LCD Grafik 128x64

Nokia 5510 LCD modul didasarkan pada PCD8544 48x48 piksel pengontrol LCD
matrix ini adalah LCD grafik dimana dapat menampilkan gambar, logo dan membuat game
sederhana. LCD ini menggunakan mikrokontroler Atmel 8-bit.

Gb. LCD Nokia 5510

Pembuatan rangkaian sederhana LCD 2x16.

Alat dan Bahan :


1. Modul LCD 2x16 1 buah.
2. Konektor IDC single 20 pin.
3. Soket IDC 40 buah.
4. Black housing 40 buah.
5. Kabel IDC.
6. PCB 10x5 cm.
7. Potensio meter 10 Kohm.
8. Solder.
9. Tenol.

Berikut adalah gambar desingnnya :

Jika anda dalam pembuatan PCB menggunakan teknik sablon maupun UV berikut adalah
gambar filmnya :

Berikut gambar contoh rangkaian sederhana LCD yang sudah jadi :

Pembuatan Rangkaian Dasar LCD 128x64

Alat dan bahan :


1. Modul LCD 128x64
2. Konektor IDC single 20 pin.
3. Soket IDC 40 buah.
4. Black housing 40 buah.
5. Kabel IDC.
6. PCB 10x10cm.
7. Solder.
8. Tenol.

Berikut adalah gambar designnya :

Jika dalam proses pembuatan PCB menggunakan teknik UV berikut filmnya :

Berikut gambar contoh hasil pembuatan rangkaian LCD 128x64 yang sudah jadi :

Pembuatan rangkaian sederhana LCD Nokia 5510.

Alat dan bahan :


1. Modul LCD nokia 5510.
2. Konektor IDC single 8
pin.
3. Kabel IDC.
4. Soket IDC 16 buah.
5. Black housing 16 buah.
6. Kapasitor 1f.
7. Solder.
8. Tenol.

Berikut adalah gambar desingnnya :

Jika dalam proses pembuatan PCB menggunakan teknik UV berikut ini filmnya :

Contoh program menampilkan karakter pada LCD 2x16


#include <mega32.h>
#asm
.equ __lcd_port=0x15 ;PORTC //Port C di fungsikan sebagai output ke LCD.
#endasm
#include <lcd.h>
void main(void)
{
lcd_init(16);
lcd_gotoxy(0,0); //Kursor ditempatakan pada baris ke 0 dan kolom ke 0.
lcd_putsf("BELAJAR MINI 32!");
}

Contoh Program penulisan karakter pada LCD 128x64


//*Aplikasi Dasar Graphic LCD 128x64*//
Menampilkan Tulisan dan Character
#include <mega32.h>
#include <delay.h>
#include <stdlib.h>
#include <stdio.h>
#include <glcd_128x64.h>
void main(void)
{
delay_ms(1000);
init_lcd();
off();

// glcd

on();

// glcd

SetStartLine(0);
glcd_clear();

lcd_printf(30,1,"POWER ON");
delay_ms(50):
delay_ms(2000);
WDTCR=0x0F;

// watchdog

show(at[0],1);
delay_ms(2000);

glcd_clear();

while (1)
{
lcd_printf(4,2,"Graphics LCD");
delay_ms(2000);
glcd_clear();
lcd_printf2(4,5,"SELAMAT MENCOBA");

delay_ms(2000);
glcd_clear();
};
}

Contoh Penulisan Program Pada LCD Nokia 5510


Kode Program Sub Rutin LCD.C
#define SCK PORTA.0
#define SDI PORTA.1
#define D_C PORTA.2
#define SCE PORTA.3
#define RES PORTA.4
#define BL

PORTA.5

#define LCD_X

84

#define LCD_Y

48

#define HIGH

#define LOW

#include <font5x7.c>

/*****************************************************/
void send_data_lcd(char byte)
{
unsigned char i;
for (i=0;i<8;i++)
{
if (byte&0x80) SDI=1; else SDI=0;
byte<<=1;
SCK=1;
SCK=0;
}
}

/*****************************************************/

void write_command(char byte_command)


{
D_C=0;
SCE=0;
send_data_lcd(byte_command);
SCE=1;
}

/*****************************************************/
void write_data(unsigned char byte_data)
{
D_C=1;
SCE=0;
send_data_lcd(byte_data);
SCE=1;
}

/**********************************************************************************
***/
void send_lcd_data(flash unsigned char values[], unsigned int amount)
{
unsigned int counter;

for (counter=0; counter < amount;counter++)


{
write_data(values[counter]);
}
}

void goto_x_y(unsigned int x, unsigned int y)


{
write_command(0x40|(y&0x07));

// Y axis initialisation: 0100 0yyy

write_command(0x80|(x&0x7f));

// X axis initialisation: 1xxx xxxx

}
/*****************************************************/
void lcd_clear(void)
{
unsigned int ddram;

goto_x_y(0,0);
for (ddram=504;ddram>0;ddram--)
{
write_data(0x00);
}}

// 84*6=504

clear LCD

void LCD_init(void)
{
DDRA=0b11111111;

// Port A

D_C=0;
SCE=0;
RES=0; delay_ms(100); RES=1;

write_command(0x21);

// set extins extended instruction

set
write_command(0x90);
v2: 0xa0 (for 3V) // v3: 0xc2 (2v6-5v)

// (0xc2Vop

v1: 0xc8 (for 3V)//

write_command(0x20);
right, X axe are incremented automatically ,

// horizontal mode from left to


// 0x22 for vertical addressing

,back on normal instruction set too


write_command(0x0c);
lcd_clear();
is blurred with random pixels

// mod control normal change


// reset DDRAM, otherwise the lcd

/**********************************************************************************
***/
void lcd_printf(unsigned char x, unsigned char y,
{
unsigned char n,w;
unsigned int yy;
goto_x_y(x,y);
for (n = 0;Str[n]!=0;n++)
{
yy=(*(Str+n)-32);
w=wide5x7[yy];
yy*=5;
send_lcd_data(&font5x7[yy],w);
write_data(0);
}

flash unsigned char *Str,...)

Kode Program Sub Rutin font5x7.C


/************************************************************************
*Driver for Graphic LCD Display
************************************************************************/
flash unsigned char font5x7[] = {
0x00, 0x00, 0x00, 0x00, 0x00,

// (space)

0x5F, 0x00, 0x00, 0x00, 0x00,

// !

0x07, 0x00, 0x07, 0x00, 0x00,

// "

0x14, 0x7F, 0x14, 0x7F, 0x14,

// #

0x24, 0x2A, 0x7F, 0x2A, 0x12,

// $

0x23, 0x13, 0x08, 0x64, 0x62,

// %

0x36, 0x49, 0x55, 0x22, 0x50,

// &

0x05, 0x03, 0x00, 0x00, 0x00,

// '

0x1C, 0x22, 0x41, 0x00, 0x00,

// (

0x41, 0x22, 0x1C, 0x00, 0x00,

// )

0x08, 0x2A, 0x1C, 0x2A, 0x08,

// *

0x08, 0x08, 0x3E, 0x08, 0x08,

// +

0x50, 0x30, 0x00, 0x00, 0x00,

// ,

0x08, 0x08, 0x08, 0x08, 0x08,

// -

0x30, 0x30, 0x00, 0x00, 0x00,

// .

0x20, 0x10, 0x08, 0x04, 0x02,

// /

0x3E, 0x51, 0x49, 0x45, 0x3E,

// 0

0x00, 0x42, 0x7F, 0x40, 0x00,

// 1

0x42, 0x61, 0x51, 0x49, 0x46,

// 2

0x21, 0x41, 0x45, 0x4B, 0x31,

// 3

0x18, 0x14, 0x12, 0x7F, 0x10,

// 4

0x27, 0x45, 0x45, 0x45, 0x39,

// 5

0x3C, 0x4A, 0x49, 0x49, 0x30,

// 6

0x01, 0x71, 0x09, 0x05, 0x03,

// 7

0x36, 0x49, 0x49, 0x49, 0x36,

// 8

0x06, 0x49, 0x49, 0x29, 0x1E,

// 9

0x00, 0x36, 0x36, 0x00, 0x00,

// :

0x56, 0x36, 0x00, 0x00, 0x00,

// ;

0x08, 0x14, 0x22, 0x41, 0x00,

// <

0x14, 0x14, 0x14, 0x14, 0x14,

// =

0x41, 0x22, 0x14, 0x08, 0x00,

// >

0x02, 0x01, 0x51, 0x09, 0x06,

// ?

0x7F, 0x7F, 0x7F, 0x7F, 0x7F,

// @

0x7E, 0x11, 0x11, 0x11, 0x7E,

// A

0x7F, 0x49, 0x49, 0x49, 0x36,

// B

0x3E, 0x41, 0x41, 0x41, 0x22,

// C

0x7F, 0x41, 0x41, 0x22, 0x1C,

// D

0x7F, 0x49, 0x49, 0x49, 0x41,

// E

0x7F, 0x09, 0x09, 0x01, 0x01,

// F

0x3E, 0x41, 0x41, 0x51, 0x32,

// G

0x7F, 0x08, 0x08, 0x08, 0x7F,

// H

0x41, 0x7F, 0x41, 0x00, 0x00,

// I

0x32, 0x49, 0x79, 0x41, 0x3E,// @

0x20, 0x40, 0x41, 0x3F, 0x01,// J


0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x7F, 0x02, 0x04, 0x02, 0x7F,// M
0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x46, 0x49, 0x49, 0x49, 0x31,// S
0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x7F, 0x20, 0x18, 0x20, 0x7F,// W
0x63, 0x14, 0x08, 0x14, 0x63,// X
0x03, 0x04, 0x78, 0x04, 0x03,// Y

0x61, 0x51, 0x49, 0x45, 0x43,// Z


0x7F, 0x41, 0x41, 0x00, 0x00, // [
0x02, 0x04, 0x08, 0x10, 0x20,// "\"
0x41, 0x41, 0x7F, 0x00, 0x00,// ]
0x04, 0x02, 0x01, 0x02, 0x04,// ^
0x40, 0x40, 0x40, 0x40, 0x40,// _
0x01, 0x02, 0x04, 0x00, 0x00, // `
0x20, 0x54, 0x54, 0x78, 0x00,

// a

0x7F, 0x44, 0x44, 0x38, 0x00,

// b

0x38, 0x44, 0x44, 0x44, 0x00,

// c

0x38, 0x44, 0x44, 0x7F, 0x00,

// d

0x38, 0x54, 0x54, 0x58, 0x00,

// e

0x08, 0x7E, 0x09, 0x01, 0x00,

// f

0x08, 0x54, 0x54, 0x3C, 0x00,

// g

0x7F, 0x04, 0x04, 0x78, 0x00,

// h

0x7D, 0x00, 0x00, 0x00, 0x00,

// i

0x20, 0x40, 0x44, 0x3D, 0x00,

// j

0x7F, 0x10, 0x28, 0x44, 0x00,

// k

0x7F, 0x00, 0x00, 0x00, 0x00,

// l

0x7C, 0x04, 0x18, 0x04, 0x78,

// m

0x7C, 0x04, 0x04, 0x78, 0x00,

// n

0x38, 0x44, 0x44, 0x38, 0x00,

// o

0x7C, 0x14, 0x14, 0x08, 0x00,

// p

0x08, 0x14, 0x14, 0x7C, 0x00,

// q

0x7C, 0x08, 0x04, 0x04, 0x00,

// r

0x48, 0x54, 0x54, 0x20, 0x00,

// s

0x04, 0x3F, 0x44, 0x40, 0x00,

// t

0x3C, 0x40, 0x40, 0x3C, 0x00,

// u

0x1C, 0x20, 0x40, 0x20, 0x1C,// v


0x3C, 0x40, 0x30, 0x40, 0x3C,

// w

0x44, 0x28, 0x10, 0x28, 0x44,// x


0x0C, 0x50, 0x50, 0x3C, 0x50,

// y

0x64, 0x54, 0x4C, 0x00, 0x00,

// z

0x08, 0x36, 0x41, 0x00, 0x00, // {


0x7F, 0x00, 0x00,0x00,

0x00, // |

0x41, 0x36, 0x08, 0x00, 0x00, // }


0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
0x08, 0x1C, 0x2A, 0x08, 0x08 // <};
flash unsigned char wide5x7[] = {
0x02,// (space)
0x01,// !
0x03,// "
0x05,// #
0x05,// $
0x05,// %
0x05,// &
0x02,// '

0x03,// (
0x03,// )
0x05,// *
0x05,// +
0x02,// ,
0x05,// 0x02,// .
0x05,// /
0x05,// 0
0x05,// 1
0x05,// 2
0x05,// 3
0x05,// 4
0x05,// 5
0x05,// 6
0x05,// 7

0x05,// 8
0x05,// 9
0x05,// :
0x02,// ;
0x04,// <
0x05,// =
0x04,// >
0x05,// ?
0x05,// @
0x05,// A
0x05,// B
0x05,// C
0x05,// D
0x05,// E
0x05,// F
0x05,// G

0x05,// H
0x03,// I
0x05,// J
0x05,// K
0x05,// L
0x05,// M
0x05,// N
0x05,// O
0x05,// P
0x05,// Q
0x05,// R
0x05,// S
0x05,// T
0x05,// U
0x05,// V
0x05,// W

0x05,// X
0x05,// Y
0x05,// Z
0x03,// [
0x05,// "\"
0x03,// ]
0x05,// ^
0x05,// _
0x03,// `
0x04,// a
0x04,// b
0x04,// c
0x04,// d
0x04,// e
0x04,// f
0x04,// g

0x04,// h
0x01,// i
0x04,// j
0x04,// k
0x01,// l
0x05,// m
0x04,// n
0x04,// o
0x04,// p
0x04,// q
0x04,// r
0x04,// s
0x04,// t
0x04,// u
0x05,// v
0x05,// w

0x05,// x
0x04,// y
0x03,// z
0x03,// {
0x01,// |
0x03,// }
0x05,// ->
0x05 // <};

Kode Program Main.C


#include <mega32.h>
#include <delay.h>
#include <stdlib.h>
#include <LCD5110.c>
void main(void)
{
delay_ms(1000);

//Waktu tunda 1 detik.

LCD_init();
BL=0;
lcd_printf(4, 1, "Selamat Datang");
lcd_printf(4, 3, "Di MM UGM");
while (1)
{
}
}

Buzzer adalah Perangkat pemberi isyarat


suara

(sirine),

yang

mana

dapat

berupa

Buzzer

ini

sering

digunakan

pada perangkat alarm, pewaktu dan

mekanik maupun elektromekanik.Perangkat ini

pemberi

didasarkan pada system elektromekanik yang

pengguna saat melakukan input atau

sama dengan bell listrik tanpa gong logam.

ketikan pengguna mengeklik sebuah

Demikian pula, relay dapat dihubungkan ke

mouse atau tombol. Aplikasi dasar

interupsi yang berhubungan langsung dengan

lainnya sebagai pengeras suara pada

arus, menghubungkan ke buzz.

bel

Masukannya berupa tegangan. Ketika


buzzer dihubungkan ke suatu power supply
dan diberikan tegangan dan frekuensi yang
semakin tinggi maka menghasilkan bunyi yang
semakin keras.

informasi(penanda)

sekolah,

jam

weker,

kebakaran dan lain-lain.

kepada

sirine

Untuk membuat rangkaian


sederhana

buzzer

anda

bisa

menggunakan PCB atau langsung


dengan menggunakan kabel IDC,
hala ini karena rangkaian buzzer
sangat

sederhana

dibutuhkan
IDC,soket

hanya
dan

masing-masing

bahan

buzzer,kabel

black
4

yang

housing

buah

sebuah resistor 220 ohm.

serta

Gambar 5.1 Rangkaian sederhana buzzer.

Berikut adalah contoh kode program sederhana buzzer :


#include <mega32.h>
#include <stdio.h>
#include <delay.h>
void main (void)
{
DDRC=0xff;

//Port C di fungsikan sebagai output.

while (1)
{
PORTC=0;
delay_ms(1);
PORTC=255;
delay_ms(1);
}
}

//

ON

// Tunda 1 ms = Tunda 0,001 detik


// OFF
// Tunda 1 ms = Tunda 0,001 detik

Pengenalan Tombol
Pada intinya tombol merupakan sebuah saklar pusbutton, Pushbutton merupakan
sebuah device untuk menghubungkan dan memutuskan rangkaian listrik antara 2 titik.
Penggunaan pushbutton dikehidupan sehari-hari hampir menyentuh semua bidang. Di
bidang komputer dengan keyboard dan mouse, dibidang otomotif dengan panel-panel
kontrolnya, bahkan diperalatan rumah tangga sekalipun seperti kontrol peralatan listrik juga
menggunakan push button.

Gambar 12. Aktif high Push Button


Aktif high pushbutton merupakan pushbutton yang memiliki karakteristik saat tidak
ada

penekanan

maka

dalam

keadaan

terputus(off)

sedangkan

saat

ditekan

akan

tersambung(on).
Pada kesempatan kali ini kita akan mencoba mengaplikasikan tombol(pushbutoon,
keypad 3x4, keypad Nokia 6610) dengan mini 32.

Pembuatan modul sederhana Push ON/push button.


Alat dan Bahan :
1. Push button 8 buah.
2. Konektor IDC single
10 buah.
3. Soket ICD 20 buah.
4. Black
buah

housing

5. Kabel IDC.
6. PCB 7,5x5 cm.
7. Solder.
8. Tenol.

20

Berikut adalah gambar designnya:

Jika dalam pembuatan PCB anda menggunakan teknik sablon atau UV berikut gambar
filmnya :

Berikut gambar contoh hasil jadi rangkaian sederhana push button :

Pembuatan PCB untuk modul keypad 3x4 :

Alat dan bahan :


1. Konektor IDC single 4 pin.
2. Soket IDC 8 buah.
3. Black housing 8 buah.
4. Kabel IDC.
5. PCB 10x10 cm.
6. Solder.
7. Tenol.

Berikut adalah gambar desingnya :

Contoh gambar yang sudah jadi :

Pembuatan PCB untuk modul keypad Nokia 6610:

Alat dan bahan :


1. Konektor IDC single 4 pin.
2. PCB 10x10 cm.
3. Solder.
4. Tenol.

Contoh gambar yang sudah jadi :

Untuk mengaplikasikan tombol push on akan dikombinasikan dengan rangkaian led.


Tombol push on di fungsikan sebagai input sedangkan rangkaian led di fungsikan sebagai
output. Contoh kode programnya sebagai berikut :
// Latihan Tombol
// Menekan Tombol dan Menyalakan Led
#include <mega32.h>
#include <delay.h>
Void TestTombol4(void);
void main(void)
{
DDRC=255;

// Port Led

= Output

PORTC=255;
DDRA=0b00000000;
PORTA=0b11111111;
while(1)
{

// Port Tombol = Input

TestTombol4();

//pemanggil fungsi TestTombol.

}
}
void TestTombol4(void)
{
if (PINA.0==0) //Jika Pin A 0 nilainya sama dengan 0 maka akn menjalankan
pernyataan selanjutnya.
{
PORTC=0b11111110;

// Port C 0 ON.

delay_ms(300);

// Waktu tunda 30ms.

PORTC=0b01111111;

// Port C 0 Off.

delay_ms(300);

// Waktu tunda 30ms.

}
else

// Jika Pin A 0 nilainya tidak sama dengan 0 maka akan menjalankan


pernyataan di bawah.

PORTC=0b11111111; //Port C Off.


}

Keypad 3x4 di kombinasikan dengan penampil LCD 16x2. Berikut adalah contoh kode
programnya :
#asm
.equ __lcd_port=0x15
#endasm
#include <mega32.h>
#include <delay.h>
#include <lcd.h>
void main(void)
{
DDRA=0b11110000;

// PORTC

while(1)
{
PORTA=0b11101111;
delay_ms(30);
if (PINA.0==0) { lcd_gotoxy(1,1); lcd_putsf ("1"); }
if (PINA.1==0) { lcd_gotoxy(1,1); lcd_putsf ("4"); }
if (PINA.2==0) { lcd_gotoxy(1,1); lcd_putsf ("7"); }
if (PINA.3==0) { lcd_gotoxy(1,1); lcd_putsf ("*"); }
PORTA=0b11011111;
delay_ms(30);
if (PINA.0==0) { lcd_gotoxy(1,1); lcd_putsf ("2"); }
if (PINA.1==0) { lcd_gotoxy(1,1); lcd_putsf ("5"); }
if (PINA.2==0) { lcd_gotoxy(1,1); lcd_putsf ("8"); }
if (PINA.3==0) { lcd_gotoxy(1,1); lcd_putsf("0"); }

PORTA=0b10111111;
delay_ms(30);
if (PINA.0==0) { lcd_gotoxy(1,1); lcd_putsf ("3"); }
if (PINA.1==0) { lcd_gotoxy(1,1); lcd_putsf ("6"); }
if (PINA.2==0) { lcd_gotoxy(1,1); lcd_putsf ("9"); }
if (PINA.3==0) { lcd_gotoxy(1,1); lcd_putsf ("#"); }
}
}

Motor atau motor listrik adalah perangkat


elektro magnetis yang mengubah energi listrik
menjadi energi mekanik, dimana energi mekanik
itu berupa putaran dari rotor. Mekanisme kerja
motor secara umum adalah apabila sebuah
kawat berarus diletakkan antara kutub magnet
maka pada kawat itu akan bekerja gaya
sehingga kawat bergerak.

Jenis dari motor listrik ini sendiri antara lain motor DC dan motor stepper.
Motor DC
Mesin yang berfungsi mengubah tenaga listrik DC menjadi tenaga mekanik dengan
tenaga gerak berupa putaran dari rotor. Komponen utama motor ini : kutub medan, dinamo
dan komutator.

utub medan Secara sederhada digambarkan bahwa interaksi dua kutub magnet
akan menyebabkan perputaran pada motor DC. Motor DC memiliki kutub medan
yang stasioner dan dinamo yang menggerakan bearing pada ruang diantara

kutub medan. Motor DC sederhana memiliki dua kutub medan: kutub utara dan kutub
selatan. Garis magnetik energi membesar melintasi bukaan diantara kutub-kutub dari utara
ke selatan. Untuk motor yang lebih besar atau lebih komplek terdapat satu atau lebih
elektromagnet. Elektromagnet menerima listrik dari sumber daya dari luar sebagai penyedia
struktur medan.

inamo. Bila arus masuk menuju dinamo, maka arus ini akan menjadi
elektromagnet. Dinamo yang berbentuk silinder, dihubungkan ke as penggerak
untuk menggerakan beban. Untuk kasus motor DC yang kecil, dinamo berputar
dalam medan magnet yang dibentuk oleh kutub-kutub, sampai kutub utara dan

selatan magnet berganti lokasi. Jika hal ini terjadi, arusnya berbalik untuk merubah kutubkutub utara dan selatan dinamo.

ommutator. Komponen ini terutama ditemukan dalam motor DC. Kegunaannya


adalah untuk membalikan arah arus listrik dalam dinamo. Commutator juga
membantu dalam transmisi arus antara dinamo dan sumber daya.

Keuntungan

utama

motor

DC

adalah

sebagai

pengendali

kecepatan,

yang

tidak

mempengaruhi kualitas pasokan daya. Motor ini dapat dikendalikan dengan mengatur:
1. Tegangan dinamo meningkatkan tegangan dinamo akan meningkatkan kecepatan
2. Arus medan menurunkan arus medan akan meningkatkan kecepatan.

Gambar 8.1 motor DC

Motor Stepper
Motor Stepper adalah motor DC yang gerakannya bertahap (step per step) dan memiliki
akurasi yang tinggi tergantung pada spesifikasinya. Setiap motor stepper mampu berputar
untuk setiap stepnya dalam satuan sudut (0.75, 0.9, 1.8), makin keil sudut per step-nya
maka gerakan per step-nya motor stepper tersebut makin presisi. Motor stepper banyak
digunakan untuk aplikasi-aplikasi yang biasanya cukup menggunakan torsi yang kecil,
seperti untuk penggerak piringan disket atau piringan CD. Dalam hal kecepatan, kecepatan
motor stepper cukup cepat jika dibandingkan dengan motor DC.
Motor stepper merupakan motor DC yang tidak memiliki komutator. Pada umumnya
motor stepper hanya mempunyai kumparan pada statornya sedangkan pada bagian rotornya
merupakan magnet permanent. Dengan model motor seperti ini maka motor stepper dapat
diatur posisinya pada posisi tertentu dan/atau berputar ke arah yang diinginkan, searah
jarum jam atau sebaliknya.

Kecepatan motor stepper pada dasarnya ditentukan oleh kecepatan pemberian data pada
komutatornya. Semakin cepat data yang diberikan maka motor stepper akan semakin cepat
pula berputarnya. Pada kebanyakan motor stepper kecepatannya dapat diatur dalam daerah
frekuensi audio dan akan menghasilkan putaran yang cukup cepat.
Variabel Reluktansi Motor
Pada motor stepper yang mempunyai variabel reluktansi maka terdapat 3 buah lilitan
yang pada ujungnya dijadikan satu pada sebuah pin common. Untuk dapat menggerakkan
motor ini maka aktivasi tiap-tiap lilitan harus sesuai urutannya.
Gambar 8.2. merupakan gambar struktur dari motor dengan variabel reluktansi
dimana tiap stepnya adalah 30. Mempunyai 4 buah kutub pada rotor dan 6 buah kutub
pada statornya yang terletak saling berseberangan.

Gambar 8.2 Variabel Reluktance Motor


Jika lilitan 1 dilewati oleh arus, lilitan 2 mati dan lilitan 3 juga mati maka kumparan 1

akan menghasilkan gaya tolakan kepada rotor dan rotor akan berputar sejauh 30 searah
jarum jam sehingga kutub rotor dengan label Y sejajar dengan kutub dengan label 2.
Jika kondisi seperti ini berulang terus menerus secara berurutan, lilitan 2 dilewati
arus kemudian lilitan 3 maka motor akan berputar secara terus menerus. Maka agar dapat
berputar sebanyak 21 step maka perlu diberikan data dengan urutan seperti pada Gambar
8.3

Gambar 8.3 Urutan Lilitan Kumparan Pada Motor


1 pada Gambar 8.3. diartikan bahwa lilitan yang bersangkutan dilewati arus sehingga
menghasilkan st="on"gaya tolak untuk rotor. Sedangkan 0 diartikan lilitan dalam kondisi
off, tidak mendapatkan arus.

Unipolar Motor Stepper


Motor stepper dengan tipe unipolar adalah motor stepper yang mempunyai 2 buah
lilitan yang masing-masing lilitan ditengah-tengahnya diberikan sebuah tap seperti tampak
pada Gambar 8.4

Gambar 8.4 Unipolar Stepper Motor


Motor ini mempunyai step tiap 30 dan mempunyai dua buah liliatan yang
didistribusikan berseberangan 180 di antara kutub pada stator. Sedangkan pada rotonya
menggunakan magnet permanen yang berbentuk silinder dengan mempunyai 6 buah kutub,
3 kutub selatan dan 3 buah kutub utara. Sehingga dengan konstrusi seperti ini maka jika
dibutuhkan ke presisian dari motor stepper yang lebih tinggi dibutuhkan pula kutub-kutub
pada stator dan rotor yang semakin banyak pula. Pada Gambar 21, motor tersebut akan
bergerak setiap step sebesar 30 dengan 4 bit urutan data (terdapat dua buah lilitan dengan
tap, total lilitan menjadi 4 lilitan).

Ketelitian dari magnet permanen di rotor dapat sampai 1.8 untuk tiap stepnya. Ketika
arus mengalir melalui tap tengah pada lilitan pertama akan menyebabkan kutub pada stator
bagian atas menjadi kutub utara sedangkan kutub stator pada bagian bawah menjadi kutub
selatan. Kondisi akan menyebabkan rotor mendapat st="on"gaya tarik menuju kutub-kutub
ini. Dan ketika arus yang melalui lilitan 1 dihentikan dan lilitan 2 diberi arus maka rotor
akan mengerak lagi menuju kutub-kutub ini. Sampai di sini rotor sudah berputar sampai
30 atau 1 step.

Gambar 8.5 Urutan Data Untuk Motor Stepper dengan Tipe Unipolar (torsi normal)

Gambar 8.6 Urutan Data Motor Stepper Tipe Unipolar (torsi besar)
Untuk meningkatkan torsi yang tidak terlalu besar maka dapat digunakan urutan
pemberian data seperti pada gambar 8.6 Dimana terdapat dua buah lilitan yang di beri arus
pada suatu waktu. Dengan pemberian urutan data seperti ini akan menghasilkan torsi yang
lebih besar dan tentunya membutuhkan daya yang lebih besar.
Dengan urutan data baik pada Gambar 8.5 atau Gambar 8.6 akan menyebabkan
motor berputar sebanyak 24 step atau 4 putaran.

Bipolar Motor Stepper


Motor dengan tipe bipolar ini mempunyai konstruksi yang hampir sama dengan motor
stepper tipe unipolar namun tidak terdapat tap pada lilitannya, seperti tampak pada Gambar
8.7

Gambar 8.7 Bipolar Motor Stepper


Penggunaan motor dengan tipe bipolar ini membutuhkan rangkaian yang sedikit lebih
rumit untuk mengatur agar motor ini dapat berputar dalam dua arah. Biasanya untuk
menggerakkan motor stepper jenis ini membutuhkan sebuah driver motor yang sering
dikenal sebagai H Bridge. Rangkaian ini akan menontrol tiap-tiap lilitan secara independen
termasuk dengan polaritasnya untuk tiap-tiap lilitan.

Untuk mengontrol agar motor ini dapat berputar satu step maka perlu diberikan arus
untuk tiap-tiap lilitan dengan polaritas tertentu pula. Urutan datanya dapat dilihat pada
Gambar 8.8.

Gambar 8.8 Urutan Data Motor Stepper tipe Bipolar

Rangkaian Dasar Driver Motor DC :

Alat dan bahan :


1. Konektor IDC single 5 pin.
2. PCB 5x5 cm.
3. Resistor 4K7.
4. Transistor BD139.
5. Solder.
6. Tenol.

Berikut gambar desainnya :

Contoh gambar yang sudah jadi :

Rangkaian Dasar Driver Motor Stepper :

Alat dan bahan :


5. Konektor IDC single 10 pin.
6. PCB 5x5 cm.
7. IC ULN2003.
8. Solder.
9. Tenol.

Berikut Gambar desainnya :

Contoh gambar yang sudah jadi :

Berikut contoh kode program sederhana untuk memutar motor DC :


#include <mega32.h>
#include <delay.h>
unsigned char high, low, i, speed;
void main(void)
{
DDRC.0=1;
PORTC.0=0;
speed=10;
high=speed;
low=100-high;

//max 100

if (speed>100) { high=0; low=0; }


while(1)
{
for (i=0; i<high; i++)
{
PORTC.0=1;
delay_ms(1);
}
for (i=0; i<low; i++)
{
PORTC.0=0;
delay_ms(1);
}
}}

min 10

duty cycle

Berikut Contoh kode program motor stepper :


#include <mega32.h>
#include <delay.h>
void step_maju(void)
{
PORTB =0b00000001;

// A

delay_ms(2);
PORTB =0b00000010;

// B

delay_ms(2);
PORTB =0b00000100;

// ~A

delay_ms(2);
PORTB =0b00001000;
delay_ms(2);
}

// ~B

void step_mundur(void)
{
PORTB =0b00001000;

// A

delay_ms(2);
PORTB =0b00000100;

// B

delay_ms(2);
PORTB =0b00000010;

// ~A

delay_ms(2);
PORTB =0b00000001;
delay_ms(2);
}

// ~B

void main(void)
{
DDRB

=0b00001111;

PORTB =0b00000000;

while(1)
{
// step_maju();
step_mundur();
delay_ms(100);
}
}

ensor adalah sesuatu yang digunakan untuk mendeteksi adanya perubahan


lingkungan fisik atau kimia. Variabel keluaran dari sensor yang diubah menjadi
besaran listrik disebut Transduser. Gelombang ultrasonik adalah gelombang

dengan besar frekuensi diatas frekuensi gelombang suara yaitu lebih dari 20 KHz. Seperti
telah disebutkan bahwa sensor ultrasonik terdiri dari rangkaian pemancar ultrasonik yang
disebut transmitter dan rangkaian penerima ultrasonik yang disebut receiver. Sinyal
ultrasonik yang dibangkitkan akan dipancarkan dari transmitter ultrasonik. Ketika sinyal
mengenai benda penghalang, maka sinyal ini dipantulkan, dan diterima oleh receiver
ultrasonik. Sinyal yang diterima oleh rangkaian receiver

dikirimkan

ke rangkaian

mikrokontroler untuk selanjutnya diolah untuk menghitung jarak terhadap benda di


depannya (bidang pantul).

Sensor ultrasonik adalah sensor


yang bekerja berdasarkan prinsip
pantulan gelombang suara dan
digunakan untuk mendeteksi
keberadaan suatu objek tertentu
di depannya, frekuensi kerjanya
pada daerah diatas gelombang
suara dari 40 KHz hingga 400
KHz.

Prinsip kerja Sensor Ultrasonik


Sensor ultrasonik terdiri dari dari dua unit yaitu unit pemancar dan unit penerima.
Struktur unit pemancar dan penerima sangatlah sederhana, sebuah kristal piezoelectric
dihubungkan dengan mekanik jangkar dan hanya dihubungkan dengan diafragma
penggetar. Tegangan bolak-balik yang memiliki frekuensi kerja 40 KHz 400 KHz diberikan
pada plat logam. Struktur atom dari kristal piezoelectric akan berkontraksi (mengikat),
mengembang atau menyusut terhadap polaritas tegangan yang diberikan, dan ini disebut
dengan efek piezoelectric. Kontraksi yang terjadi diteruskan ke diafragma penggetar sehingga
terjadi gelombang ultrasonik yang dipancarkan ke udara (tempat sekitarnya), dan pantulan
gelombang ultrasonik akan terjadi bila ada objek tertentu, dan pantulan gelombang
ultrasonik akan diterima kembali oleh oleh unit sensor penerima. Selanjutnya unit sensor
penerima akan menyebabkan diafragma penggetar akan bergetar dan efek piezoelectric
menghasilkan sebuah tegangan bolak-balik dengan frekuensi yang sama.
Besar amplitudo sinyal elekrik yang dihasilkan unit sensor penerima tergantung dari
jauh dekatnya objek yang dideteksi serta kualitas dari sensor pemancar dan sensor
penerima. Proses sensing yuang dilakukan pada sensor ini menggunakan metode pantulan
untuk menghitung jarak antara sensor dengan obyek sasaran. Jarak antara sensor tersebut

dihitung dengan cara mengalikan setengah waktu yang digunakan oleh sinyal ultrasonik
dalam perjalanannya dari rangkaian Tx sampai diterima oleh rangkaian Rx, dengan
kecepatan rambat dari sinyal ultrasonik tersebut pada media rambat yang digunakannya,
yaitu udara.
Waktu di hitung ketika pemencar aktif dan sampai ada input dari rangkaian penerima
dan bila pada melebihi batas waktu tertentu rangkaian penerima tidak ada sinyal input
maka dianggap tidak ada halangan didepannya.
Prinsip kerja dari sensor ultrasonik dapat ditunjukkan dalam gambar dibawah ini :

Gambar 9.1 Prinsip Kerja Sensor Ultrasonik

Prinsip kerja dari sensor ultrasonik adalah sebagai berikut :


1. Sinyal dipancarkan oleh pemancar ultrasonik. Sinyal tersebut berfrekuensi diatas
20kHz, biasanya yang digunakan untuk mengukur jarak benda adalah 40kHz. Sinyal
tersebut di bangkitkan oleh rangkaian pemancar ultrasonik.
2. Sinyal yang dipancarkan tersebut kemudian akan merambat sebagai sinyal /
gelombang bunyi dengan kecepatan bunyi yang berkisar 340 m/s. Sinyal tersebut
kemudian akan dipantulkan dan akan diterima kembali oleh bagian penerima
Ultrasonik.
3. Setelah sinyal tersebut sampai di penerima ultrasonik, kemudian sinyal tersebut akan
diproses untuk menghitung jaraknya. Jarak dihitung berdasarkan rumus :
S = 340.t/2
Dimana S adalah jarak antara sensor ultrasonik dengan bidang pantul, dan t adalah
selisih waktu antara pemancaran gelombang ultrasonik sampai diterima kembali oleh bagian
penerima ultrasonik.

Pemancar Ultrasonik (Transmitter)


Pemancar Ultrasonik ini berupa rangkaian yang memancarkan sinyal sinusoidal
berfrekuensi di atas 20 KHz menggunakan sebuah transducer transmitter ultrasonic

Gambar 9.2. Rangkaian Pemancar Gelombang Ultrasonik

Prinsip kerja dari rangkaian pemancar gelombang ultrasonik tersebut adlah sebagai berikut :
a) Sinyal 40 kHz dibangkitkan melalui mikrokontroler.
b) Sinyal tersebut dilewatkan pada sebuah resistor sebesar 3kOhm untuk pengaman
ketika sinyal tersebut membias maju rangkaian dioda dan transistor.
c) Kemudian sinyal tersebut dimasukkan ke rangkaian penguat arus yang merupakan
kombinasi dari 2 buah dioda dan 2 buah transistor.
d) Ketika sinyal dari masukan berlogika tinggi (+5V) maka arus akan melewati dioda D1
(D1 on), kemudian arus tersebut akan membias transistor T1, sehingga arus yang
akan mengalir pada kolektotr T1 akan besar sesuai dari penguatan dari transistor.
e) Ketika sinyal dari masukan berlogika tinggi (0V) maka arus akan melewati dioda D2
(D2 on), kemudian arus tersebut akan membias transistor T2, sehingga arus yang
akan mengalir pada kolektotr T2 akan besar sesuai dari penguatan dari transistor.
f) Resistor R4 dan R6 berfungsi untuk membagi tengangan menjadi 2,5 V. Sehingga
pemancar ultrasonik akan menerima tegangan bolak balik dengan Vpeak-peak
adalah 5V (+2,5 V s.d -2,5 V).

Penerima Ultrasonik (Receiver)


Penerima Ultrasonik ini akan menerima sinyal ultrasonik yang dipancarkan oleh
pemancar ultrasonik dengan karakteristik frekuensi yang sesuai. Sinyal yang diterima
tersebut akan melalui proses filterisasi frekuensi dengan menggunakan rangkaian band pass
filter (penyaring pelewat pita), dengan nilai frekuensi yang dilewatkan telah ditentukan.
Kemudian sinyal keluarannya akan dikuatkan dan dilewatkan ke rangkaian komparator
(pembanding) dengan tegangan referensi ditentukan berdasarkan

tegangan keluaran

penguat pada saat jarak antara sensor kendaraan mini dengan sekat/dinding pembatas
mencapai jarak minimum untuk berbelok arah. Dapat dianggap keluaran komparator pada
kondisi ini adalah high (logika 1) sedangkan jarak yang lebih jauh adalah low (logika0).
Logika-logika biner ini kemudian diteruskan ke rangkaian pengendali (mikrokontroler).

Gambar 9.3 Rangkaian Penerima Gelombang Ultrasonik.

Prinsip kerja dari rangkaian pemancar gelombang ultrasonik tersebut adalah

sebagai

berikut :
1. Pertama tama sinyal yang diterima akan dikuatkan terlebih dahulu oleh rangkaian
transistor penguat Q2.
2. Kemudian sinyal tersebut akan di filter menggunakan High pass filter pada frekuensi >
40kHz oleh rangkaian transistor Q1.
3. Setelah sinyal tersebut dikuatkan dan di filter, kemudian sinyal tersebut akan
disearahkan oleh rangkaian dioda D1 dan D2.
4. Kemudian sinyal tersebut melalui rangkaian filter low pass filter pada frekuensi <
40kHz melalui rangkaian filter C4 dan R4.
5. Setelah itu sinyal akan melalui komparator Op-Amp pada U3.
6. Jadi ketika ada sinyal ultrasonik yang masuk ke rangkaian, maka pada komparator
akan mengeluarkan logika rendah (0V) yang kemudian akan diproses oleh
mikrokontroler untuk menghitung jaraknya.

Rangkaian Dasar Sensor Ultrasonik

Aplikasi Pengukur Jarak


#include
#include
#include
#include

<mega32.h>
<delay.h>
<stdlib.h>
<lcd.h>

#asm
.equ __lcd_port=0x15
#endasm

//port c

unsigned char data, str_data[4];


// External Interrupt 2 service routine
interrupt [EXT_INT2] void ext_int2_isr(void)
{
data=TCNT0;
delay_ms(500);
itoa(data, str_data);
lcd_clear();
lcd_gotoxy(0, 0);
lcd_puts(str_data);
}

void main(void)
{
DDRB.0=1;
DDRB.1=0;

//PORTB.0 pin TRIGER; PORTB.2 PIN ECHO INT2;

PORTB=0x00;
// Timer/Counter 0 initialization
TCCR0=0x05;
TCNT0=0x00;
OCR0=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: On
// INT2 Mode: Falling Edge
GICR|=0x20;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x20;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
lcd_init(16);
lcd_clear();
lcd_gotoxy(0, 0);

// clear the LCD


lcd_putchar(200);

// Global enable interrupts


#asm("sei")
while(1)
{
PORTB.0=1; delay_us(10);
PORTB.0=0;
TCNT0=0x00;
delay_ms(36);
}
}

Remote control adalah sebuah alat elektronik yang digunakan untuk


mengoperasikan sebuah mesin dari jarak jauh. Pada umumnya, pengendali
jarak jauh digunakan untuk memberikan perintah dari kejauhan kepada
televisi atau barang-barang elektronik lainnya seperti sistem stereo dan
pemutar DVD. Remote control untuk perangkat-perangkat ini biasanya
berupa benda kecil nirkabel yang dipegang dalam tangan dengan sederetan
tombol untuk menyesuaikan berbagai setting, seperti misalnya saluran
televisi, nomor trek, dan volume suara. Malah, pada kebanyakan peranti
modern dengan kontrol seperti ini, remote controlnya memiliki segala kontrol
fungsi sementara perangkat yang dikendalikan itu sendiri hanya mempunyai
sedikit kontrol utama yang mendasar. Kebanyakan remote berkomunikasi
dengan perangkatnya masing-masing melalui sinyal-sinyal infra merah dan
beberapa saja melalui sinyal radio. Remote control biasanya menggunakan
baterai AAA yang kecil atau AA sebagai catu dayanya.

Remote Transmitter adalah merupakan pemancar jarak jauh. Yang mana


semua remote kontrol menggunakan transmisi sinyal infra merah yang
dimodulasi dengan sinyal carrier dengan frekuensi tertentu yaitu pada frekuensi
30KHz sampai 40KHz. Sinyal yang dipancarkan oleh pengirim diterima oleh
penerima infra merah dan kemudian didecodekan sebagai sebuah paket data
biner. Pada transmisi infra merah terdapat dua terminologi yang sangat penting
yaitu : space yang menyatakan tidak ada sinyal carrier dan pulse yang
menyatakan ada sinyal carrier.

Remote Receiver adalah merupakan penerima jarak jauh. Dalam hal ini
sinar infra merah yang dipancarkan oleh pemancar infra merah tentunya
mempunyai aturan tertentu agar data yang dipancarkan dapat diterima dengan
baik di penerima. Oleh karena itu baik di pengirim infra merah maupun penerima
infra merah harus mempunyai aturan yang sama dalam mentransmisikan (bagian
pengirim) dan menerima sinyal tersebut kemudian mendekodekannya kembali
menjadi data biner (bagian penerima). Komponen yang dapat menerima infra
merah ini merupakan komponen yang peka cahaya yang dapat berupa dioda
(photodioda) atau transistor (phototransistor). Komponen ini akan merubah energi
cahaya, dalam hal ini energi cahaya infra merah, menjadi pulsa-pulsa sinyal
listrik. Komponen ini harus mampu mengumpulkan sinyal infra merah sebanyak
mungkin sehingga pulsapulsa sinyal listrik yang dihasilkan kualitasnya cukup
baik. Pada perangkat ini detektor cahaya yang digunakan adalah komponen
TSOP4838, dimana pada komponen ini sudah terdapat filter. Jadi detektor ini
akan bekerja dengan baik jika terdapat frekuensi 38KHz.

Berikut contoh rangkaian dasar sensor infra red

Berikut contoh desain PCB nya :

Berikut contoh gambar yang sudah jadi :

Berikut contoh desainnya :

Berikut contoh desain PCB nya :

Berikut contoh yang sudah jadi :

#include <mega32.h>
#include <delay.h>
// Declare your global variables here
unsigned char

value, i, j, tx=0, data=0;

void tx_ir(unsigned char send)


{
if (send==1)
{
for (j=0; j<25; j++)
{
PORTB.0=0;
delay_us(13);
PORTB.0=1;
delay_us(13);

}
}
else
{
for (j=0; j<25; j++)
{
PORTB.0=0;
delay_us(13);
PORTB.0=0;
delay_us(13);
}
}
}

void main(void)
{
PORTB=0x00;
DDRB=0x00;

PORTB.0=0;
DDRB.0=1;

value=170;
while (1)
{
data=value;
tx_ir(1);
for (i=0;i<8;i++)
{
if (data&0x01) tx=1; else tx=0;

//data 8 bit

data>>=1;
tx_ir(tx);
}
tx_ir(0);

PORTB.0=0;
value++;
delay_ms(1000);
}
}

Gelombang radio adalah satu bentuk dari radiasi elektromagnetik, dan terbentuk
ketika objek bermuatan listrik dimodulasi (dinaikkan frekuensinya) pada frekuensi yang
terdapat dalam frekuensi gelombang radio (RF) dalam suatu spektrum elektromagnetik, dan
radiasi

elektromagnetiknya

bergerak

dengan

cara

osilasi

elektrik

maupun

magnetik.Gelombang elektromagnetik lainnya, yang memiliki frekuensi di atas gelombang


radio meliputi sinar gamma, sinar-X, inframerah, ultraviolet, dan cahaya terlihat.
Ketika gelombang radio dipancarkan melalui kabel, osilasi dari medan listrik dan magnetik
tersebut dinyatakan dalam bentuk arus bolak-balik dan voltase di dalam kabel. Hal ini
kemudian dapat diubah menjadi signal audio atau lainnya yang membawa informasi.
Frekuensi adalah ukuran jumlah putaran ulang per peristiwa dalam selang waktu
yang diberikan. Untuk memperhitungkan frekuensi, seseorang menetapkan jarak waktu,
menghitung jumlah kejadian peristiwa, dan membagi hitungan ini dengan panjang jarak
waktu. Hasil perhitungan ini dinyatakan dalam satuan hertz (Hz) yaitu nama pakar fisika
Jerman Heinrich Rudolf Hertz yang menemukan fenomena ini pertama kali. Frekuensi
sebesar 1 Hz menyatakan peristiwa yang terjadi satu kali per detik.

Secara alternatif, seseorang bisa mengukur waktu antara dua buah kejadian/
peristiwa (dan menyebutnya sebagai periode), lalu memperhitungkan frekuensi (f ) sebagai
hasil kebalikan dari periode (T ), seperti nampak dari rumus di bawah ini :

RFM12B

Berikut adalah sedikit penjelasan mengenai konfigurasi port nya :

Berikut contoh gambar desain PCBnya:

Berikut contoh gambar yang sudah jadi :

Berikut contoh kode program komunikasi RF menggunakan modul RFM12B


Program pengirim data
Terlebih dahulu buat source baru, save dengan nama Rx.c
/**********************************************************************************
/* RFM12B INTERFACE */
#define SCK
3
// SPI clock
#define SDO
1
// SPI Data output (RFM12B side)
#define SDI
2
// SPI Data input (RFM12B side)
#define CS
4
// SPI SS (chip select)
#define NIRQ
2
// (PORTD)
/* IO CONTROL */
#define HI(x) PORTB |= (1<<(x))
#define LO(x) PORTB &= ~(1<<(x))
#define WAIT_NIRQ_LOW() while(PIND&(1<<NIRQ))
/**********************************************************************************
void portInit()
{
HI(CS);
HI(SDI);
LO(SCK);
DDRB = (1<<CS) | (1<<SDI) | (1<<SCK);
}
/**********************************************************************************

unsigned int writeCmd(unsigned int cmd)


{
unsigned char i;
unsigned int recv;
recv = 0;
LO(SCK);
LO(CS);
for(i=0; i<16; i++)
{
if(cmd&0x8000)
HI(SDI);
else
LO(SDI);
HI(SCK);
recv<<=1;
if( PINB&(1<<SDO) )
{
recv|=0x0001;
}
LO(SCK);
cmd<<=1;
}
HI(CS);
return recv;
}

/**********************************************************************************
void rfInit()
{
writeCmd(0x80E7);
// EL,EF,868band,12.0pF
writeCmd(0x8299);
// er,!ebb,ET,ES,EX,!eb,!ew,DC (bug was
here)
writeCmd(0xA640);
// freq select
writeCmd(0xC647);
// 4.8kbps
writeCmd(0x94A0);
// VDI,FAST,134kHz,0dBm,-103dBm
writeCmd(0xC2AC);
// AL,!ml,DIG,DQD4
writeCmd(0xCA81);
// FIFO8,SYNC,!ff,DR (FIFO level = 8)
writeCmd(0xCED4);
// SYNC=2DD4;
writeCmd(0xC483);
// @PWR,NO RSTRIC,!st,!fi,OE,EN
writeCmd(0x9850);
// !mp,90kHz,MAX OUT
writeCmd(0xCC17);
// !OB1,!OB0, LPX,!ddy,DDIT,BW0
writeCmd(0xE000);
// NOT USED
writeCmd(0xC800);
// NOT USED
writeCmd(0xC040);
// 1.66MHz,2.2V
}
/**********************************************************************************

unsigned char rfRecv()


{
unsigned int data;
while(1)
{
data = writeCmd(0x0000);
if ( (data&0x8000) )
{
data = writeCmd(0xB000);
return (data&0x00FF);
}
}
}

/**********************************************************************************
void FIFOReset()
{
writeCmd(0xCA81);
writeCmd(0xCA83);
}

Program utama main.c


#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <RX.c>
unsigned char dataRF[25];
void main(void)
{
unsigned char i;
// USART Baud Rate: 115200
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x03;

delay_ms(2000);
putchar(200);
portInit();
rfInit();
FIFOReset();
putchar(255);

while(1)
{
for (i=0; i<5; i++)
{
dataRF[i] = rfRecv();

// Saving to Array

}
FIFOReset();

for (i=0; i<5; i++)


{
putchar(dataRF[i]);
}
printf("\r\n");

}
}

// Send to UART

Contoh kode program pengirim atau transmitter.


Buat source baru dan simpan dengan nama Tx.c
/*********************************************************************************/
#define SCK

// SPI clock

#define SDO

// SPI Data output (RFM12B side)

#define SDI

// SPI Data input (RFM12B side)

#define CS

// SPI SS (chip select)

#define NIRQ

// (PORTD)

/* IO CONTROL */
#define HI(x) PORTB |=

(1<<(x))

#define LO(x) PORTB &= ~(1<<(x))


#define WAIT_NIRQ_LOW() while(PIND&(1<<NIRQ))
/*********************************************************************************/

void portInit()
{
HI(CS);
HI(SDI);
LO(SCK);
DDRB = (1<<CS) | (1<<SDI) | (1<<SCK);
DDRD.2=0;
PORTD.2=1;
}
/*********************************************************************************/
unsigned int writeCmd(unsigned int cmd)
{
unsigned char i;
unsigned int recv;

recv = 0;

LO(SCK);
LO(CS);
for(i=0; i<16; i++)
{
if(cmd&0x8000)
HI(SDI);
else
LO(SDI);

HI(SCK);
recv<<=1;
if( PINB&(1<<SDO) )
{
recv|=0x0001;
}
LO(SCK);

cmd<<=1;
}
HI(CS);
return recv;
}
/*********************************************************************************/
void rfInit()
{
writeCmd(0x80E7);

// EL,EF,868band,12.0pF

writeCmd(0x8239);

// !er,!ebb,ET,ES,EX,!eb,!ew,DC

writeCmd(0xA640);

// frequency select

writeCmd(0xC647);

// 4.8kbps

writeCmd(0x94A0);

// VDI,FAST,134kHz,0dBm,-103dBm

writeCmd(0xC2AC);

// AL,!ml,DIG,DQD4

writeCmd(0xCA81);

// FIFO8,SYNC,!ff,DR

writeCmd(0xCED4);

// SYNC=2DD4

writeCmd(0xC483);

// @PWR,NO RSTRIC,!st,!fi,OE,EN

writeCmd(0x9850);

// !mp,90kHz,MAX OUT

writeCmd(0xCC17);

// OB1, COB0, LPX, Iddy, CDDIT CBW0

writeCmd(0xE000);

// NOT USED

writeCmd(0xC800);

// NOT USED

writeCmd(0xC040);

// 1.66MHz,2.2V

void rfSend(unsigned char data)


{
WAIT_NIRQ_LOW();
writeCmd(0xB800 + data);
}

Contoh kode program pada main.c


#include <mega32.h>
#include <delay.h>
#include <TX.c>
void main()
{
volatile unsigned int i;
//

asm("cli");
delay_ms(2000);

portInit();
rfInit();

while(1)
{
writeCmd(0x0000);

rfSend(0xAA);

// PREAMBLE

rfSend(0xAA);
rfSend(0xAA);
rfSend(0x2D);

// SYNC

0x2DD4

rfSend(0xD4);
for(i=0; i<5; i++)

//send data 5 byte

{
rfSend(0x41+i);
}
rfSend(0xAA);
rfSend(0xAA);
rfSend(0xAA);

// DUMMY BYTES

delay_ms(200);
}
}

RTC (real time clock) merupakan IC yang dapat menyimpan setting waktu. sebagai
contoh saat sebuah komputer di matikan selama 3 hari misalnya. maka saat kita ON kan
lagi waktu dalam komputer masih menunjukkan waktu saat itu, waktu tidak mengalami
kelambatan walaupun selama 3 hari tanpa sumber tegangan.
RTC merupakan IC yang dapat mempertahan setting waktu. Ada 2 macam tipe IC RTC
yaitu serial dan pararel. Untu schema di atas merupakan serial RTC. Agar waktunya sesuai
standar maka diperlukan xtal eksternal 32.768 kHz. Saat supply utama OFF IC akan dapat
suplly dari Baterai sehingga setting waktu tetap jalan. IC ini haruslah terkoneksi ke sebuah
mokrokontroler.
Real Time Clock berhubungan dengan waktu mulai dari detik, menit, jam, hari, tanggal,
bulan dan tahun. Tetapi IC RTC ini juga bisa dipakai untuk menyimpan data di dalam
internal RAM RTC ini, di mana data tersebut tidak bisa hilang meskipun supply diputus, hal
ini karena di dalam IC RTC tersebut ada battery-nya yang selalu hidup untuk menjalankan
clock-nya jadi waktu (clock) tetap berjalan meskipun supply dimatikan. IC RTC ini masih
mempunyai kelebihan bisa dipakai sebagai timer atau alarm. Untuk hitungan detik, menit,

jam, hari, tanggal, bulan dan tahun dengan tahun kabisat yang valid sampai 2100 karena
compensation valid up to 2100. Mode yang dipilih juga bisa 12 or 24 hour clock with AM dan
PM in 12 hour mode.
RTC 1307 menggunakan teknik I2C yaitu memakai 2 jalur untuk keperluan transfer
data secara seri, sedangkan SPI dan MicroWire memakai 3 jalur. Semua teknik mempunyai 1
jalur untuk Clock, I2C hanya punya satu jalur data 2 arah, sedangkan SPI dan MicroWire
mempunyai 2 jalur data satu arah, masing-masing untuk jalur data masuk dan jalur data
keluar.

KONFIGURASI PIN
Untuk lebih jelas mengenai fungsi dan kegunaan dari IC ini terlebih dahulu akan dijelaskan
fungsi dari tiap-tiap pin pada IC keluarga DS1307, di mana diketahui bahwa IC DS1307
memiliki 8 pin atau kaki, seperti pada Gambar 12.1.

Gambar 12.1 Pin-pin IC DS1307

Fungsi dari tiap pin RTC DS1307 antara lain :


1. X1, X2 Terhubung dengan kaki kristal 32768kHz
2. Vbat Terhubung dengan battery 3,3 volt
3. GND, Vcc Input tegangan Vcc adalah +5V.
4. SQW (Square Wave Output)Pin SQW dapat mengeluarkan sinyal salah satu dari 13
taps yang disediakan oleh 15 tingkat pembagi internal dari RTC.
5. SCL Pin SCL mengeluarkan sinyal clock. Pin ini harus diberi resistor Pull Up.
6. SDA Pin SCL mengeluarkan sinyal data

Pembuatan rankaian sederhana RTC DS1307

Alat dan bahan :


1. RTC DS1307 1 buah.

6. Soket IDC 10 buah.

2. Resistor 3 buah.

7. Black housing 10 buah.

3. Kapasitor 1 buah.

8. Kabel IDC.

4. Batteray.

9. PCB 5x4 cm.

5. Konektor IDC single 5 pin.

10. Solder.

11. Tenol.

Rangkaian dasar RTC

Contoh rangkaian yang sudah jadi

Berikut adalah contoh kode program baca tulis data RTC


#asm
.equ
.equ
.equ
.equ
#endasm

__lcd_port=0x15
__i2c_port=0x1b
__scl_bit=1
__sda_bit=0

#include
#include
#include
#include
#include
#include

<mega32.h>
<delay.h>
<stdlib.h>
<lcd.h>
<ds1307.h>
<i2c.h>

// PortC
// PortA

unsigned char detik, menit, jam, str_detik[4], str_menit[4], str_jam[4];


unsigned char tanggal, bulan, tahun, str_tanggal[4], str_bulan[4], str_tahun[5];

void main(void)
{
lcd_init(16);
lcd_gotoxy(0, 0);
lcd_putsf("Latihan RTC");
i2c_init();

rtc_init(0,0,0);
rtc_set_time(0,0,0);
rtc_set_date(11,12,2011);
delay_ms(1000);
while (1)
{
rtc_get_time(&jam,&menit,&detik);
if(detik==0)
{
lcd_clear();
lcd_gotoxy(0, 0);
lcd_putsf("Latihan RTC");
}
str_jam[0]=(jam/10)+48;
str_jam[1]=jam%10+48;
lcd_gotoxy(0, 1);
lcd_puts(str_jam);
lcd_gotoxy(2,1);
lcd_puts(":");
str_menit[0]=(menit/10)+48;
str_menit[1]=menit%10+48;
lcd_gotoxy(3, 1);
lcd_puts(str_menit);
lcd_gotoxy(5,1);
lcd_puts(":");

// SET JAM
// SET TANGGAL

// Read Time

str_detik[0]=(detik/10)+48;
str_detik[1]=detik%10+48;
lcd_gotoxy(6, 1);
lcd_puts(str_detik);
delay_ms(1000);
}
}

EPROM (Electrically Erasable Programmable Read-Only Memory, ditulis pula


dengan E2PROM) adalah sejenis chip memori tidak terhapus yang digunakan

dalam komputer dan peralatan elektronik lain untuk menyimpan sejumlah konfigurasi data
pada alat elektronik tersebut yang tetap harus terjaga meskipun sumber daya diputuskan,
seperti tabel kalibrasi atau kofigurasi perangkat.
Kelebihan utama dari EEPROM dibandingkan EPROM adalah ia dapat dihapus secara
elektris tanpa menggunakan cahaya ultraviolet sehingga prosesnya lebih cepat. Jika RAM
tidak memiliki batasan dalam hal read-write memori, maka EEPROM sebaliknya. Beberapa
jenis EEPROM keluaran pertama hanya dapat dihapus dan ditulis ulang (erase-rewrite)
sebanyak 100 kali sedangkan model terbaru bisa sampai 100.000 kali.

AT24C32
Serial EEPROM tipe 24xx adalah merupakan memori serial yang menggunakan
teknologi I2C di mana dengan adanya penggunaan teknologi tersebut, hanya membutuhkan
jumlah I/O yang digunakan untuk meng-akses memori tersebut semakin sedikit. Hal ini
tentunya sangat bermanfaat bagi sebuah sistem yang memerlukan banyak I/O. Penggunaan
I/O yang semakin sedikit untuk mengakses memori, akan menyediakan lebih banyak I/O
yang dapat digunakan untuk keperluan lain. I2C adalah teknologi komunikasi serial yang
ditemukan oleh Philips pada tahun 1992 dan direvisi hingga versi 2.1 yang terbaru pada
tahun 2000. Teknologi ini hanya menggunakan 2 buah jalur I/O yaitu SDA dan SCL SDA
merupakan jalur data pada komunikasi I2C

SCL merupakan jalur clock di mana sinyal clock akan selalu muncul untuk setiap bit
dari pengiriman data. Komunikasi I2C diciptakan oleh Philips bukan hanya untuk Serial
EEPROM melainkan juga diperuntukkan bagi komponen-komponen lain yang mempunyai
kemampuan untuk diakses secara I2C. Oleh karena itu, untuk membedakan antara Serial
EEPROM

dengan

komponen-komponen

yang

lain

digunakan

Slave

Address

yang

menunjukkan identitas dari komponen tersebut. Dalam hal ini Serial EEPROM mempunyai
kode 1010.

Berikut table kapasitas EEPROM seri 24C32

Type
AT24C01
AT24C02
AT24C04
AT24C08
AT24C16
AT24C32
AT24C64
AT24C128
AT24C256
AT24C512

Kapasitas
128 byte
256 byte
512 byte
1 Kbyte
2 Kbyte
4 Kbyte
8 Kbyte
16 Kbyte
32 Kbyte
64 Kbyte

Rangkaian dasar EEPROM menggunakan AT24C32

Alat dan bahan :


1. IC AT24C32 I buah.
2. Resistor 10K ohm 2 buah.
3. Konektor IDC single 4 pin.
4. Soket IDC 8 buah.
5. Black housing 8 buah.
6. Kabel IDC.
7. PCB 5x4 cm.
8. Solder.
9. Tenol.

Berikut adalah gambar designnya :

Berikut contoh gambar desain PCB nya :

Berikut contoh rangkaian yang sudah jadi

Terlebih dahulu buat source baru dan simpan dengan nama I2Croutin.c, berikut adalah
kode programnya :
/*

*******************************************************************************
write a byte to the EEPROM
************************************************************************* */
void eeprom_write(unsigned int address, unsigned char data)
{
unsigned char addrH=address/256;
unsigned char addrL=address%256;
i2c_start();
i2c_write(AT24C32_Bus_Addr);
i2c_write(addrH);
i2c_write(addrL);
i2c_write(data);
i2c_stop();
delay_ms(10);
}

/*

**************************************************************************
read a byte from the EEPROM
******************************************************************/
unsigned char eeprom_read(unsigned int address)
{
unsigned char addrH=address/256;
unsigned char addrL=address%256;
unsigned char data;
i2c_start();
i2c_write(AT24C32_Bus_Addr);
i2c_write(addrH);
i2c_write(addrL);
i2c_start();
i2c_write(AT24C32_Bus_Addr | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

Berikut contoh kode program pana main.c


/*****************************************************
Project

: Test Memory AT24C32

Version

: 1.0.0

Date

: 09 mei 2010

Author

: Uwiex

Company

: Multi-Tech Aji Perkasa

Comments

: Book Section

Chip type

: ATmega32

Program type

: Application

Clock frequency

: 12.00000000 MHz

Memory model

: Small

External RAM size

: 0

Data Stack size

: 512

*****************************************************/

#define AT24C32_Bus_Addr 0xA0

flash unsigned char NoID[]="MGL 789012678ABCDQWERTYASDFGH";


// Max 16 Char
unsigned int DataAddr, Counter;

#asm
.equ __i2c_port=0x1B

// Port A

.equ __sda_bit=0
.equ __scl_bit=1

//

.equ __lcd_port=0x18
.equ __lcd_port=0x15

#endasm

// PORTB
// PORTC

#include <mega32.h>
#include <stdio.h>
#include <Delay.h>
#include <string.h>
#include <lcd.h>
#include <i2c.h>
#include <I2C Routine.c>
void main(void)
{
delay_ms(500);

lcd_init(16);
lcd_clear();
lcd_gotoxy( 0,0); lcd_putsf("Mulai....");
0 Baris 0
/*
eeprom_write(512,'A');

// Inisialisasi LCD
// Menulis di Kolom

eeprom_write(513,'B');
eeprom_write(514,'C');
eeprom_write(515,'D');
*/

//

DataAddr=0;

//

for (Counter=0; Counter<strlenf(NoID); Counter++)

//

eeprom_write(DataAddr+Counter,NoID[Counter]);

lcd_gotoxy( 0,1); lcd_putchar(eeprom_read(15));

while (1)
{
}

Dalam ilmu komputer dan ilmu telekomunikasi, komunikasi serial adalah proses dari
pengiriman data satu bit dalam satu waktu secara sekuensial melalui kanal komunikasi atau
bus pada komputer. Hal ini tentunya sangat kontras dengan komunikasi paralel, dimana
beberapa bit dikirimkan secara bersamaan pada sebuah jalur yang terdiri dari beberapa
kanal berkabel yang tersusun paralel. Komunikasi serial digunakan untuk semua
komunikasi long-haul dan kebanyakan jaringan komputer dimana biaya untuk kabel dan
kesulitan sinkronisasi membuat komunikasi paralel tidak praktis. Pada jarak yang lebih
dekat, bus serial pada komputer menjadi lebih umum digunakan karena kekurangan dari
bus paralel, misalnya ketidakcocokan clock dan densitas interkoneksi, mengalahkan
kelebihannya, yaitu tidak perlu ada proses serialisasi dan deserialisasi (serializer and
deserializer/SERDES). Teknologi yang berkembang untuk memastikan integritas sinyal dan
untuk mengirim dan menerima pada kecepatan per jalur yang cukup tinggi telah membuat
jalur-jalur serial menjadi kompetitif.

FTDI

chip

sendiri

adalah

sirkuit

terpadu

yang

merupakan komponen umum pada perangkat elektronik


menggunakan mikrokontroler. FTDI adalah spesialis dalam
mengkonversi peripheral warisan untuk Universal Serial
Bus (USB), menawarkan rute termudah ke USB migrasi
dengan menggabungkan USB-Serial (USB-RS232) dan USBFIFO silikon solusi dengan royalti siap-pergi mereka bebas USB driver. Populer FTDI USB
solusi konversi menawarkan mengurangi biaya pengembangan dan debug dan waktu yang
cepat ke pasar. Para FT232R dan FT245R adalah tambahan terbaru untuk jangkauan
tumbuh USB toUART dan USB untuk solusi FIFO konversi.

Rangkaian dasar FTDI FT232

Alat dan bahan :


1. Con USB 1 Pcs.
2. Kapasitor 1 Pcs.
3. FTDI FT232 1 Pcs.
4. Konektor IDC single 4 pin.
5. Pcb 5x3cm.
6. Solder.
7. Tenol.

Contoh gambar desain PCB nya :

Contoh rangkaian FTDI yang sudah jadi

Terlebih dahulu buat source baru, simpan dengan nama app USART.c
/*
===================================================================================
Inisialisasi USART Interrupt

Register UCSRA (USART Control and Status Register A):


Bit

Description

RXC

- USART Receive Complete

TXC

- USART Transmit Complete

UDRE

- USART Data Register Empty

FE

- Frame Error

DOR

- Data OverRun

PE

- Parity Error

U2X

- Double the USART Transmission Speed

MPCM

- Multi-Processor Communication Mode

Register UCSRB (USART Control and Status Register B):

Bit

Description

RXCIE

- RX Complete Interrupt Enable

TXCIE

- TX Complete Interrupt Enable

UDREIE

- USART Data Register Empty Interrupt Enable

RXEN

- Receiver Enable

TXEN

- Transmitter Enable

UCSZ2

- Character Size

RXB8

- Receive Data 8 bit

TXB8

- Transmit Data 8 bit

Register UCSRC (USART Control and Status Register C):


Bit

Description

URSEL

- Register Select

UMSEL

- USART Mode Select

USSEL
0

Description
-

Asyncronous Operation

5-4

UPM1:0

- Parity Mode

UPM1

UPM0

Disable / No Parity

Reserved

Enable, Even Parity

Enable, Odd Parity

USBS

Description

- Stop bit Select

USBS

2-1

Syncronous Operation

Description

1-bit

2-bit

UCSZ1:0 - Character Size


UCSZ2

UCSZ2

UCSZ2

Description

5-bit

6-bit

7-bit

8-bit

Reserved

Reserved

Reserved

9-bit

UCPOL

- Clock Polarity

UCPOL

Description

Rising XCK Edge

Falling XCK Edge

=================================================================================*/

void InitUSART(unsigned char X)


{
#define XTAL

12000000

#define BaudRate

9600

UBRRH=(XTAL/16/BaudRate-1) >> 8;
UBRRL=(XTAL/16/BaudRate-1) & 0xFF;

if (X==0)
{
UCSRA=0x00;
UCSRB=0b00011000;
Without Interrupt

// 0x18

UCSRC=0b10000110;

// 0x86

}
else
{
UCSRA=0x00;

UCSRB=0b10011000;
Interrupt

// 0x98

UCSRC=0b10000110;

// 0x86

}
}

With

Berikut contoh kode program pada main.c


unsigned char k;
#asm
.equ __lcd_port=0x15
#endasm

#include <mega32.h>
#include <stdio.h>
#include <delay.h>
#include <lcd.h>

#include <app USART.c>

// PortC

void main(void)
{
InitUSART(0);
lcd_init(16);

lcd_gotoxy(0, 0);
lcd_putsf("USB to Serial");

while (1)
{
//

putchar('A');

// Send 'A' to USART

puts("Selamat Mencoba");

// Send 'A' to USART

delay_ms(1000);

k=getchar();

// Waiting data

lcd_gotoxy(0, 1);
lcd_putchar(k);
}

You might also like