Upload
devinurisyani
View
147
Download
3
Embed Size (px)
DESCRIPTION
microcontroller avr guideline
Citation preview
GUIDLINE PROJECT AVR with CodevisionAVR
- Microcontroller AVR ATMega8535 - CodeVision AVR - Interface (Parallel, Serial, USB) - Example : ADC measurement - Example : LCD - Example : Timer and Servo (PWM) - Delphi 7
“Niscaya Allah akan meninggikan derajat orang-orang yg beriman di antara kamu
dan orang-orang yg diberi ilmu pengetahuan beberapa derajat. Dan Allah Maha
Mengetahui apa yg kamu kerjakan.” QS Al-Mujaadalah ayat 11
http://devinurtsyani.wordpress.com
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
2
Pengantar
Saya bukanlah orang yang sangat ahli dalam bidang mikokontroller, saya hanyalah orang
yang mengerti dan kebetulan bisa menyisihkan waktu saya untuk menyusun buku ini.
Harapan saya adalah agar setiap orang di negara ini bisa mendapatkan ilmu teknologi
secara gratis dan mudah, sehingga kita bisa mengejar ketertinggalan kita dengan bangsa
lain, dan yang terpenting dengan teknologi tersebut kita bisa lebih mensejahterakan
bangsa ini.
Buku ini merupakan konsep dasar dan juga buku pegangan awal untuk memahami
mikrokontroller. Setelah Anda dapat memahami konsepnya diharapkan Anda dapat
membuat berbagai macam implementasi teknologi yang juga dapat bermanfaat bagi
lingkungan di sekitar Anda.
“Sebaik – baiknya manusia adalah yang selalu memberi manfaat kepada manusia lain”.
( HR. Muttafagun Alaih )
Mari kita perhatikan sekeliling kita, amati masalahnya lalu bertindak. Bangsa ini sangat
besar, butuh banyak orang untuk memajukannya, dan itu dimulai dari diri kita sendiri.
Mulailah saat ini juga.
Selamat Belajar.
Penulis
Bandung, 27 April 2010
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
3
DAFTAR ISI (biar dibaca dan dibuka, silahkan cari halamannya sendiri)
Pengenalan Hal
BAB 1 PROGRAMMER AVR …………………………………………………….. 5
Skematik STK200 …………………………………………………….. 6
STK500 …………………………………………………….. 8
BAB 2 MIKROKONTROLLER AVR …………………………………………………….. 12
Deskripsi pin …………………………………………………….. 13
Binary …………………………………………………….. 14
Register …………………………………………………….. 15
BAB 3 CODEVISION AVR …………………………………………………….. 17
CodeWizard …………………………………………………….. 18
Pengenalan bahasa C …………………………………………………….. 23
BAB 4 LATIHAN PROGRAM …………………………………………………….. 39
Program 1 : output …………………………………………………….. 40
Setting chip programmer …………………………………………………….. 44
Cara compile program …………………………………………………….. 44
Program 4: In-Out Dipswitch …………………………………………………….. 48
Program 5: ADC …………………………………………………….. 49
Program 6: ADC to LCD …………………………………………………….. 52
Program 7: PWM …………………………………………………….. 55
BAB 5 ANTARMUKA PC …………………………………………………….. 57
Paralel …………………………………………………….. 58
Serial RS232 …………………………………………………….. 59
RS232 Data Transmission …………………………………………………….. 61
BAB 6 DELPHI …………………………………………………….. 63
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
4
PENGENALAN Apa aja yang akan dibahas dalam buku ini…..
Buku ini disusun sebagai panduan praktis dalam mengerjakan proyek instrumentasi
(seperti Tugas Akhir atau proyek lainnya). Karena itu akan banyak sekali contoh program
dan minim pembahasan. Tapi, di setiap bab disertakan referensi lain untuk digunakan
sebagai belajar tambahan ataupun sebagai pematangan konsep. Supaya lebih mudah
dicerna maka bahasa penulisannya pun non-formal.
Pada bab awal ini akan dijelaskan secara singkat isi dari buku keseluruhan.
MIKROKONROLLER
Pertanyaan yang sering muncul begitu mendengar kata mikrokontroller ialah,
Apa bedanya dengan microprocessor ?
Jawaban simplenya, mikrokontroller lebih lengkap. Karena memiliki fitur tambahan
terutama input-output, tapi kapasitas memori yang terbatas 8K atau 16K. Sedangkan
microprocessor memorinya besar tapi tidak memiliki fitur input output, jadi kalau mau
dipake harus menambah banyak ic. Oleh karena itu mikrokontroller lebih sering
digunakan untuk proyek system embedded dan microprocessor digunakan pada PC
computer, karena harus mengolah banyak data.
Kapan harus pakai mikrokontroller ?
Ketika semua rangkaian analog dan IC (Integrated Circuit) tak mampu lagi menangani
tujuan circuit yang kita mau. Atau rangkaian analog terlalu rumit, jadi jauh lebih mudah
menggunakan mikrokontroller.
Ada banyak jenis mikrokontroller. Tiap jenis namanya beda bergantung dari pabriknya,
system pengoperasiannya pun beda, fiturnya juga beda-beda. Cara terbaik untuk
mengenal mikrokontroller yang digunakan ialah dengan membaca datasheet. Walaupun
tiap mikrokontroller berbeda tapi ada satu kunci untuk mengetahui semuanya. Di modul
ini akan diberikan konsep itu.
ANTARMUKA
Atau disebut juga Interface merupakan bagian penting yang harus dipelajari. Ini seperti
-Hubungan Luar Negri- buat mikrokontroller (atau device lain). Akan ada banyak
protocol, sama seperti kalau mau keluar negri ga bisa langsung terbang naik pesawat, tapi
harus buat passport dulu, ngisi prosedur pembuatan passport dan visa, prosedurnya pun
beda-beda tergantung negara dan juga tujuan kesana. Nah, sama halnya dengan
antarmuka computer, mikrokontroller.
Kalau dari computer ada tipe parallel, serial (RS232), dan USB. Paralel : lebih mudah
prosedurnya hanya saja tidak bisa jarak jauh (panjang kabel terbatas), Serial : bisa lebih
panjang dari parallel hanya saja perlu program tambahan, dan transfer datanya lebih
lambat dari parallel (soalnya ngantri), USB : paling susah secara hardware dan juga
software (atau beli USB to serial). Di modul ini akan dibahas ketiganya, tapi akan lebih
fokus ke serial.
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
5
BAB 1 PROGRAMMER AVR
Pertama kita akan membahas tentang programmer avr atau banyak yang bilang
downloader avr. Gunanya untuk memasukkan program yang kita buat kedalam
mikrokontroller. Bisa melalui jalur parallel atau USB. Bisa beli atau bikin sendiri. Nah,
dalam buku ini saya akan bahas programmer yang bisa kita buat sendiri.
Ada dua jenis programmer yang sering dibuat orang, pertama STK200 dan yang
kedua AVR USB atau STK500. Perbedaannya STK 200 melalui jalur parallel, sedangkan
STK500 lewat jalur USB. Untuk yang menggunakan laptop tentunya cenderung memilih
STK500, tapi sayangnya rangkaian yang dibuat seringnya tidak konsisten dalam
mendownload program (kadang bisa kadang nggak) . Kelebihan STK200 jauh lebih cepat
(proses download program) dan stabil tapi masalahnya jalurnya parallel DB25, jadi hanya
bisa digunakan untuk PC.
STK200
Pertama-tama saya jelaskan tentang cara pembuatan STK200. Skematiknya ada di
http://www.lancos.com/prog.html saya sertakan juga di halaman berikutnya.
Gambar diatas tu rangkaian STK200 hasil bikin sendiri. Saya buat dua tingkat
(bisa pake spacer tuk tiangnya). PCB tingkat satu rangkaian STK200, sedangkan tingkat
dua (yang ada texttool hijau) adalah rangkaian minimum mikrokontroller AVR.
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
6
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
7
VCC 5 volt, ini sama dengan VDD pada rangkaian STK200. XTAL adalah Kristal
yang nilai frekuensinya terserah (tinggal pilih dari 3-16 MHz), kalau saya biasa pake
yang 11.0592 MHz. Semakin tinggi nilai Kristal maka semakin cepat proses eksekusi
programnya, tapi akan ada efeknya seperti noise, tapi sejauh ini saya belum pernah
mengalami masalah jadi amanlah klo pake nilai segitu.
Untuk kapasitor yang di Kristal pakai yang nonpolar, sedangkan tuk di deket
tombol reset pakai yang polar 10 volt atau kalau ga ada yang 16 volt pun taka pa (asal tak
kurang dari 5 volt karena tegangan yang lewat disitu kisaran 5 volt)
Selamat mencoba!!!
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
8
STK500 Nah, programmer berikutnya yang bisa kita buat sendiri adalah ini STK 500. Linknya
http://www.fischl.de/usbasp/
Klo tadi di STK200 kita hanya menambahkan IC buffer 74HC244, klo disini kita
harus menambahkan mikrokontroller ATMEga48 atau ATMega8. Oh iya, ni ada
keterangan dari web nya (baca di readme-diweb-)
=============================================================== This is the README file for USBasp.
USBasp is a USB in-circuit programmer for Atmel AVR controllers. It
simply
consists of an ATMega48 or an ATMega8 and a couple of passive
components.
The programmer uses a firmware-only USB driver, no special USB
controller
is needed.
Features:
- Works under multiple platforms. Linux, Mac OS X and Windows are
tested.
- No special controllers or smd components are needed.
- Programming speed is up to 5kBytes/sec.
- SCK option to support targets with low clock speed (< 1,5MHz).
- Planned: serial interface to target (e.g. for debugging).
LICENSE
USBasp is distributed under the terms and conditions of the GNU GPL
version
2 (see "firmware/usbdrv/License.txt" for details).
USBasp is built with AVR USB driver by OBJECTIVE DEVELOPMENT GmbH. See
"firmware/usbdrv/" for further information.
LIMITATIONS
Hardware:
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
9
This package includes a circuit diagram. This circuit can only be used
for
programming 5V target systems. For other systems a level converter is
needed.
Firmware:
The firmware dosn't support USB Suspend Mode. A bidirectional serial
interface to slave exists in hardware but the firmware doesn't support
it yet.
USE PRECOMPILED VERSION
Firmware:
Flash "bin/firmware/usbasp.atmega48.xxxx-xx-xx.hex" or
"bin/firmware/usbasp.atmega8.xxxx-xx-xx.hex" to the used controller
with a
working programmer (e.g. with avrdude, uisp, ...). Set jumper J2 to
activate
USBasp firmware update function.
You have to change the fuse bits for external crystal (see "make
fuses").
# TARGET=atmega8 HFUSE=0xc9 LFUSE=0xef
# TARGET=atmega48 HFUSE=0xdd LFUSE=0xff
Windows:
Start Windows and connect USBasp to the system. When Windows asks for a
driver, choose "bin/win-driver". On Win2k and WinXP systems, Windows
will
warn that the driver is is not 'digitally signed'. Ignore this message
and
continue with the installation.
Now you can run avrdude. Examples:
1. Enter terminal mode with an AT90S2313 connected to the programmer:
avrdude -c usbasp -p at90s2313 -t
2. Write main.hex to the flash of an ATmega8:
avrdude -c usbasp -p atmega8 -U flash:w:main.hex
Setting jumpers:
J1 Power target
Supply target with 5V (USB voltage). Be careful with this option,
the
circuit isn't protected against short circuit!
J2 Jumper for firmware upgrade (not self-upgradable)
Set this jumper for flashing the ATMega(4)8 of USBasp with another
working
programmer.
J3 SCK option
If the target clock is lower than 1,5 MHz, you have to set this
jumper.
Then SCK is scaled down from 375 kHz to about 8 kHz.
BUILDING AND INSTALLING FROM SOURCE CODE
Firmware:
To compile the firmware
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
10
1. install the GNU toolchain for AVR microcontrollers (avr-gcc, avr-
libc),
2. change directory to firmware/
3. run "make main.hex"
4. flash "main.hex" to the ATMega(4)8. E.g. with uisp or avrdude (check
the Makefile option "make flash"). To flash the firmware you have
to set jumper J2 and connect USBasp to a working programmer.
You have to change the fuse bits for external crystal, (check the
Makefile
option "make fuses").
Software (avrdude):
AVRDUDE supports USBasp since version 5.2.
1. install libusb: http://libusb.sourceforge.net/
2. get latest avrdude release:
http://download.savannah.gnu.org/releases/avrdude/
3. cd avrdude-X.X.X
5. configure to your environment:
./bootstrap (I had to comment out the two if-blocks which verify the
installed versions of autoconf and automake)
./configure
6. compile and install it:
make
make install
Notes on Windows (Cygwin):
Download libusb-win32-device-bin-x.x.x.x.tar.gz from
http://libusb-win32.sourceforge.net/ and unpack it.
-> copy lib/gcc/libusb.a to lib-path
-> copy include/usb.h to include-path
cd avrdude
./configure LDFLAGS="-static" --enable-versioned-doc=no
make
Notes on Darwin/MacOS X:
after "./configure" I had to edit Makefile:
change "avrdude_CPPFLAGS" to "AM_CPPFLAGS"
(why is this needed only on mac? bug in configure.ac?)
FILES IN THE DISTRIBUTION
Readme.txt ...................... The file you are currently reading
firmware ........................ Source code of the controller
firmware
firmware/usbdrv ................. AVR USB driver by Objective
Development
firmware/usbdrv/License.txt ..... Public license for AVR USB driver and
USBasp
circuit ......................... Circuit diagram in PDF and EAGLE
format
bin ............................. Precompiled programs
bin/win-driver .................. Windows driver
bin/firmware .................... Precompiled firmware
MORE INFORMATION
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
11
For more information on USBasp and it's components please visit the
following URLs:
USBasp .......................... http://www.fischl.de/usbasp/
Firmware-only AVR USB driver .... http://www.obdev.at/products/avrusb/
avrdude ......................... http://www.nongnu.org/avrdude/
libusb .......................... http://libusb.sourceforge.net/
libusb-win32 .................... http://libusb-win32.sourceforge.net/
2009-02-28 Thomas Fischl <[email protected]>
http://www.fischl.de
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
12
BAB 2 MIKROKONTROLLER AVR
Kenapa harus AVR?
Karena dulu saya stuck dengan mcs (pas download programnya gagal terus, semaleman-
full- Cuma berusaha untuk masukin program- tapi tetep, kadang berhasil tapi lebih
banyak gagalnya). Padahal sampai kulitnya aja belum udah kena trouble, gimana mau
nambah ilmu kalo kayak gitu.
Yang kedua karena ikutan lomba Galelobot (line follower robot), Nah, saya dapat contoh
programnya (dari internet) kebanyakan pake mikrokontroller AVR, jadi „terpaksa‟ pake
AVR. Tapi emang sekarang-sekarang ini orang lebih banyak menggunakan AVR. Karena
keadaan tersebut mulailah saya belajar otodidak,di lab kita ini susah lho nyari bahan
belajar mikro AVR (dibanding MCS). Makanya ada buku ini.
Dan ternyata setelah saya pelajari AVR tuh menyenangkan (lebih mudah dan powerfull),
fiturnya banyak lagi. Nih kutipan dari datasheet
FITUR ATMega8535
Berikut ini adalah fitur-fitur yang dimiliki oleh ATMega8535:
a. 130 macam instruksi yang hampir semuanya dieksekusi dalam satu siklus clock,
b. 32 x 8-bit register serba guna,
c. Kecepatan mencapai 16 MIPS dengan clock MHz,
d. 8 Kbyte Flash Memory, yang memiliki fasilitas In-System Programming,
e. 512 Byte internal EEPROM,
f. 512 Byte SRAM,
g. Programming Lock, fasilitas untuk mengamankan kode program,
h. 2 buah timer/counter 8-bit dan 1 buah timer/counter 16-bit,
i. 4 channel output PWM,
j. 8 channel ADC10-bit,
k. Serial USART,
l. Master/Slave SPI serial inteface,
m. Serial TWI atau 12C,
n. On chip Analog Comparator.
ORGANISASI MEMORI
Mikrokontroler ATMega8535 memiliki 3 jenis memori, yaitu: memori program, memori
data dan memori EEPROM. Ketiganya memiliki ruang sendiri dan terpisah, mau lebih
jelas lagi silahkan lihat referensi.
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
13
DESKRIPSI PIN
PIN 1-8
Port B, merupakan Port I/O 8-bit dua arah (bi-directional) dgn resistor pull-up internal. Selain sebagai Port I/O 8-bit.
Port B dapat juga difungsikan secara individu. Berikut fungsi dari masing-masing pin pada port B:
PB0 : T0 (Timer/Counter 0 External Counter Input)
XCK (USART External Clock Input/Output)
PB1 : T1 (Timer/Counter 1 External Counter Input)
PB2 : AIN0 (Analog Comparator Positif Input)
INT2 (External Interrupt 2 Input)
PB3 : AIN1 (Analog Comparator Negatif Input)
OC0 (Output CompareTimer/Counter 0)
PB4 : SS (SPI Slave Select Input)
PB5 : MOSI (SPI Bus Master Output/Slave Input)
PB6 : MISO (SPI Bus Master Input/Slave Output)
PB7 : SCK (SPI Bus Serial Clock)
PIN 9 = RESET, merupakan pin reset yang akan bekerja bila diberi pulsa rendah (active low) selama minimal 1,5 µs
PIN 10 = VCC, Catu daya digital.
PIN 11 = GND, Ground untuk catu daya digital.
PIN 12 = XTAL2, merupakan output dari penguat osilator pembalik.
PIN 13 = XTAL1, merupakan input ke penguat osilator pembalik dan input ke internal clock.
PIN 14-21
Port D, merupakan Port I/O 8-bit dua arah (bi-directional) dengan resistor pull-up internal.
Port D dapat juga difungsikan secara individu. Berikut fungsi dari masing-masing pin pada port D:
PD0 : RXD (USART receive)
PD1 : TXD (USART transmit)
PD2 : INT0 (External Interrupt 0 Input)
PD3 : INT1 (External Interrupt 1 Input)
PD4 : OC1B (Output Compare B Timer/Counter 1)
PD5 : OC1A (Output Compare A Timer/Counter 1)
PD6 : ICP1 (Timer/Counter 1 Input Capture)
PD7 : OC2 (Output Compare Timer/Counter 2)
PIN 22-29
Port C, merupakan Port I/O 8-bit dua arah (bi-directional) dengan resistor pull-up internal.
Port C dapat juga difungsikan secara individu. Berikut fungsi dari masing-masing pin pada port C:
PC0 : SCL (Serial Clock, I2C)
PC1 : SDA (Serial Data Input/Output, I2C)
PC6 : TOSC1 (Timer Oscillator 1)
PC7 : TOSC2 (Timer Oscillator 2)
PIN 30 = AVCC, merupakan catu daya yang digunakan untuk masukan analog ADC yang terhubung ke port A.
PIN 31 = GND, Ground untuk catu daya analog.
PIN 32 = AREF, merupakan tegangan referensi analog untuk ADC.
PIN 33-40 = Port A, merupakan Port I/O 8-bit dua arah (bi-directional) dengan resistor pull-up internal. Selain itu,
port ini dapat difungsikan sebagai 8 channel ADC.
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
14
BINARY Bilangan biner penting untuk dipelajari. Ops..judulnya biner yah…tapi saya mau jelasin
hexa juga ga pa pa yah Sebelum saya jelaskan lebih jauh kita lihat contohnya dulu yak:
Desimal Hexa Biner
0 0 0
1 1 1
2 2 10
3 3 11
4 4 100
9 9 1001
10 A 1010
15 F 1111
16 10 11111
Bilangan desimal ialah bilangan yang sering kita gunakan sehari-hari. Sedangkan hexa
dan biner biasa digunakan pada mesin atau chip seperti mikrokontroller.
Hexa = dikalikan 16 pangkat 0 ……dst
Biner = dikalikan 2 pangkat 0 …dst
Contohnya:
Biner = 1001
Nilai decimal dari bilangan biner 1001 = (1x2^3)+(0x2^
2)+(0x2^
1)+(1x2^
0) = 9
Sedangkan hexa dari angka 0-9 sama dengan decimal lalu lanjut nilai 10 desimal = A
11=B, 12=C, 13=D, 14=E, 15=F. untuk nilai lebih dari F ditaruh di baris yang lebih kiri.
Contoh:
Hexa : 17
Nilai decimal dari bilangan hexa 17 = (1x16^1)+(7x16^
0) = 23
Pemahaman di bagian ini penting untuk mengerti pengaturan perintah pada register
mikrokontroller. Oh iya…ada yang namanya operasi bitwise, ada di bab
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
15
REGISTER
Dalam mikrokontroller ada yang disebut register. Ada banyak sekali register, jadi
lumayan capek juga kalo dibahas semua. Register bisa juga dibayangkan sebagai kota
dalam suatu Negara, tiap kota punya ciri khas dan hasil bumi masing-masing, kalau mau
ke kota A pasti jalannya beda dengan ke kota B.
Nah analogi diatas, kalau di mikro kota sebagai register (ada banyak tipe-ada ADC,
USART,dll) dan jalan untuk menuju kekota tertentu disamakan dengan cara kita
mengakses register tersebut. karena banyak banget jadi ga akan dibahas semua, cukup
satu aja (konsepnya jadi tar bisa ngerti semua register, syaratnya punya datasheet
lengkapnya).
Contoh
Misalkan kita mau pake fitur ADC dalam mikro ATMega8535, caranya……
Rule number one. Coba dilihat daftar isi pada datasheet tentang ADC, langsung lompat
ke register-register penyusun ADC, yaitu ADMUX, ADCSRA, ADCHdanADCL, dan
satu register lagi SFIOR. Ga perlu bingung dengan namanya biasanya itu singkatan,
missal ADMUX (ADC Multiplexer Selection Register), ga perlu hafal kok (apa gunanya
datasheet klo hrs hafal)
Secara singkat ini fungsi masing-masing register :
ADMUX = setting ADC, mulai dari clock, tegangan refrensi, pin, dll
ADCSRA = settingan untuk, kapan harus mulai mengaktifkan ADC
ADCH/L = ini untuk tempat menampung data
SFIOR = menentukan trigger ADC
Tiap register diatas terdiri dari 8 bit, masing-masing bit merepresentasikan hal yang
berbeda, seperti contoh untuk register ADMUX ini
Arti dari tiap bit ini bisa dilihat dalam datasheet. Misal,
Pada register ADMUX, untuk bit ke 6 dan 7 merupakan setingan untuk pengambilan
tegangan referensi untuk ADC (klo masih bingung sama ADC coba buka modul
praktikum system instrumentasi). Bit yang lain? (liat sendiri didatasheet )
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
16
Kayaknya capek yak klo liat datasheet terus, pengen gampang pake aja CodeWizard.
Dalam Codewizard sudah ada cara setting ADC (tinggal klik-klik), langsung deh jadi
programnya, kayak gini.
// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA4;
SFIOR&=0x0F;
Tapi kita tetep perlu datasheet, karena ada
beberapa perhitungan (biasanya clock), dan
yang paling penting gimana fungsi itu bekerja
(dalam hal ini ADC) –register mana dulu
yang harus di set atau yang harus ditunggu-,
sangat penting saat pembuatan program.
Jadi secara garis besar kalau mau kenal sama mikro(apapun jenisnya) ini gambarannya.
Setiap jenis mikro punya karakteristik yang berbeda, jadi sangat penting untuk memiliki
datasheetnya, emang sih agak kurang enak dibaca tapi itu penting!!!!
Dan satu lagi compilernya juga pasti beda-beda, bahkan satu jenis mikro bisa punya
banyak compiler contohnya AVR bisa pake CodevisionAVR atau WinAVR. So…masih
banyak yang harus dipelajari……..TETEP SEMANGAT…
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
17
BAB 3 CODEVISIONAVR
CodevisionAVR merupakan compiler bahasa C, didesain khusus
untuk mikrokontroller keluarga Atmel AVR. Dapat digunakan
pada Windows 98, Me, NT 4, XP, dan Vista. Fungsi utama
CodevisionAVR ialah untuk menuliskan program yang akan kita
masukkan kedalam mikrokontroller. Selain dengan CodevisionAVR masih ada jenis
lainnya (compiler lain) yakni WinAVR yang merupakan Openware sehingga akan selalu
ada versi baru.
Integrated Development Environment (IDE) sudah dibangun dalam AVR Chip In-System
Programmer software yang memungkinkan untuk secara otomatis mengirim program ke
mikrokontroller setelah sukses di compile. In-System Programmer software di disain
untuk dapat bekerja dengan Atmel STK500, AVRISP, AVRISP MkII, AVR Dragon,
AVRProg (AVR910 application note), Kanda Systems STK200+, STK300, Dontronics
DT006, Vogel Elektronik VTEC-ISP, Futurlec JRAVR and MicroTronics' ATCPU,
Mega2000 development boards.
Selain library standar C, CodeVisionAVR C compiler juga memiliki library lainnya yaitu
·Alphanumeric LCD modules
·Philips I2C bus
·National Semiconductor LM75 Temperature Sensor
·Philips PCF8563, PCF8583, Maxim/Dallas Semiconductor DS1302 and DS1307 Real
Time Clocks
·Maxim/Dallas Semiconductor 1 Wire protocol
·Maxim/Dallas Semiconductor DS1820, DS18S20 and DS18B20 Temperature Sensors
·Maxim/Dallas Semiconductor DS1621 Thermometer/Thermostat
·Maxim/Dallas Semiconductor DS2430 and DS2433 EEPROMs
·SPI
·Power management
·Delays
·Gray code conversion.
Contoh pemakaian Library dalam program :
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
CodeVisionAVR juga terdiri dari CodeWizardAVR Automatic Program Generator, yang
sangat memudahkan pengguna terutama dalam penulisan program, dari sini kita bisa
mengatur:
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
18
·External memory access setup
·Chip reset source identification
·Input/Output Port initialization
·External Interrupts initialization
·Timers/Counters initialization
·Watchdog Timer initialization
·UART (USART) initialization and interrupt driven
buffered serial communication
·Analog Comparator initialization
·ADC initialization
·SPI Interface initialization
·Two Wire Interface initialization
·CAN Interface initialization
·I2C Bus, LM75 Temperature Sensor, DS1621
Thermometer/Thermostat and PCF8563, PCF8583,
DS1302, DS1307 Real Time Clocks initialization
·1 Wire Bus and DS1820/DS18S20 Temperature
Sensors initialization
·LCD module initialization.
Sebelum memulai semua program diatas, maka sebelumnya saya ajarkan dulu gimana
caranya pake codevisionAVR. Termasuk gimana caranya pake Codewizard (hidup jadi
terasa lebih mudah klo pake yang satu ini).
CODEWIZARD
Sekarang masuk ke Codewizard, pake ini jadi
gampaaaaaaang banget klo mau bikin
program. Tapi harus ngerti gimana cara
pakainya, disini akan dijelaskan apa saja yang
ada di codewizard, serta fungsi dan cara
pakainya.
Seperti yang terlihat pada gambar, ada 14
komponen dalam codewizard, berikut penjelasan singkatnya :
1. Chip : Tipe Mikrokontroler yang digunakan
2. Ports : Keadaan masing-masing Port (sebagai input /output)
3. External IRQ : Kalau mau pake Interrupt (ada tiga)
4. Timers : bisa dipake untuk PWM
5. LCD : Kalau mau pakai LCD
6. Bit-Banged : Kalau mau pakai DS1302, untuk waktu detik s.d tahun
7. Project Information : Ga ngaruh ke program, hanya info pembuatan program
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
19
8. I2C : Salah satu interface serial dari mikrokontroller keluarga AVR
9. 1 Wire : Salah satu interface serial dari mikrokontroller keluarga AVR
10. 2 Wire(I2C) : Salah satu interface serial dari mikrokontroller keluarga AVR
11. USART : Salah satu interface serial dari mikrokontroller keluarga AVR
12. Analog Comparator : kalau mau pake komparator
13. ADC : Setting ADC -Analog to Digital Converter- (s.d. 10 bit)
14. SPI : Serial Pheripeal Interface
Sekarang dijelasin satu-satu
1. Chip
Yang ini fungsinya untuk ceklist hardware
yang digunakan, mikro apa yang kita pake
serta nilai kristal. Ini penting lho, soalnya
nanti yang akan dipanggil library dari mikro
ini. Clock sangat sangat berpengaruh apalagi
kalau kita mau pakai Timer. Klo dihardware
nya pake reset, Check Reset Source di klik,
klo ga ya jangan diapa-apain.
2. PORTS
Ini untuk setting port, mau diguankan sebagai
masukan atau keluaran. Tinggal klik aja.
Gampangkan, disbanding harus buka dulu
datasheet dicocokan dengan table dibawah, ini
lebih praktis.
Untuk keadaan awal OUT ;
bisa 0 (low) atau 1 (high)
Untuk keadaan awal IN ;
Bisa T (Tri-state) atau P (Pull-up)
Tristate tuh tegangannya setengah dari Vcc
Klo PullUp?? Coba cek.
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
20
3. Enternal IRQ
Yang ini untuk mengaktifkan Interupsi, mikro
ATMega8535 punya 3 interupsi, tinggal klik
aja, trus pilih deh modenya. Penjelasan
tentang tiap-tiap mode bisa dilihat di
datasheet.
4. Timer
Nah yang ini utnuk timer, pokoknya kalo
aplikasi program kita butuh timer maka yang
satu ini harus dipake. Contoh aplikasi yang
pake timer, PWM (Pulse Width Modulation).
Klo kita kan waktunya dari jam yak, dengan
skala detik, dll. Nah klo dimikro ini
bergantung dari kristal yang kita pake, ntar
frekuensi mikronya dibagi-bagi, tinggal milih
skalanya mau pake yang mana.
5. LCD
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
21
Enaknya AVR, make LCD jadi gampang
banget, programnya cuma satu baris, LCD
bisa ditaruh di PORT mana saja, tinggal
pilih. JAngan lupa kabel-kabel dari LCD
harus disesuaikan, kayak disebelah LCD pin
4 nyambungnya ke mikro PORTA.0, dst.
6. Komparator
Lucu ya, mikro ini ada komparatornya.
Prinsip komparatornya sama kayak IC analog
7.ADC
Dalam mirko ini sudah terdapat fasilitas ADC
sampai 10 bit. Untuk menggunakan ADC kita
harus melakukan seting registernya (tinggal klik)
Apakah mau menggunakan interrupt atau dalam
mode high speed, dan penting juga darimana
sumber tegangan referensinya, dicontoh sebelah
Vref dipilih dari pin no 32 yaitu ARef, jadi
berapapun tegangan yang dihubungkan ke Apin
ini akan menjadi tegangan acuan dalam proses
ADC. Clock disini akan berbeda untuk setiap
kristal (kelipatan 1 atau setengahnya) bisa dipilih,
dan yang terakhir auto trigger source, yaitu
sumber trigger dari mana. Maksudnya proses
ADC akan dieksekusi saat sinyal apa ? Bisa
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
22
dipilih Free Running untuk ADC yang jalan terus (tanpa perlu pemicu).
8. Macam –macam jalur Interface
Yang terakhir ini tentang komunikasi/interface
(Bab 5) keluar dari mikro, ada banyak tipe
komunikasi yang bisa dipilih tapi biasanya
(seringnya) kita pakai yang disebelah, USART.
Penjelasan lebih lanjut ada di bab 5.
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
23
Pengenalan Bahasa C (diambil dari berbagai sumber) Ini penting, soalnya di codevisionAVR pake bahasa C, jadi harus ngerti. Beberapa yang
paling penting (soalnya suka kelupaan)
1. ( = ) artinya masukin data
2. ( == ) artinya nge`cek`
3. Nulis isi register
ADMUX = 0b00001111 ; dalam biner
ADMUX = 0x0F ; dalam Hexa
ADMUX = 15 ; dalam decimal
4. Huruf besar kecil ngaruh
From buku Agus Bejo:
1. Bentuk Dasar Program C
Sebuah program dalam bahasa C setidaknya harus memiliki sebuah fungsi. Fungsi
dasar ini disebut fungsi utama (fungsi main) dan memiliki kerangka program
sebagai berikut:
Void main (void)
{
//pernyataan-pernyataan
}
Jika kita memiliki beberapa fungsi yang lain, maka fungsi utama inilah yang
memiliki kedudukan paling tinggi dibandingkan fungsi-fungsi yang lain, sehingga
setiap kali program dijalankan akan selalu dimulai dari memanggil fungsi utaa
terlebih dahulu. Fungsi-fungsi yang lain dapat dipangil setelah fungsi utama
dijalankan melalui pernyataan-pernyataan yang berada di dalam fungsi utama.
Contoh:
//prototipe fungsi inisialisasi port
Void inisialisasi_port (char A, char B, char C, char D);
//definisi fungsi inisialisasi port
Void inisialisasi_port (char A, char B, char C, char D);
{
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
24
DDRA = A;
DDRB = B;
DDRC = C;
DDRD = D;
}
//fungsi utama
Void main (void)
{
Inisialisasi_port (0xFF, 0xF0, 0x0F, 0x00);
}
2. Pengenal
Pengenal atau identifier merupakan sebuah nama yang didefinisikan oleh
pemrogram untuk menunjukkan identitas dari sebuah konstanta, variabel, fungsi,
label atau type data khusus. Pemberian nama sebuah pengenal dapat ditentukan
bebas sesuai keinginan pemrogram tetapi tetap mengikuti aturan berikut ini:
- Karakter pertama tidak boleh menggunakan angka,
- Karakter kedua dapat berupa huruf, angka atau garis bawah,
- Tidak boleh menggunakan spasi,
- Bersifat case Sensitive, artinya huruf kapital dan huruf kecil dianggap
berbeda,
- Tidak boleh menggunakan kata-kata yang meupakan sintaks maupun operator
dalam pemrograman C, misalnya: void, bit, long, char dan lain-lain.
3. Type data
Tipe Data Ukuran Jangkauan Nilai
Bit 1 bit 0 atau 1
Char 1 byte -128 s/d 127
Unsigned Char 1 byte 0 s/d 255
Signed Char 1 byte -128 s/d 127
Int 2 byte -32.768 s/d 32.767
Short Int 2 byte -32.768 s/d 32.767
Unsigned Int 2 byte 0 s/d 65.535
Signed Int 2 byte -32.768 s/d 32.767
Long Int 4 byte -2.147.483.648 s/d 2.147.483.647
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
25
Unsigned Long Int 4 byte 0 s/d 4.294.967.295
Signed Long Int 4 byte -2.147.483.648 s/d 2.147.483.647
Float 4 byte 1.2*10-38
s/d 3.4*1038
Double 4 byte 1.2*10-38
s/d 3.4*1038
4. Konstanta dan Variabel
Konstanta berisi data yang nilainya tetap, tidak dapat diubah selama program
dijalankan.
Contoh: const [tipe_data] [nama_konstanta]=[nilai]
const char kontantaku = 0x10;
Variabel berisi data yang bisa berubah nilainya pada saat program dijalankan.
Contoh: [tipe_data] [nama_variabel]=[nilai_awal]
char variabelku; (atau)
char variabelku = 0x20;
5. Pengarah Preprosesor
Digunakan untuk mendefinisikan prosesor yang digunakan, dalam hal ini adalah
untuk mendefinisikan jenis mikrokontroler yang digunakan. Dengan pengarah
preprosesor ini, pendeklarasian register-register dan penamaannya dilakukan pada
file lain yang disisipkan dalam program utama dengan sintaks sebagai berikut:
# include <nama_prosesor>
Contoh:
# include <mega8535.h>
6. Operator Aritmatika
Merupakan beberapa operator yang digunakan untuk melakukan perhitungan
aritmatika.
Operator Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
% Sisa Pembagian
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
26
Operator *, / dan % mempunyai prioritas paling tinggi dibandingkan + dan -.
Contoh:
2 + 3 * 4
Hasilnya bukan 20, tetapi 14.
Prosesnya: 2 + (3 * 4) = 14
7. Operator Pembanding
Digunakan untuk membandingkan 2 buah data. Hasil operator pembanding bukan
berupa nilai data tetapi hanya bernilai benar („1‟) atau salah („0‟) saja.
Berikut tabel operator pembanding:
Operator Contoh Keterangan
== x==y Benar : keduanya sama
!= x!=y Benar
> x>y Benar : x lebih besar dari y
< x<y Benar : x lebih kecil dari y
>= x>=y Benar : x lebih besar atau sama dengan
y
<= x<=y Benar : x lebih kecil atau sama dengan
y
8. Operator Logika
Digunakan untuk membentuk suatu logika atas dua buah kondisi atau lebih.
Berikut ini tabel dari operator logika:
Operator Keterangan
&& Logika AND
|| Logika OR
! Logika NOT
9. Operator Bit
Merupakan operator logika yang bekerja pada level bit. Berbeda dengan operator
logika, dimana pada operator logika menghasilkan benar atau salah (boolean),
pada operator ini akan dihasilkan data dalam bentuk biner.
Operator Keterangan
& Operasi AND level bit (biner)
| Operasi OR
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
27
^ Operasi XOR
~ Operasi NOT
<< Operasi untuk menggeser ke kiri
>> Operasi untuk mengeser ke kanan
Contoh:
a = 0x12;
b = 0x34;
maka,
a&b = 0x10
a<<1 =0x24
Penjelasan:
a=0x12 0 0 0 1 0 0 1 0
b=0x34 0 0 1 1 0 1 0 0
------------------------------------ &
a&b=0x10 0 0 0 1 0 0 0 0
penggeseran a ke kiri akan menghasilkan:
a<<1 0 0 1 0 0 1 0 0
10. Operator Penugasan dan Operator Majemuk
Digunakan untuk memberikan nilai atau memanipulasi data sebuah variable.
Berikut adalah operator yang termasuk dalam kategori operator penugasan:
Operator Keterangan
= Operator untuk memberi nilai variabel
+= Operator untuk menambahkan nilai
variabel
-= Operator untuk mengurangi nilai variabel
*= Operator untuk mengalikan nilai variabel
/= Operator untuk membagi nilai variabel
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
28
%= Oprator untuk memperoleh sisa
pembagian
Contoh:
a +=2; artinya nilai variabel a berubah menjadi a=a+2
b *=4; artinya nilai variabel b berubah menjadi b=b*2
selain operator penugasan di atas, juga ada operator penugasan yang berkaitan
dengan operasi bit seperti tabel berikut:
Operator Contoh Arti
&= X&=1 Variabel x di-AND-kan dengan
1
|= x|=1 Variabel x di-OR-kan dengan 1
~= x~=1 X=~(1) x = 0xFE
^= x^=1 Variabel x di_XOR-kan
dengan 1
<<= x<<1 Variabel x digeser ke kiri 1 kali
>>= x>>1 Variabel x digeser ke kanan 1
kali
11. Operator penambahan dan Pengurangan
Merupakan operator yang digunakan untuk menaikkan atau menurunkan nilai
sebuah variabel dengan selisih 1.
Operator Keterangan
++ Penambahan nilai variabel dengan
1
-- Pengurangan nilai variabel dengan
1
12. Operator Berkondisi
Disebut juga operator ternary. Digunakan untuk mengecek logika sebuah ekspresi
pernyataan untuk kemudian menunjukkan ekspresi pernyataan berikutnya.
Berikut ini adalah sintaks untuk operator berkondisi:
Ekspresi_pernyataan ? nilai_1 : nilai 2
Contoh:
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
29
PORTC = data_a > data_b ? data_a : data_b
Program di atas akan mengecek apakah nilai variabel data_a lebih besar dari nilai
variabel data_b, jika ya, maka nilai variabel data_a akan dikeluarkan ke port C
dan jika tidak, maka nilai variabel data_b yang akan dikeluarkan ke port C.
13. Fungsi Pustaka
Bahasa C memiliki sejumlah fungsi pustaka yang berada pada file-file tertentu
dan sengaja disediakan untuk menangani berbagai hal dengan cara memanggil
fungsi-fungsi yang telah dideklarasikan di dalam file tersebut. Dalam banyak hal,
pustaka yang tersedia tidak berbentuk kode sumber, melainkan dalam bentuk
yang telah dikompilasi. Pada saat proses linking, kode-kode dari fungsi ini akan
dikaitkan dengan kode-kode yang dituliskan oleh pemrogram. Sintaks untuk
menggunakan fungsi pustaka adalah sebagai berikut:
# include <nama_file_pustaka>
Contoh:
# include <lcd.h>
# include <string.h>
# include <mem.h>
dll
14. Pernyataan IF
Digunakan untuk melakukan pengambilan keputusan terhadap dua buah
kemungkinan, yaitu mengerjakan suatu blok pernyataan atau tidak.
Bentuk pernyataan if adalah sebagai berikut:
If (kondisi)
{
//blok pernyataan yang akan dikerjakan
//jika kondisi if terpenuhi
}
Contoh:
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
30
If (PINA>0x80)
{
Dataku = PINA;
PORTC=0xFF;
}
Pernyataan di atas akan mengecek apakah data yang terbaca pada Port A (PINA)
nilainya lebih dari 0x80 atau tidak, jika „ya‟ maka variabel dataku diisi dengan
nilai PINA dan data 0xFF dikeluarkan ke Port C.
15. Pernyataan IF...Else
Hampir sama dengan pernyataan if di atas, yaitu digunakan untuk melakukan
keputusan terhadap dua buah kemungkinan, yang membedakan adalah kedua
kemungkinan yang akan diputuskan masing-masing mengerjakan suatu blok
pernyataan atau mengerjakan blok pernyataan yang lain.
Bentuk pernyataan if...else adalah sebagai berikut:
If (kondisi)
{
//blok pernyataan yang akan dikerjakan jika kondisi if dipenuhi
}
Else
{
//blok pernyataan yang akan dikerjakan jika kondisi if tidak dipenuhi
}
Contoh:
If (PINA>0x80)
{
Dataku = PINA;
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
31
PORTC=0xFF;
}
Else
{
Dataku = ~PINA;
PORTC=0x00;
}
Pernyataan if..else di atas mengecek apakah data yang terbaca oleh Port A (PINA)
nilainya lebih dari 0x80 atau tidak, jika „ya‟, maka variabel dataku diisi dengan
nilai PINA dan data 0xFF dikeluarkan ke Port C, tetapi jika tidak, maka variabel
dataku diisi dengan nilai komplemen dari PINA dan data 0x00 dikeluarkan ke
Port C.
16. Pernyataan IF BERSARANG
Pernyataan if bersarang (nested if) adalah pernyataan if maupun if..else, dimana di
dalam blok pernyataan yang akan dikerjakan terdapat pernyataan if atau if..else
lagi.
Contoh bentuk pernyataan if bersarang 2-tingkat adalah sebagai berikut:
If (kondisi_1)
{
If (kondisi_2)
{
//blok pernyataan_1 yang akan dikerjakan jika kondisi_1 dan kondisi_2
terpenuhi
}
}
Else
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
32
{
If (kondisi_3)
{
//blok pernyataan_2 yang akan dikerjakan jika kondisi_1 dan kondisi_3
terpenuhi
}
}
17. Pernyataan Switch
Digunakan untuk melakukan pengambilan keputusan terhadap banyak
kemungkinan.
Bentuk pernyataan switch adalah sebagai berikut:
Switch (ekspresi)
{
Case nilai_1 : pernyataan_1;break;
Case nilai_2 : pernyataan_2;break;
Case nilai_3 : pernyataan_3;break;
...
Default : pernyataan_default;break;
}
Pada pernyataan switch, masing-masing pernyataan (pernyataan_1 sampai
dengan pernyataan_default) dapat berupa satu atau beberapa perintah dan tidak
perlu berupa blok pernyataan. Pernyataan_1 akan dikerjakan jika ekspresi
bernilai sama dengan nilai_1, pernyataan_2 akan dikerjakan jika ekspresi bernilai
sama dengan nilai_2 dan seterusnya. Pernyataan_default bersifat optional, artinya
boleh ada boleh tidak. Setiap akhir dari pernyaan harus diakhiri dengan break,
karena digunakan untuk keluar dari pernyataan switch.
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
33
Contoh:
Switch (PINA)
{
Case 0xFE : PORTC=0x00;break;
Case 0xFD : PORTC=0xFF;break;
}
Artinya, Port A akan dibaca dan dicocokkan datanya (PINA) dengan nilai case.
18. Pernyataan While
Digunakan untuk pengulangan sebuah pernyataan atau blok pernyataan secara
terus menerus selama kondisi tertentu masih terpenuhi.
Bentuk pernyataan while adalah sebagai berikut:
While (kondisi)
{
// sebuah pernyataan atau blok pernyataan
}
Jika pernyataan yang akan diulang hanya berupa sebuah pernyataan saja maka
tanda {dan} bisa dihilangkan.
Contoh:
Unsigned char a=0;
...
While (a<10)
{
PORTC=a;
a++;
}
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
34
Pernyataan di atas akan mengeluarkan data a ke port c secara berulang-ulang.
Setiap kali pengulangan, nilai a akan bertambah 1 dan setelah nilai a tidak lagi
lebih kecil dari 10 maka pengulangan akan berhenti.
19. Pernyataan do...while
Pernyataan do...while hampir sama dengan pernyataan while, yaitu pernyataan
yang digunakan untuk pengulangan sebuah pernyataan atau blok pernyataan
secara terus menerus selama kondisi tertentu masih terpenuhi.
Bentuk pernyataan while adalah sebagai berikut:
do {
//sebuah pernyataan atau blok pernyataan
}while (kondisi);
Yang membedakan antara pernyataan while dengan do..while adalah bahwa pada
pernyataan while pengetesan kondisi dilakukan terlebih dahulu, jika kondisi
terpenuhi, maka barulah blok pernyataan dikerjakan. Sebaliknya, pada pernyataan
do..while, blok pernyataan dikerjakan terlebih dahulu setelah itu baru dilakukan
pengetesan kondisi, jika kondisi terpenuhi maka dilakukan pengulangan
pernyataan atau blok pernyataan lagi. Sehingga, dengan demikian pada
pernyataan do...while blok pernyataan pasti akan dikerjakan minimal satu kali,
sedangkan pada pernyataan while blok pernyataan belum tentu dkerjakan.
20. Pernyataan For
Digunakan untuk melakukan pengulangan sebuah pernyataan atau blok
pernyataan, tetapi berapa kali jumlah pengulangannya dapat ditentukan terlebih
spesifik.
Bentuk pernyataan for adalah sebagai berikut:
for (nilai_awal , kondisi , perubahan)
{
//sebuah pernyataan atau blok pernyataan
}
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
35
Contoh:
Unsigned int a;
For (a=1 , a<10, a++)
{
PORTC=a;
}
Pertama kali nilai a adalah 1, kemudian data a dikeluarkan ke port C. Selanjutnya,
data a dinaikkan (a++) jika kondisi a < 10 masih terpenuhi, maka data a akan
terus dikeluarkan ke port C.
21. ARRAY
Merupakan sekumpulan data dengan type yang sama yang dideklarasikan dalam
satu nama variabel. Array dapat memiliki dimensi satu, dua atau lebih, tetapi
umumnya hanya sampai 3 dimensi.
Contoh:
Char data[7];
Artinya, variabel array dengan nama data terdiri dari 8 elemen data yang bertype
sama, yaitu: char.
Deklarasi variabel array di atas dapat juga diberi inisial awal seperti contoh
berikut:
Char dataku[7] = {0, 1, 2, 3, 4, 5, 6};
Kita juga dapat mendeklarasikan variabel array dengan jumlah elemen yang tidak
ditentukan, tetapi untuk hal ini inisial awal datanya harus diberikan.
Contoh:
Char data[]; //tidak boleh dilakukan
Char data[]={0, 1, 2, 3, 4, 5, 6};
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
36
Deklarasi variabel array dengan jumlah elemen yang tidak ditentukan biasanya
digunakan untuk menyimpan data string karena kita sering malas untuk
menghitung berapa jumlah elemenya seperti contoh berikut:
Char data[]={“Mikrokontroler ATMega8535”};
atau
Char data[]=”Mikrokontroler ATMega8535”;
Untuk mengakses data yang berada di dalam variabel array dapat dilakukan
dengan cara berikut:
Nama_array [indeks];
Indeks adalah penunjuk data elemen tertentu pada variabel array yang nilainya
selalu dimulai dari 0.
22. POINTER
Merupakan suatu variabel yang digunakan utnuk menyimpan alamat dari sebuah
variabel data. Keuntungannya, kita dapat mengakses data dengan ukuran yang
besar dalam waktu yang relatif singkat. Selain itu, untuk menunjuk lokasi memori
tertentu dapat dilakukan ketika program aplikasi sedang dijalankan, sehingga ini
menjadi lebih fleksibel.
a. Deklarasi Pointer
Sebuah variabel pointer (untuk selanjutnya cukup disebut pointer saja)
dideklarasikan dengan cara yang hampir sama dengan deklarasi variabel data
biasa, hanya dibagian awal nama variabelnya ditambahkan tanda * seperti
berikut:
[tipe_data] *[nama_variabel_pointer]=[nilai_awal];
Contoh:
Char *pointerku;
Char *pointerku=0x80;
Pada deklarasi pertama, kita mendefinisikan sebuah pointer yang digunakan
untuk menunjuk sebuah data di memori tetapi belum ditentukan alamat
memori yang dimaksud, sedangkan pada deklarasi yang kedua sudah
ditentukan alamat memorinya, yaitu alamat 0x80.
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
37
b. Menunjuk alamat sebuah variabel
Sebuah pointer dideklarasikan maka selanjutnya kita dapat menunjuk pada
alamat memori tertentu tempat menyimpan sebuah variabel data seperti
contoh berikut:
Char dataku = 0x20;
Char *pointerku;
Pointerku =&dataku;
Pada baris pertama kita mendeklarasikan sebuah variabel bernama dataku
dengan tipe char, dimana isi datanya yaitu 0x20 disimpan di alamat memori
tertentu. Selanjutnya kita mendeklarasikan sebuah pointer dengan nama
pointerku yang digunakan untuk menunjuk alamat memori tertentu yang
dalam hal ini belum ditentukan. Baris ketiga digunakan untuk menyatakan
bahwa alamat memori yang digunakan untuk menyimpan variabel dataku
disimpan di pointer, sehingga sekarang pointer sudah menunjuk ke memori
variabel dataku. Jadi, sekarang pointer berisi 0x80 dan data yang ada di
alamat memori 0x80 adalah 0x20.
23. STRUKTUR
Merupakan kumpulan dari variabel-variabel data baik dengan tipe yang sama
ataupun berbeda yang dikemas dalam satu wadah kemudian diberi sebuah nama.
Untuk mendefinisikan sebuah struktur dilakukan dengan cara sebagai berikut:
Struct [nama_struktur]
{
Deklarasi variabel;
....
};
24. Memanggil Assembler
Meskipun kita menggunakan bahasa pemrograman C, kita masih tetap bisa
menggunakan sintaks pemrograman asembler.
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
38
Caranya sebagai berikut:
#asm
; instruksi-instruksi assembler
#endasm
Contoh:
#asm
ldi r0,100
mov r2,r3
#endasm
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
39
BAB 4 LATIHAN PROGRAM Bab ini merupakan pelatihan dalam menggunakan mikrokontroller AVR (ATMega8535).
Cara belajar yang terbaik adalah dengan mencoba, Pelatihan akan dimulai dari program
yang paling mudah.
Yang akan dipelajari pada bab ini ialah ;
1. Input/Output
2. LED
3. ADC
4. Seven Segment
5. LCD
6. Mengontrol motor DC dan Servo
7. Kontrol PWM
Jangan lupa untuk menyiapkan rangkaian hardware-nya (ada di halaman Getting Started).
Berikut penjelasan singkat setiap program.
OUTPUT
Tujuan Program :
1. Membuat delapan lampu LED menyala
2. Membuat lampu LED menyala dan mati (Selang-seling)
3. Membuat lampu LED menyala berurutan sesuai detik
INPUT/OUTPUT
Tujuan Program :
1. Membuat delapan lampu LED menyala melalui dipswitch
ADC
Tujuan Program :
1. Menampilkan hasil ADC melalui lampu LED
2. Menampilkan hasil ADC melalui LCD
3. Menampilkan hasil ADC melalui Delphi
PWM
Tujuan Program :
1. Menggerakkan motor DC
2. Mengendalikan motor DC melalui dipswitch
3. Mengendalikan motor DC melalui PC (Delphi)
4. Membuat kontrol kipas angin
5. Menggerakan motor Servo
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
40
PROGRAM 1 : OUTPUT Tujuan Program : Membuat delapan lampu LED menyala
Hardware : Hubungkan rangkaian LED ke PORTC
Codewizard : setting PORTC sebagai output, set Chip
(Kalau pake Codewizard, program yang ditulis Cuma satu aja : PORTC=1) Karena ini program pertama, maka saya rinci secara lengkap, apa aja yg harus dilakukan.
Ok here we GO!!
1. Pilih shortcut codevisionAVR dengan tampilan seperti berikut
2. Buat file baru dengan cara : File , NEW
3.Pilih Project
4. Pilih Codewizard
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
41
5. pilih Atmega
6. Menggunakan CodeWizard : Pengaturan Chip, jenis mikro dan nilai crystal yang
digunakan.
7. Menggunakan CodeWizard, setting PORTC sebagai Output
- klik PORT C
- klik In (agar berubah menjadi OUT)
- Set Chip, pilih mikro dan kristal yang digunakan
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
42
8. Simpan hasil CodeWizard
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
43
9. Save setting : save tiga kali dengan nama file yang persis sama
10. Hasil yang diperoleh (klo ga kluar sperti ini, di kolom kiri –code navigator- klik file
yang dot c misal title.c)
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
44
11. Tulis program di while
PORTC = 0xFF;
SETTING Chip Programmer Yang satu ini jangan sampai kelupaan
1. Pilih settings, programmer
2. Atur setting sesuai dengan programmer yang digunakan. Sebagai contoh saya gunakan
STK200+ (parallel port). OK
CARA COMPILE PROGRAM
1. Buka Project, Configure
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
45
2. Pilih AfterBuild, Pilih program the CHIP
3. Pilih OK, PERHATIAN : JANGAN MERUBAH APAPUN (ntar jadi permanent)
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
46
4. Pilih Build All
5. Setelah tidak ada error maka pilih Program the Chip, pastikan power supply menyala
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
47
OK tinggal sambungkan programmer/downloader ke komputer (jgn lupa power supply
programmer), trus klik Program the chip.
SELESAI
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
48
PROGRAM 2
OUTPUT Tujuan Program : Membuat lampu LED menyala dan mati (Selang-seling)
Hardware : Hubungkan rangkaian LED ke PORTC
Codewizard : setting PORTC sebagai output, set Chip
Tambahkan program ini
while (1) { // Place your code here PORTC.0 = 1; PORTC.1 = 0; PORTC.2 = 1; PORTC.3 = 0; PORTC.4 = 1; PORTC.5 = 0; PORTC.6 = 1; PORTC.7 = 0; }; }
PROGRAM 3
OUTPUT Tujuan Program : Membuat lampu LED menyala berurutan sesuai detik
Hardware : Hubungkan rangkaian LED ke PORTC
Codewizard : setting PORTC sebagai output, set Chip
Tambahkan program ini
Diawal (setelah #include <mega8535.h>) :
# include <delay.h>
Diakhir : while (1) { // Place your code here PORTC = 0x01; delay_ms(1000); PORTC = 0x02; delay_ms(1000); PORTC = 0x04; delay_ms(1000); PORTC = 0x08; delay_ms(1000); PORTC = 0x10; delay_ms(1000); PORTC = 0x20; delay_ms(1000); PORTC = 0x40; delay_ms(1000); PORTC = 0x80; delay_ms(1000); }; }
PROGRAM 4
INPUT/OUTPUT Tujuan Program : Membuat delapan lampu LED menyala melalui dipswitch
Hardware : Hubungkan rangkaian LED ke PORTC, Dipswitch ke PORTB
Codewizard : setting PORTC sebagai output, PORT B sebagai input, set Chip Tambahkan program berikut ini :
Diakhir : while (1) { If (PORTB==0x01) { PORTC = 0x01} else if (PORTB==0x02) { PORTC = 0x02} else If (PORTB==0x04) { PORTC = 0x04} else if (PORTB==0x08) { PORTC = 0x08}
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
49
else If (PORTB==0x10) { PORTC = 0x10} else if (PORTB==0x20) { PORTC = 0x20} else If (PORTB==0x40) { PORTC = 0x40} else if (PORTB==0x80) { PORTC = 0x80} }; }
PROGRAM 5
ADC Tujuan Program : Menampilkan hasil ADC melalui lampu LED (PORTC)
Hardware : -Hubungkan rangkaian LED ke PORTC
-Aref ke tegangan referensi ADC (missal 5 volt)
-PORTA.0 sebagain input ADC (hubungkan ke tegangan variabel)
Codewizard : setting PORTC sebagai output, set ADC 8 bit, set Chip
Buat File baru lalu setting codewizard aktifkan ADC
Berikut Programnya
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.9 Evaluation
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 3/8/2009
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
50
Chip type : ATmega8535
Program type : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x20
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
51
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
52
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;
while (1)
{
PORTC = read_adc(0); // INI PROGRAMNYA-Cuma ini doank-
};
}
PROGRAM 6
ADC Tujuan Program : Menampilkan hasil ADC melalui LCD (PORTC)
Hardware : -Hubungkan rangkaian LCD ke pin untuk LCD
-Aref ke tegangan referensi ADC (missal 5 volt)
-PORTA.0 sebagain input ADC (hubungkan ke tegangan variabel)
Codewizard : Set Chip, Set LCD, set ADC 8 bit
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
53
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.9 Evaluation
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 3/8/2009
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
Chip type : ATmega8535
Program type : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
*****************************************************/
#include <mega8535.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x00
char lcd_buffer[33];
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
54
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
55
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;
// LCD module initialization
lcd_init(16);
while (1)
{
lcd_gotoxy(0,0);
sprintf(lcd_buffer,”adc=%c”,read_adc(0));
lcd_puts(lcd_buffer);
};
}
PROGRAM 7
PWM Tujuan Program : Menggerakan motor Servo
Hardware : Hubungkan koneksi pulsa servo(i) ke PORTD.4
Codewizard : Set Chip dan Timer
Sama seperti sebelumnya setting codewizard seperti berikut :
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
56
Program yang harus ditambahkan
Diawal : #include<delay.h>
Diakhir :
while (1)
{
// Place your code here
for(OCR1A=600;OCR1A!=1500;OCR1A++){
delay_ms(100);
}
};
}
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
57
BAB 5 ANTARMUKA PC
Bab ini sangat penting ketika, TA kita mengharuskan komunikasi antara alat hardware
yang kita buat dengan PC computer (untuk menampilkan data). Atau pun Tugas akhir
yang mengharuskan adanya komunikasi antar dua device, bisa berupa PC-PC, mikro-
mikro, mikro-PC.
Saat membuat program antarmuka terutama antara PC dan mikrokontroller, maka akan
ada dua bagian program yang akan dibuat yakni program pada mikro dan PC. Pada mikro
kita harus memilih jenis antarmuka yang ingin digunakan, demikian halnya pada PC..
Ada banyak jenis antarmuka yang terdapat dalam PC computer, seperti : Serial Port
Interface (digunakan untuk koneksi ke Modems, Printers dan device lainnya), Parallel
Port Interface (Biasa digunakan untuk koneksi ke printer), the IDE Interface (ke Disk
Drives), the USB Interface (ke Mouse, Printers, Scanners, Card Readers, dll), Firewire
Interface (Untuk kecepatan tinggi seperti video cameras), dan various Audio (Sound
System) Interfaces.
Sedangkan pada mikrokontroller dapat di lihat dari diagram berikut :
Yang perlu diketahui dalam Interface computer yaitu :
ASCII (American Standard Code for Information Interchange)
Komputer cuma ngerti angka tertentu, ASCII merupakan kode yang mewakili karakter.
Hasil pembacaan ADC, yang dikeluarkan oleh mikro merupakan data ASCII.
Contoh Code ASCII :
Desimal = 33 ; Hexa = 21; Chr = !
Lebih lengkap di http://www.asciitable.com/
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
58
Baudrate
Merupakan banyaknya bit yang dikirim dalam satu detik Beberapa standar baud rate:
1200
2400
4800
9600
19200
38400
57600
115200
... etc
Contoh baud rate 9600bps(bits per second) berarti satu bit membutuhkan waktu 1/9600
detik atau 0.000104 det atau 104uS.
PARALEL
Kita mulai dari yang paling mudah terlebih dahulu. Ini ngutip dari TA Harri SW :
Port parallel merupakan tipe soket pada PC (personal computer) untuk antarmuka dengan
berbagai peralatan, dikenal sebagai printer port atau Centronics port, dengan komunikasi
paralel dua arah menggunakan standar IEEE 1284 [6]. Gambar II.5 memperlihatkan kaki-
kaki pada port parallel tipe IBM, atau DB25. Penjelasan fungsi tiap pin dijelaskan dalam
Tabel II.1 berikut.
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
59
SERIAL RS232
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
60
Dalam RS232 ada dua jalur data RX dan TX. TX merupakan jalur dimana data dikirm
keluar dari device. Sedangkan RX merupakan jalur dimana device lain menaruh data
yang dibutuhkan untuk dikirm ke device tersebut
Dalam RS232 HIGH = -12V dan LOW = +12V. Karena microcontroller hanya mengerti
tegangan TTL HIGH = 5V dan LOW = 0V maka dibutuhkan pengkonversi tegangan
antara RS232 dengan mikrokontroller, yaitu IC MAX232.
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
61
RS232 Data Transmission.
Transmission
1. Ketika tidak terjadi transmisi, keadaan TX HIGH (-12V) ( STOP CONDITION )
2. Ketika device mengirim data, TX LOW selama 104uS (baudrate9600bps) (Ini
disebut Start Bit –selalu nol-)
3. Lalu data dikirim dengan kecepatan 104uS/bit.
4. Terakhir TX set HIGH selama 104uS (balik lagi kayak no 1)
Reception
Hampir sama dengan transmisi, disini device yang akan menerima data menunggu
RX LOW (start bit) (+12V ). Bedanya dengan TX Pembacaan (keadaan LOW atau
HIGH) dilakukan ditengah.
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
62
USB Sebenernya susah, tapi bisa beli jadi. Ada dua pilihan
Gambar disebelah ialah AVRISP MK2
(www.grifo.com/PROG/HBI/uk) khusus
untuk mikrokontroller tipe AVR, kalau di e-
bay $19 (ga termasuk ongkos kirim), tapi
kalau beli di surabaya (pesen) kira-kira
harganya 400.000an. Kalau yang ini fiturnya
lengkap, bisa untuk download program dan
yang terpenting bisa untuk interface USB,
makanya harganya juga lumayan.
Kalau USB to RS232 lebih murah kisaran 100.000, bahkan ada yang 50.000 (tapi
kualitasnya jelek). Jadi nanti data yang keluar masuk diperlakukan sama seperti
komunikasi serial RS232. Programnya (di mikro dan Delphi) sama seperti komunikasi
dengan serial RS232.
Referensi
Modul Praktikum Sistem Instrumentasi
http://www.bipom.com/applications/micro_interfacing.pdf
http://extremeelectronics.co.in/avr-tutorials/rs232-communication-the-basics
http://www.asciitable.com/
http://www.grifo.com/PROG/HBI/uk_AVRISP.htm
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
63
BAB 6 DELPHI 7 (bukan untuk dibaca tapi DICOBA)
Bab ini sebenernya dari modul pelatihan, saya dah nyoba modulnya dan ternyata banyak
yang ga sinkron atau kurang jelas, nah disini saya benerin biar ga nyasar pas bikin
programnya. Paling enak baca bab ini sambil latihan pakai Delphi 7. Selain Delphi masih
banyak software yang lain, fiturnya juga pasti beda. Tapi intinya sih (cara makenya) sama
aja. Jadi pelajari dulu yang ini yak.
Buat kak Ignatius Aris dan Zulkifli, punten modulnya saya rombak dikit.
Oh iya, bahasa pemrograman Delphi hampir sama dengan pascal (malah pak Rizal
bilangnya sama). Karena kita tadi dah belajar C, jadi harus hati-hati yak mirip-mirip gitu
sama C tapi beda.
MODUL PELATIHAN DELPHI INSTRUMENTASI
BAB I
Form dan Unit
Berbeda dengan Pascal, pada Delphi
kita akan mengenal OOP (Object
Oriented Programming), jadi bila pada
Pascal kita akan melihat tampilan
yang menjemukan, pada Delphi kita
dapat mengatur tampilan kita
semenarik mungkin pada form yang
kita gunakan. Caranya cukup mudah,
kita hanya menaruh komponen-
komponen yang ingin kita gunakan
pada form tersebut, dan
memfungsikan masing-masing
komponen sesuai dengan yang kita
inginkan.
Unit
Setiap perubahan pada form akan
berakibat perubahan pada unit yang
kita miliki. Untuk pindah dari Form ke
Unit, tekan F12.
Berikut ini adalah bentuk unit yang
diberikan Delphi saat pertama kita
membuka sebuah Form.
unit Unit1;
interface
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
64
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{Private declarations}
public
{Public declarations}
end;
var
Form1:TForm1;
Implementation
{$R *.DFM}
end.
Komponen
Dalam membuat program, Delphi telah menyediakan banyak kemudahan, yaitu dengan
disediakannya komponen-komponen. Komponen ini merupakan sebuah prosedur atau
program yang sudah di kompile dan langsung dapat digunakan, sesuai dengan fungsinya
masing-masing.
Berikut merupakan tampilan komponen-komponen yang dapat digunakan dalam Delphi
ini:
Untuk menggunakan komponen ini, kita dapat meng-klik komponen yang diinginkan,
kemudian kita klik di Form, maka komponen tersebut akan muncul di Form.
Berikut kegunaan dari beberapa komponen:
Button/Bitbtn (Ke-8 dari kiri, klo bitbtn di Additional)
Biasa digunakan sebagai tombol kendali. Berbeda dengan Btn, pada Bitbtn kita dapat
menyisipkan warna pada tombol dan icon tertentu.
Panel (kedua dari kanan)
Berfungsi untuk mengelompokkan komponen-komponen.
Label (kelima dari kiri)
Berfungsi untuk menamakan atau memberi keterangan pada program.
Edit (keenam dari kiri)
Berfungsi sebagai masukan data (input) dalam bentuk string. Dari bentuk string ini, kita
dapat mengolahnya menjadi bentuk integer atau bentuk lainnya untuk kemudian menuju
operasi selanjutnya.
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
65
Chart (keempat dari kanan)
Berfungsi untuk menampilkan data dalam bentuk grafik.
Stringgrid (kelima dari kiri)
Berguna untuk menaruh data string ke dalam bentuk kolom tabel, seperti pada Excel.
Kita harus mengubah type data ke dalam bentuk string terlebih dahulu apabila kita akan
menampilkan data yang bukan string.
PopupMenu
Berfungsi sebagai perintah yang aktif bila kita klik kanan mouse. Untuk
mengaktifkannya, kita harus mengaktifkan popup menu pada komponen yang diinginkan,
caranya: ubah pada object inspector.
MainMenu
Salah satu contoh MainMenu adalah Option. Pada komponen ini kita dapat menaruh
fungsi-fungsi program seperti pada aplikasi pada umumnya.
ComboBox
Berfungsi sebagai petunjuk untuk pemilihan berbagai masukan.
RadioButton
Secara prinsip, komponen ini mirip dengan Check Box, yang membedakan hanya pada
tampilannya saja.
Media Player
Berguna untuk menyalakan atau memainkan musik (format wav atau midi) dan
menjalankan video (format avi).
Timer
Berfungsi sebagai jam yang telah disediakan Delphi. Fasilitas ini dapat juga kita
manfaatkan untuk mendecode time, sehingga dapat terjadi akuisisi data.
Clientsocket
Digunakan di Client pada saat koneksi ke server.
Serversocket
Digunakan di Server, yang akan menyediakan layanan koneksi ke Client.
Masih banyak komponen lain yang ada dalam Delphi ini, penjelasan lebih lengkap dapat
ditemui pada Help Menu.
Object Inspector
Object Inspector berguna sebagai
Options dari masing-masing
komponen. Dengan Object Inspector
ini, kita dapat memanipulasi
komponen yang kita gunakan
(walaupun sebenarnya kita juga dapat
menggunakannya dengan menuliskan
lewat text mode).
Beberapa contoh properties:
Font
Menunjukkan jenis font apa yang
digunakan. Selain jenis font, dalam
menu ini terdapat juga pilihan style
dan size font yang akan digunakan.
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
66
Caption
Merupakan judul dari form yang sedang digunakan.
Name
Pada prinsipnya, Name hampir sama dengan Caption. Yang membedakannya, Caption
mengubah judul dari Form secara utuh, sedangkan Name hanya mengubah judul yang
tertera pada komponen (yang akan ditampilkan) tanpa mengubah nama komponen
tersebut. Oleh karena itu, ketika kita menggunakan suatu komponen, kita tetap
menggunakan nama kompenennya, bukan nama pada captionnya.
Enabled
Menunjukka bahwa komponen ini bisa digunakan atau tidak. Perintah cukup penting
apabila kita tidak ingin user menekan tombol yang tidak diinginkan.
Height
Merupakan tinggi dari komponen yang akan kita posisikan pada form atau pada
komponen yang lainnya.
Width
Merupakan lebar dari komponen yang akan kita posisikan pada form atau komponen
yang lainnya.
Popup Menu
Auto Size
Komponen ini memberikan pilihan apakah Form yang kita gunakan bisa diperbesar atau
tidak.
Text
Biasanya terdapat pada komponen edit dan mask edit. Kegunaanya untuk menaruh kata-
kata pada suatu komponen.
Color
Berfungsi unutk mengubah warna suatu komponen.
Visible
Memberikan pilihan kepada komponen apakah akan ditampilkan atau tidak.
Hint
Berfungsi untuk memberikan keterangan ketika kursor kita berada di atas suatu
komponen.
BorderStyle
Memberikan pilihan bingkai yang dapat kita gunakan pada Form.
Dengan Object Inspector, kita juga dapat menentukan event apa yang kita buat untuk
suatu komponen. Beberapa contoh event, antara lain:
Onclick
Artinya, prosedur yang kita tuliskan pada suatu komponen akan dijalankan ketika kita
meng-klik komponen tersebut.
Onkeypress
Artinya, prosedur yang kita tuliskan pada suatu komponen akan dijalankan ketika kita
menekan suatu tombol. Perlu diperhatikan bahwa Delphi mengenal character yang
ditekan melalui kode yang masuk ke dalam variabel key.
Contoh:
Prosedur TForm1.Edit1KeyPress(Sender:Tobject; var Key: Char);
Begin
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
67
If key =#13 then ....(isikan perintah)
End;
artinya, bila key =#13 (enter), maka p rosedurnya akan dijalankan.
Contoh Program:
Buatlah suatu program dengan sebuah click button, yang mana bila di-klik namanya
berubah dari “start” menjadi “stop”, dan bila di klik lagi, maka namanya akan berubah
lagi menjadi “start”.
Solusi:
Ambil Komponen Button1,
Double click pada button tersebut,
Isikan pada unit1 prosedur berikut:
Prosedure TForm1.Button1Click(Sender: Tobject);
Begin
If Button1.caption =‟Start‟ then
Button1.caption := „Stop‟ //check caption pada button1
//apabila = „Start‟, maka ubah caption menjadi „Stop‟
Else Button1.caption: = „Start‟ ;
End;
File-file pada Delphi
*.pas
Merupakan source file, disini akan disimpan kode pascal yang kita tulis.
*.dpr
Merupakan project file. Sebagai project file, file ini berguna untuk menggabungkan satu
atau lebih file-file source.
*.dpu (Delphi Compiled Unit)
Pada saat kita membuat sebuah aplikasi, Delphi akan membuat file ini. File ini berfungsi
sebagai hyperlink, sehingga kita bisa membuat beberapa form yang terhubung satu
dengan yang lain.
*.dfm (Delphi Form)
File ini berisi informasi mengenai data-data form.
*.res (Windows Resources)
*.dof (Delphi Project Option)
Kita dapat mengubah icon aplikasi yang kita buat dan datanya akan disimpan di sini.
*.exe
Merupakan application file setelah kita meng-compile program yang telah kita buat.
BAB II
Pengolahan Data, Chart dan Oleobject
Type data pada Delphi
Pada umumnya, Delphi merupakan type data yang sama dengan pascal. Namun, type data
pada Delphi lebih lengkap dibandingkan Pascal. Type data yang biasa digunakan pada
Delphi, antara lain:
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
68
String
Biasa digunakan untuk memasukkan data string (gabungan beberapa character)
Integer
Merupakan bilangan asli (1,2,3, . . .)
Real
Merupakan bilangan bulat (berupa pecahan dan integer)
Byte
Besar dari tupe ini hanya 8-bit.
Word
Besar bilangan dari type ini adalah 16-bit.
Date and time
Type waktu dan tanggal yang disediakan Delphi.
Konversi type data
Dalam pengolahan data , biasanya kita memerlukan suatu konversi type data, banyak
sekali konversi type data yang bisa dilakukan Delphi, antara lain:
Strtoint
Mengubah type data string menjadi integer.
Inttostr
Mengubah type data integer menjadi string.
Timetostr
Mengubah type data time menjadi string.
Strtofloat
Mengubah type data string menjadi float.
Floattostr
Mengubah type data float menjadi string.
Agar lebih jelas, perhatikan contoh program jam berikut:
Masukkan komponen timer pada form, (ada di system)
Masukkan label pada form (hapus captionnya), (ada di standard)
Double click pada komponen timer,
Tulis prosedur berikut:
Begin
Label1.caption:=timetostr(time);
End;
Penjelasan:
Inti dari program ini adalah mengubah time menjadi bentuk string. Program ini dapat
menunjukkan jam komputer anda, komponen timer akan terus berubah mengikuti waktu
pada jam komputer. Perubahan ini langsung ditulis pada label1.caption, sehingga pada
label 1 berubah juga tiap detiknya.
Memasukkan data ke grafik
Pada pascal, biasanya kita mengalami kesulitan ketika membuat grafik dari data-data
yang kita miliki. Kita dapat memecahkan permasalahan tersebut dengan menggunakan
Delphi.
Perhatikan contoh berikut:
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
69
Masukkan komponen,
Edit1
Edit2
Bitbtn1 (ubah captionnya menjadi Send)
Bitbtn2 (ubah captionnya menjadi Clear)
Chart1 (ambil dari Additional)
Double klik pada chart hingga muncul tampilan berikut
Klik tombol Add hingga muncul tampilan berikut
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
70
Pilih bentuk grafik, misal line, klo mau 2 dimensi contreng di 3D kosongkan. Pilih OK
Setting chart selesai, pilih close. Hasilnya jadi gini
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
71
Tulis prosedur berikut ini:
Prosedure TForm1.Bitbtn1click(sender:Tobject);
Begin
With chart do
With series1 do
Addxy(strtofloat(edit1.text),strtofloat(edit2.text),”,clblue);
Edit1.Clear;
Edit2.clear;
End;
Masukkan data untuk sumbu x pada edit1.text dan sumbu y pada edit2.text
Penjelasan:
Fungsi utama terletak pada prosedure bitbtn1click, setelah tombol ini ditekan, maka isi
dari edit1 (data untuk sumbu x) dan edit2 (data untuk sumbu y) akan dikirim ke grafik.
Pada grafik kita menggunakan addxy, yang mempunyai urutan fungsi addxy (sumbux,
sumbuy, label, warna grafiknya). Perhatikan, data sumbu x pada edit1 dan data sumbu y
pada edit2 harus diubah menjadi float. Untuk label, sebaiknya dikosongkan saja (“ ”),
mengenai warna grafik dapat dilihat pada properties warna seperti yang telah disediakan
oleh Delphi. kegunaan akhir program ini, kita dapat memasukkan berbagai nilai x dan y
(baik dalam bentuk integer maupun real), sehingga data yang telah dihasilkan dapat lebih
mudah dianalisa dengan melihat perubahan pada grafiknya.
Di bawah ini dijelaskan bagaimana mengedit grafik dan bagian-bagian yang penting
untuk diedit.
Oleobject Menggunakan Oleobject untuk akses ke Microsoft Excel dan Microsoft Word
Dengan oleobject, kita bisa mengirim data dan mengakses program-program dari
Microsoft (seperti Excel dan Word), terkadang kita ingin melakukan pengolahan data
yang lebih advanced dengan Excel, oleobject inilah yang bisa kita andalkan untuk
mengatasi hal tersebut.
Berikut ini adalah contoh memasukkan kata yang kita inginkan ke dalam icrosoft word:
Uses comobj;
Prosedure TForm1.bitbtn3click(sender:Tobject);
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
72
Var
Keword:variant;
Begin
Keword:=createoleobject(„word.basic‟);
Keword.filenew; {membuka file baru}
Keword.appshow; {perintah menampilkan aplikasi word}
Keword.insert(„Delphi itu menyenangkan‟);
End;
Keterangan program:
Penggunaan oleobject harus diawali dengan comobj.
Kita memasukkan variant keword:=createoleobject(„word.basic‟), kita dapat
menggantinya dengan („excel.Application‟) bila kita ingin koneksi ke Microsoft Excel.
Keword.filenew membuka file baru pada Ms.Word.
Keword.appshow menampilkan program Ms.Word.
Keword.insert mengisi data pada Ms.Word.
Kita dapat menggabungkan program memasukkan data ke grafik dan hasilnya akan di
tampilkan pada Ms.Excel. Berikut flowchart untuk membuatnya:
<gambar>
Prosedur:
Unit jam_grap;
Interface
Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Stdctrls,
ExtCtrls, TeEngine, Series, Buttons, TeeProcs, Chart;
Type
TForm1=class(TForm)
Label1:Tlabel;
Timer1:TTimer;
Chart1:TChart;
Panel1:TPanel;
Label2:TLabel;
Label3:TLabel
Edit1:TEdit;
Edit2:TEdit;
BitBtn1:TBitBtn;
Series1:TlineSeries;
BitBtn2:TbitBtn;
BitBtn3:TBitBtn;
Procedure Timer1Timer(Sender:TObject);
Procedure BitBtn1Click(Sender:TObject);
Procedure BitBtn2Click(Sender:TObject);
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
73
Procedure BitBtn3Click(Sender:TObject);
Procedure FormCreate(Sender:TObject);
Procedure FormDestroy(Sender:TObject);
Private
{Private declarations}
Public
{Public declarations}
End;
Var
Form1:TForm1;
Fa,g:variant;
I,j:integer;
Datax,datay:array[0..20]of real;
Implementation
{$R*.DFM}
Uses comobj;
Prosedure TForm1.Timer1Timer(Sender:TObject);
Begin
Label1.caption:=timetostr(time);
End;
Prosedure TForm1.BitBtn1Click(sender:TObject);
Begin
Datax[i]:=strtofloat(edit1.text);
Datay[j]:=strtofloat(edit2.text);
With chart1 do
With series1 do
Addxy(strtofloat(edit1.text),strtofloat(edit2.text).”.clblue);
Edit1.clear;
Edit2.clear;
i=i +1;
j=j+1;
End;
Prosedure TForm1.BitBtn2Click(sender:Tobject);
Begin
Series1.clear;
End;
Prosedure TForm1.BitBtn3Click(sender:Tobject);
Begin
fa:=createobject(„Excel.application‟);
fa.visible:=true;
fa.workbook.add;
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
74
fa.workbook[1].worksheets[„kirim‟];
g.cells[1,1]:=‟Nomor‟;
g.cells[1,2]:=‟Data X‟;
g.cells[1,3]:=‟Data Y‟;
for i:=2 to j+1 do
begin
g.cells[i,1]:=formatfloat(“,i-1);
end;
for i:=2 to j+1 do
begin
g.cells[i,2]:=formatfloat(“,datax[i]);
end;
for i:=2 to j+2 do
begin
g.cells[i,3]:=formatfloat(„#0.##‟,datay[i]);
end;
end;
procedure TForm1.FormCreate(Sender:TObject);
begin
i:=2;
j:=2;
end;
procedure TForm1.FormDestroy(Sender:TObject);
begin
if not varisempty(fa) then
begin
fa.displayalert:=true;
fa.quit;
end;
end;
end;
penjelasan:
Pertama, kita masukkan data ke edit1 dan edit2,
Kedua data tersebut disimpan pada array i dan j,
Tampilkan data ke dalam grafik,
Tambah 1 , pada i dan j untuk menaikkan array, sehingga datanya tidak bertumpuk,
Data yang terkumpul kemudian dikirim ke Excel,
INTERFACE DARI DELPHI
CPORT-3.0
Sekarang kita bahas yang diluar modul diatas, yakni akses serial untuk Delphi. Jadi
ceritanya gini… dulu jamannya windows98 untuk mengakses port serial bisa langsung,
tapi sekarang ini (XP,Vista,etc) dah diblokir, jadi harus pake tambahan driver lagi. Saya
Nabi Shallallahu ‘alaihi wa sallam pun mengatakan bahwa salah satu dari amalan yg tidak akan putus pahalanya dari seorang muslim yg telah meninggal sekalipun adalah ilmu yg bermanfaat.
75
pake cport-3.0 (Freeware) yang bikinnya Dejan Crnila, untuk pelatihan ini sudah saya
sertakan. Untuk Delphi versi 8, dll. versi cport-nya beda lagi.
Cara Instal
Pindahin dulu semua file Comport library yang da di C.
Ini dari blog http://purnawarmanmusa.blogsome.com/2007/03/
1. Klik File Open
2. Cari direktory dimana cport-3.0 di extract
3. Pilih file CPortLib6.dpk (yang warna icon-nya nyolok warna merah)
4. Setelah kebuka tekan tekan Compile (jangan Install) karena ini module utk Runtime-
Library
5. Setelah OK, File-Close All lagi
6. Buka file DsgnCPort6.dpk, tekan Compile, setelah ok tekan Instal
7. Konfirmasi komponen telah di Install akan muncul
8. Close All lagi
9. Selanjutnya mendaftarkan cport library ke Search-Path
10. Klik menu Tools-Environtment Options
11. Aktifkan tab Library
12. Klik tombol „...‟ di bagian Library Path
13. Setelah muncul Directories dialog, cari lokasi dimana Cport Lib tadi di extract
14. Setelah ketemu klik tombo Add
15. Tekan Ok, dan OK lagi utk nutup Environtment Options
16. Selesai, komponen siap digunakan
Tapi saya ubah dikit, soalnya kita pake cport3.0 jadi library nya yang 6.
Cara Pake Kalau sudah terinstal nanti komponennya nambah kayak gini
Pilih yang , kita pelajari yang ini yak.
Double klik di ntar bakal muncul gambar
disebelah, tinggal setting deh. Biar ga bingung
dang a cape mikir lagi, ikutin aja setingan
disebelah.
“ Allah itu senantiasa menolong hambanya selagi hambanya itu menolong saudaranya.” ( HR. As Shaikhan ).
76
coba dilihat Object inspectornya. Di Properties ada
Baudrate (samakan dengan baudrate pada mikro),
Connected, kalau mau konek terus (serial portnya) ubah
jadi True, tapi kalau mau dibuka tutp dari program
Connected = False.
Sekarang lihat event, double klik di sebelah OnRxChar,
dari sini kita baru bisa bikin programnya