Avr Kontri Db a5

53
 1 Apa Isi Buku ini? Pendahuluan................................................................................................... ...............2 Memperkenalkan AVR Kodebo.....................................................................................3 Keunggulan KODEBO..................................................................................................3 Konfigurasi hardware KODEBO...................................................................................4 Fitur KODEBO..............................................................................................................6 Sekilas bahasa CAVR....................................................................................................7 Bermain dan Belajar Menggunakan Kodebo...............................................................18 DAFTAR PUSTAKA....... ......................................................................... ..................44  

Transcript of Avr Kontri Db a5

Page 1: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 1/53

 

1

Apa Isi Buku ini?

Pendahuluan................................................................................................... ...............2

Memperkenalkan AVR Kodebo.....................................................................................3

Keunggulan KODEBO..................................................................................................3

Konfigurasi hardware KODEBO...................................................................................4

Fitur KODEBO..............................................................................................................6

Sekilas bahasa CAVR....................................................................................................7

Bermain dan Belajar Menggunakan Kodebo...............................................................18

DAFTAR PUSTAKA..................................................................................................44 

Page 2: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 2/53

 

2

Memperkenalkan AVR Kodebo

Pendahuluan

Sudah lama teknologi digital muncul di bumi. Setelah teknologi digital hadir,

menyusul juga teknologi mikroprosesor, mikrokomputer, PLC, DCS, SCADA, dll. Di antara

perangkat embedded tersebut masih ada suatu perangkat yang sangat popular. Perangkat ini

biasanya digunakan untuk pengatur perangakat elektronika lain. Sangat cocok digunakan untuk 

pembuatan prototipe suatu alat elektronik karena penggunaannya yang mudah, harganya yang

relatif murah, dan bentuknya yang simple dan praktis. Nah, mungkin untuk alasan tersebut

hadirlah teknologi mikrokontroler.

Mikrokontroler, nama yang mungkin sering kita dengar. Apalagi bagi mereka yang

sedang menggeluti bidang elektronika atau pemrograman. Sekarang apa sih mikrokontroler

itu? Apa gunanya? Kapan perlu digunakan? Dan bagaimana menggunakannya?

Mikrokontroler merupakan perangkat elektronika yang dapat digunakan untuk 

mengendalikan perangkat elektronika lain dengan cara diprogram. Pemrograman ini dapat

dilakukan dengan banyak pemrogaman yang telah mendukungnya. Misalnya, Assembly, Basic,

C/C++, Pascal dsb.

Mikrokontroler type CISC clan RISC saat ini berkembang pesat. Hal ini didasarkan

pada arsitektur processor dan set instruksinya. Tipe AVR (Alfand Vegard's Risc processor)

merupakan jenis RISC, yang hampir semua instruksi dikerjakan 1 siklus, sehingga lebih cepat

waktu eksekusinya.

Page 3: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 3/53

 

3

Memperkenalkan AVR Kodebo

AVR Kodebo merupakan Development board dengan CPU Mikrokontroler

ATMega16/32/8535. Development board ini terdiri dari 32 PORT I/O bebas, dengan beberapa

perangkat I/O yang langsung terintegrasi dengan PORT Mikrokontroler. Dengan demikian user

dapat menggunakan perangkat I/O langsung dengan cara mengatur DIP Switch ke Posisi ON.

Kodebo didesain sedemikian rupa menarik dengan komponen berkualitas dan

tentunya sesuai kebutuhan para pengguna mikrokontroler. Mereka yang suka robotik, atau

yang senang bereksperimen dengan mikrokontroler. Mungkin anda yang sedang riset atau

mengerjakan sebuah prototipe sistem otomasi. Untuk beginner yang sedang belajar, atau untuk 

master yang sedang melakukan pelatihan. Untuk alasan-alasan inilah hadir Kodebo yang

sungguh istimewa.

Lalu Apa Keunggulan Kodebo

1.  Menggunakan Mikrokontroler jenis RISC (AVR)

2.  Mendukung Mikrokontroler Atmega16/32/8535

3.  Terdapat 32 saluran/channel I/O

4.  Mempunyai 8 Channel ADC

5.  Mendukung Banyak Bahasa Pemrograman

(Assembly/BASCOM/CVAVR/WinAVR)

6.  3 buah timer / counter

7.  Osilator internal

8.  Flash PEROM 16 Kb

9.  EEPROM 512 byte

Page 4: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 4/53

 

4

10.  SRAM 512 byte

11.  Interupsi Eksternal dan Internal

12.  Port USART untuk komunikasi serial

13.  Terdapat perangkat I/O terintegrasi seperti,

a.  push button sebagai input

b.  LCD 16x2 karakter

c.  8 LED indikator

d.  L298N Driver Motor

e.  Relay output

f.  TSOP sebagai receiver infrared communication 

g.  dan sebagainya

Konfigurasi Hardware Kodebo

Kodebo dengan ATMega16 sebagai otaknya memiliki konfigurasi pin 40 kaki yang

terdiri dari masing-masing pin I/O (32 pin) serta mempunyai fungsi khusus tergantung

penggunaannya.

Tabel 1. Konfigurasi Pin ATMega16

No  Nama  Fungsi 

1 PBO XCK/TO) Port B0 / Counter 0 / clock eksternal untuk USART

(XCK)

2 PB1 (T1) Port B1 / Counter 1

3 PB2 (INT2/AIN0) Port B2 / Input (+) Analog Komparator (AIN0) daninterupsi eksternal2 INT2

4 PB3 (OC0/AIN1) Port B3 / Input (-) Analog Komparator (AIN1) dan

output PWM0

5 PB4 (SS) Port B4 / SPI Slave Select Input (SS)

Page 5: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 5/53

 

5

6 PB5 (MOSl) Port BS / SPI bus Master Out Slave In

7 PB6 (MISO) Port B6 / SPI bus Master In Slave Out

8 PB7 (SCK) Port B7 / sinyal clock serial SPI

9 RESET Reset mikrokontroler

10 VCC Catu daya (+)

11 GND Sinyal ground terhadap catu daya

13-

Dec

XTAL2-XTAL1 Sinyal input clock eksternal (kristal)

14 PD0 (RXD) Port D0 / Penerima data serial

15 PD1 (TXD) Port D1 / Pengirim data serial

16 PD2 (INT0) Port D2 / Interupsi eksternal 0

17 PD3 (INT1) Port D3 / Interupsi eksternal 1

18 PD4 (OC1B) Port D4 / Pembanding Timer-Counter 1 (Output PWM

19 PD5 (OC1A) Port D5 / Output PWM 1A

20 PD6 (ICP1) Port D6 / Timer-Counter 1 input

21 PD7 (OC2) Port D7 / Output PWM 2

22 PC0 (SCL) Port C0 / Serial bus clock line

23 PC1 (SDA) Port C1 / Serial bus data input-output

24-27 PC2 – PC5 Port C2 – C5

28 PC6 (TOSC1) Port C6 / Timer osilator 1

29 PC7 (TOSC2) Port C7 / Timer osilator 2

30 AVCC Tegangan ADC

31 GND Sinyal ground ADC

32 AREFF Tegangan referensi ADC

33-40 PA0 – PA7 Port A0-PortA7 à input untuk ADC (8 channel :

ADCO-ADC7)

Page 6: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 6/53

 

6

Inilah fitur Kodebo,

1.  Support ATMega16/32/8535 (ATMega16 Included)

2.  External Crystal 12Mhz

3.  LCD 16x2

4.  8 LED indicator

5.  1x8 Pin header (support as servo connector)

6.  L298 Motor Driver

7.  Relay 5V

8.  TSOP (for remote Control)

9.  LM35 Temperature Sensor

10.  LDR Light Sensor

11.  Potensiometer (for ADC Test)

12.  1 reset button

13.  4 button

14.  3 Dipswitch

15.  DC connector for Adaptor

16.  Tblock connector

17.  2x8 Pin header

18.  ISP Connector

Sekilas tentang CVAVR

CVAVR adalah bahasa pemrograman yang menggunakan compiler C dilengkapi

lingkungan IDE (Integrated Development Environment) dan pemrogram otomatis yang

Page 7: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 7/53

 

7

didesain untuk mikrokontroller keluarga AVR. CVAVR berjalan pada sistem operasi windows

95,98,NT 4, 2000 dan windows XP.

Lingkungan IDE dilengkapi dengan programmer untuk AVR lewat ISP yang

otomatis akan mentransfer file *.hex ke memori mikrokontroller setelah proses kompilasi file

*.c berhasil dilakukan. Programmer ISP pada CVAVR ini didesain support untuk : kit modul

STK500, Kanda System STK200+/300, Dontronics DT006, Vogel Elektronik VTEC-ISP,

Futurlec JRAVR dan MicroTronics ATCPU /Mega2000 Development Board. Selain itu juga

dilengkapi program terminal serial untuk mendebug/melihat hasil kompilasi program lewat

serial port microcontroller.

Fasilitas lain adalah library pada CVAVR didedikasikan untuk:

1.  Modul LCD alpha numerik 

2.  I2C bus Philips

3.  Sensor suhu LM75 National Semiconductor

4.  SPI

5.  Power Management

6.  Delay

7.  MMC

8.  dll

Fasilitas menarik lainnya adalah dilengkapi CodeWizardAVR Automatic Program

Generator yang membimbing kita dalam menulis sintaks program. Fungsi-fungsi yang

didukung oleh codeWizardAVR ini adalah:

1.  setup akses memori eksternal

2.  identifikasi sumber reset pada chip

3.  inisialisasi port input/output

Page 8: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 8/53

 

8

4.  inisialisasi interrupt eksternal

5.  inisialisasi timer/counter

6.  inisialisasi watchdog timer

7.  inisialisasi UART dan interrupt serial

8.  inisialisasi komparator analog

9.  inisialisasi ADC

10.  inisialisasi interfacing SPI

11.  inisialisasi bus I2C

12.  inisialisasi bus 1Wire dan sensor suhu DS1820/DS18S20

13.  inisialisasi modul LCD.

Kaidah-kaidah penulisan bahasa C pada CVAVR

Penulisan program menggunakan CVAVR harus mengikuti kaidah-kaidah yang

diterapkan oleh bahasa pemrograman C karena compiler CVAVR dikembangkan

menggunakan bahasa C. Kaidah-kaidah pemrograman secara garis besar dapat diuraikan

sebagai berikut:

a. Struktur penulisan program 

 

#include < [library1.h] > // Opsional

#include < [library2.h] > // Opsional

#define [nama1] [nilai] ; // Opsional

#define [nama2] [nilai] ; // Opsional

[global variables] // Opsional

[functions] // Opsional

Page 9: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 9/53

 

9

void main(void) // Program Utama

{

[Deklarasi local variable/constant]

[Isi Program Utama]

}

b. Tipe data 

char : 1 byte ( -128 s/d 127 )

unsigned char : 1 byte ( 0 s/d 255 )

int : 2 byte ( -32768 s/d 32767 )

unsigned int : 2 byte ( 0 s/d 65535 )

long : 4 byte ( -2147483648 s/d 2147483647 )

unsigned long : 4 byte ( 0 s/d 4294967295 )

float : bilangan desimal

array : kumpulan data-data yang sama tipenya.

c. Deklarasi variabel & konstanta 

Variabel adalah memori penyimpanan data yang nilainya dapat diubah-ubah.

Penulisan : [tipe data] [nama] = [nilai] ;

Konstanta adalah memori penyimpanan data yang nilainya tidak dapat diubah.

Penulisan : const [nama] = [nilai] ;

Page 10: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 10/53

 

10

Tambahan:

Global variabel/konstanta yang dapat diakses di seluruh bagian program.

Local variabel/konstanta yang hanya dapat diakses oleh fungsi tempat dideklarasikannya.

d. Statement 

Statement adalah setiap operasi dalam pemrograman, harus diakhiri dengan [ ; ] atau [ } ].

Statement tidak akan dieksekusi bila diawali dengan tanda [ // ] untuk satu baris. Lebih

dari 1 baris gunakan pasangan [ /* ] dan [ */ ]. Statement yang tidak dieksekusi disebut

 juga comments / komentar.

Contoh:

suhu=adc/255*100; //contoh rumus perhitungan suhu

e. Function 

Function adalah bagian program yang dapat dipanggil oleh program utama.

Penulisan :

[tipe data hasil] [nama function]([tipe data input 1],[tipe data input 2])

{

[statement] ;

}

Page 11: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 11/53

 

11

f. Conditional statement dan looping 

if else : digunakan untuk penyeleksian kondisi

if ( [persyaratan] ) {

[statement1];

[statement2];

}

else {

[statement3];

[statement4];

}

for : digunakan untuk looping dengan jumlah yang sudah diketahui

for ( [nilai awal] ; [persyaratan] ; [operasi nilai] ) {

[statement1];

[statement2];

}

while : digunakan untuk looping jika dan salama memenuhi syarat tertentu 

while ( [persyaratan] ) {

[statement1];

[statement2];

}

Page 12: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 12/53

 

12

do while : digunakan untuk looping jika dan salama memenuhi syarat tertentu, namun

min 1 kali

do {

[statement1];

[statement2];

}

while ( [persyaratan] )

switch case : digunakan untuk seleksi dengan banyak kondisi

switch ( [nama variabel] ) {

case [nilai1]: [statement];

break;

case [nilai2]: [statement];

break;

}

g. Operasi logika dan biner 

Logika

AND :&&

NOT : !

OR : ||

Biner

AND : &

Page 13: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 13/53

 

13

OR : |

XOR : ^

Shift right: >>

Shift left : <<

Komplemen : ~

h. Operasi relasional (perbandingan) 

Sama dengan : ==

Tidak sama dengan : !=

Lebih besar : >

Lebih besar sama dengan : >=

Lebih kecil : <

Lebih kecil sama dengan : <=

i. Operasi aritmatika 

+ , - , * , / : tambah,kurang,kali,bagi

+= , -= , *= , /= : nilai di sebelah kiri operator di tambah/kurang/kali/bagi dengan nilai di

sebelah kanan operator

% : sisa bagi

++ , -- : tambah satu (increment) , kurang satu (decrement)

Contoh :

a = 5 * 6 + 2 / 2 -1 ; maka nilai a adalah 30

a *= 5 ; jika nilai awal a adalah 30, maka nilai a = 30x5 = 150.

a += 3 ; jika nilai awal a adalah 30, maka nilai a = 30+5 = 33.

Page 14: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 14/53

 

14

a++ ; jika nilai awal a adalah 5 maka nilai a = a+1 = 6.

a-- ; jika nilai awal a adalah 5 maka nilai a = a-1 = 4.

Memulai CodeVisionAVR

Untuk memulai suatu projek maka pilih saja pada menu file-> New maka akan muncul gambar

berikut,

Pilihlah Project dan klik tombol OK

Selajutnya Anda dapat memilih apakah ingin menggunakan CodeWizardAVR atau

tidak. CodeWizardAVR ini berfungsi untuk membuat atau menghasilkan listing program

sesuai settingan yang Anda inginkan.

Page 15: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 15/53

 

15

Jika Anda memilih menggunakan CodeWizardAVR maka akan muncul tampilan seperti

berikut:

Nah, pada gambar tersebut ditunjukkan bahwa chip yang digunakan adalah

ATMega16, dan clock 12MHz sesuai dengan fitur yang terdapat pada Kodebo. Settingan

selanjutnya juga dapat diatur dengan menggunakan CodeWizardAVR ini. Misalnya USART,

Analog Comparator, ADC, SPI, I2C dan masih banyak lagi.

Setelah selesai melakukan pengaturan dengan CodeWizarAVR maka klik menu

“generate file, save and exit”. Kemudian beri nama file dan simpan. 

Page 16: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 16/53

 

16

Setelah melakukan beberapa langkah tadi akhirnya file yang dibuat dengan

CodeWizardAVR tadi siap juga untuk di-compile, tentunya dengan penambahan program yang

anda inginkan. Berikut tampilan CVAVR yang menampilkan file ekstensi .c , library yang

digunakan, fungsi yang ada pada program dan tentunya juga menampilkan menu serta seluruh

fitur CodeVisionAVR.

Page 17: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 17/53

 

17

Jika program sudah selesai Anda dapat mencoba meng-compile nya dengan

menekan tombol compile atau shift+f9. Jika tidak ada kesalahan maka akan tampil pesan “no

error” seperti gambar berikut:

Page 18: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 18/53

 

18

Bermain dan Belajar Menggunakan Kodebo 

Menghidupkan LED

Berikut ini merupakan listing untuk menghidupkan LED sistem flip-flop. LED

dihubungkan dengan PORTC Modul Kodebo. Saklar / dip switch dibiarkan pada kondisi OFF

saja.

#include <mega16.h>

#include <delay.h>

void main(void)

{

PORTC=0x00;

DDRC=0xFF;

Page 19: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 19/53

 

19

while (1)

{

PORTC=0xff;

delay_ms(500);

PORTC=0x00;

delay_ms(500);

};

}

Contoh lain,

#include <mega16.h>

#include <delay.h>

void main(void)

{

DDRC = 0xFF; // PORTC digunakan sebagai output (DDR dibuat high)

while (1)

{

for (x=1;x<128;x*=2)

{

PORTC = x; // Nilai x dikeluarkan ke PORTC

delay_ms(500);

}

Page 20: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 20/53

 

20

for (i=256; i>=1;i=i/2)

{

PORTC= i; // Nilai i dikeluarkan ke PORTC

delay_ms(500);

}

}

}

Menghidupkan LED dengan tombol pengaturan

Tombol pengaturan yang digunakan pada kali ini adalah menggunakan tombol push

button (micro switch). Tombol yang dimaksud adalah 4 buah tombol yang ada di samping lcd

pada Modul Kodebo. Tidak perlu susah-susah, program pada contoh ini berfungsi untuk 

menghidupkan LED dengan Pola tertentu sesuai tombol yang ditekan.

#include <mega16.h>

#include <delay.h>

#define PINA.0 tombol1

#define PINA.1 tombol2

#define PINA.2 tombol3

#define PINA.3 tombol4

Void pola1(void)

{

PORTC=0xFF;

delay_ms(500);

Page 21: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 21/53

 

21

PORTC=0x00;

delay_ms(500);

}

Void pola2(void)

{

PORTC=0b10101010;

delay_ms(500);

PORTC=0b01010101;

delay_ms(500);

}

Void pola3(void)

{

PORTC=0b11100111;

delay_ms(500);

PORTC=0b11011011;

delay_ms(500);

PORTC=0b10111101;

delay_ms(500);

PORTC=0b01111110;

delay_ms(500);

PORTC=0b10111101;

delay_ms(500);

Page 22: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 22/53

 

22

PORTC=0b11011011;

delay_ms(500);

PORTC=0b11100111;

}

Void pola4(void)

{

for (x=1;x<128;x*=2)

{

PORTC = x; // Nilai x dikeluarkan ke PORTC

delay_ms(500);

}

for (i=256; i>=1;i=i/2)

{

PORTC= i; // Nilai i dikeluarkan ke PORTC

delay_ms(500);

}

}

void main(void)

{

DDRC = 0xFF; // PORTC digunakan sebagai output (DDR dibuat high)

PORTC=0xFF;

Page 23: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 23/53

 

23

DDRA=0x00;

PORTA=0x0F;

while (1)

{

if (tombol1==0) pola=1;

else if (tombol2==0) pola=2;

else if (tombol3==0) pola=3;

else if (tombol4==0) pola=4;

switch (pola)

{

case 1; pola1();

case 2; pola2();

case 3; pola3();

case 4; pola4();

}

}

}

Pada program tersebut LED akan menyala sesuai dengan tombol yang ditekan.

Tetapi pola LED tidak akan langsung berganti saat mikrokontroler sedang menjalankan

program pada pola yang dipilih. Untuk itu penekanan tombol mungkin butuh waktu yang agak 

lama dengan tujuan menunggu saat mikrokontroler keluar dari fungsi pola yang sedang

dijalankan, kemudian mikrokontroler mengecek tombol yang sedang ditekan tadi. Pada contoh

selanjutnya akan dijelaskan interupsi yang dapat memberikan solusi terhadap hal ini.

Page 24: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 24/53

 

24

Menampilkan karakter LCD

Menampilkan sebuah karakter, string atau kalimat bukanlah hal yang susah. Dengan

menggunakan bahasa C akan terasa lebih mudah, intruksi-intruksinya lebih mudah dipahami

dari bahasa mesin (assembly). Pada Software CodeVisionAVR juga sudah disediakan sebuah

library yang memudahkan kita untuk berkreasi dengan sebuah LCD.

Pada Board Kodebo sudah tersedia LCD 16x2, Anda tinggal mengubah posisi dip

switch yang ada pada PORTC. Untuk memulai projek Anda, pastikan dip switch PORTC pada

posisi ON.

#include <mega16.h>

#include <lcd.h>

#include <delay.h>

 // Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

void main(void)

{

lcd_init(16);

while (1)

{

lcd_clear();

Page 25: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 25/53

 

25

lcd_gotoxy(0,0);

lcd_putchar(" KONTRI ");

lcd_gotoxy(0,1);

lcd_putchar("ELECTRONICS");

delay_ms(100);

}

}

Menampilkan Nilai pada LCD

Untuk menampilkan suatu nilai ke LCD digunakan library stdio.h. Sebelum

ditampilkan ke LCD nilai yang akan ditampilkan perlu diubah ke string (character) dan

ditampung dalam buffer. Perintah yang digunakan adalah sprintf yang penggunaannya dapat

dilihat langsung pada listing berikut:

#include <mega16.h>

#include <lcd.h>

#include <stdio.h>

#include <delay.h>

 //Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

Page 26: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 26/53

 

26

void main(void)

{

char buff[20];

unsigned char a=10, b=101;

lcd_init(16);

while (1)

{

lcd_clear();

sprintf(buff,”nilai a=%d ”,a); 

lcd_gotoxy(0,0);

lcd_puts(buff);

sprintf(buff,”nilai b=%d ”,b); 

lcd_gotoxy(0,1);

lcd_puts(buff);

delay_ms(100);

}

}

Aplikasi ADC dengan Kodebo

ADC (Analog to Digital Converter) merupakan alat yang berfungsi mengubah

sinyal analog menjadi sinyal digital. Dalam akuisisi data ADC biasanya berperan penting.

Banyak sensor yang outputnya masih berupa sinyal analog untuk itu perlu diubah ke dalam

bentuk digital, agar sinyal tersebut dapat diproses secara digital oleh mikrokontroler. Pada seri

Page 27: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 27/53

 

27

AVR mikrokontroler sudah terdapat fitur ADC. Jadi Anda tidak perlu susah-susah

menambahkan ADC.

Pada AVR Kodebo sudah terdapat input analog berupa tegangan dari potensiometer,

sensor suhu LM35, dan sensor cahaya yaitu LDR. Untuk memahami konsep ADC dapat dilihat

listing berikut ini. Jangan lupa untuk memposisikan dip switch PINA pada posisi ON.

Kemudian aturlah PORTC sebagaimana pada pengaturan penggunaan LCD yang telah

dijelaskan sebelumnya.

Mengkonversi Nilai ADC sensor suhu LM35 ke Celcius

Nilai suhu yang didapat dari sensor LM35 pastinya dapat bernilai pecahan. Untuk 

itu diperlukan variabel yang dapat menampun nilai pecahan yaitu float. Tidak cukup di situ,

untuk menampilkan nilai pecahan tersebut ke LCD juga diperlukan pengaturan pada menu

“Configure the Project”. Pengaturannya adalah seperti ditampilkan pada gambar berikut:

Page 28: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 28/53

 

28

#include <mega16.h>

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

#include <lcd.h>

#include <stdio.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x40

char buff[20];

float suhu=0;

typedef unsigned char byte;

flash byte char0[8]={

0b0000111,

0b0000101,

0b0000111,

0b0000000,

0b0000000,

0b0000000,

0b0000000,

0b0000000};

Page 29: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 29/53

 

29

 /* function used to define user characters */ 

void define_char(byte flash *pc,byte char_code)

{

byte i,a;

a=(char_code<<3) | 0x40;

for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);

}

 // 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;

}

Page 30: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 30/53

 

30

float baca_suhu(void)

{

int data_adc=0;

float data_suhu=0;

data_adc=read_adc(1);

data_suhu=(data_adc*5.0/1023)*100;

return data_suhu;

}

void main(void)

{

PORTA=0x00;

DDRA=0x00;

 // LCD module initialization

lcd_init(16);

 // ADC initialization

 // ADC Clock frequency: 187,500 kHz

 // ADC Voltage Reference: AVCC pin

 // ADC Auto Trigger Source: None

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x86;

Page 31: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 31/53

 

31

define_char(char0,0);

while (1)

{

suhu=baca_suhu();

hitung_pid();

sprintf(buff,"suhu=%0.2f",suhu);

lcd_gotoxy(0,0);

lcd_puts(buff); lcd_putchar(0); lcd_putsf("C");

};

}

Mengenal Driver Motor L298D

L298D merupakan IC driver motor yang di dalamnya terdapat dua kanal. Setiap

kanalnya mempunyai 2 input logic, 1 input enable (dapat digunakan untuk input pwm), dan

output yang perlu dirangkai dengan dioda (H-Bridge) sebelum masuk ke beban/motor. Adapun

tabel kebenaran IC L298D adalah sebagai berikut:

#include <mega16.h>

#include <stdio.h>

#include <delay.h>

#define dir1 PORTD.6

#define dir2 PORTD.7

Page 32: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 32/53

 

32

#define tbl_run PINA.0

#define tbl_cw PINA.1

#define tbl_ccw PINA.2

#define tbl_stop PINA.3

void kanan(void)

{

dir1=0;

dir2=1;

PORTD.4=1;

}

void kiri(void)

{

dir1=1;

dir2=0;

PORTD.4=1;

}

void jalan(void)

{

PORTD.4=1;

}

Page 33: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 33/53

 

33

void berhenti(void)

{

PORTD.4=0;

}

void main(void)

{

DDRA=0x00;

PORTA=0x0F;

DDRD=0xF0;

PORTD=0x00;

delay_ms(100);

while (1)

{

if (!tbl_run) jalan();

else if (!tbl_cw) kanan();

else if (!tbl_ccw) kiri();

else if (!tbl_stop) berhenti();

}

}

Page 34: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 34/53

 

34

Mengendalikan Relay 5V

Dalam dunia elektronika, relay dikenal sebagai komponen yang dapat

mengimplementasikan logika switching. Sebelum tahun 70an, relay merupakan “otak” dari

rangkaian pengendali. Baru setelah itu muncul PLC yang mulai menggantikan posisi relay.

 Relay yang paling sederhana ialah relay elektromekanis yang memberikan pergerakan mekanis

saat mendapatkan energi listrik. Secara sederhana relay elektromekanis ini didefinisikan

sebagai berikut :

-Alat yang menggunakan gaya elektromagnetik untuk menutup (atau membuka) kontak saklar.

-Saklar yang digerakkan (secara mekanis) oleh daya/energi listrik.

Nah, melihat pentingnya sebuah relay dalam dunia elektronika maka AVR Kodebo

menghadirkan sebuah relay 5V. Relay tersebut dikendalikan oleh sebuah transistor NPN

C9013. Jadi untuk mengaktifkan relay diperlukan tegangan 5V atau logika 1 pada

mikrokontroler. Berikut ini diberikan contoh pengendalian relay dengan 2 buah tombol yang

berfungsi menghidupkan dan mematikan relay.

Mengenal Interupsi

Interupsi adalah kondisi yang memaksa mikrokontroler menghentikan sementara

eksekusi program utama untuk mengeksekusi rutin interrupt tertentu / Interrupt Service

Routine (ISR) Setelah melaksanakan ISR secara lengkap, maka mikrokontroler akan kembali

melanjutkan eksekusi program utama yang tadi ditinggalkan. Pada mikrokontroler jenis AVR

terdapat 21 sumber interupsi, di antaranya seperti ditunjukkan tabel berikut:

Page 35: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 35/53

 

35

Pada contoh sederhana, akan diperagakan bagaimana mengaktifkan interupsi

eksternal. dapat diamati listing berikut.

-Membuat Pewaktu berbasis timer 1 detik 

Mengambil data remote TV

Perlu diketahui remote TV mempunyai protocol yang berbeda. Misalnya Philips

dengan sony akan saling berbeda protokolnya. Remote yang digunakan pada aplikasi ini adalah

Page 36: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 36/53

 

36

 jenis Sony. Jadi jika Anda menggunakan remote Philips, program tidak akan bekerja. Sebagai

penerima telah tersedia TSOP1738 pada Modul AVR Kodebo. Sensor tersebut bekerja pada

frekuensi 38Khz.

Pulsa yang digunakan pada protocol sony (SIRF) dapat dijelaskan pada gambar di bawah ini:

Dengan melihat gambar tersebut kita tahu satu frame data yang dikirim oleh remot

terdiri dari 1 bit start, 7 bit command, dan 5 bit address. Command menjelaskan tombol yang

ditekan, sedangkan address menerangkan device yang digunakan. Adapun untuk kejelasan

dapat dilihat pada tabel berikut:

Page 37: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 37/53

 

37

Tabel Address Remot Sony

Address Device

1 TV

2 VCR 1

3 VCR 2

6 Laser Disc Unit

12 Surround Sound

16 Cassette deck / Tuner

17 CD Player

18 Equalizer

Tabel Command Remot Sony

Command Function

0 Digit key 1

1 Digit key 2

2 Digit key 3

3 Digit key 4

4 Digit key 5

5 Digit key 6

6 Digit key 7

7 Digit key 88 Digit key 9

9 Digit key 0

16 Channel +

17 Channel -

18 Volume +

19 Volume -

20 Mute

Page 38: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 38/53

 

38

21 Power

22 Reset

23 Audio Mode

24 Contrast +

25 Contrast -

26 Colour +

27 Colour -

30 Brightness +

31 Brightness -

38 Balance Left

39 Balance Right

47 Standby

Listing Program Aplikasi Remot Sony

#include <mega16.h>

#include <stdio.h>

#include <delay.h>

 // Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

#include <lcd.h>

char lcd_buffer[30];

#define ENABLE_INT0 GICR |= 0x40

Page 39: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 39/53

 

39

#define DISABLE_INT0 GICR &= ~0x40

#define INPUT DDRD.2=0

unsigned int read_IR (void);

unsigned char count, code, address;

 // External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void)

{

unsigned int IR_input;

DISABLE_INT0; //matikan interupt

INPUT; //sebagai input

TCNT0=0; //kosongkan nilai timer/counter0

while(PIND.2==1); //ulangi terus sampai PIND.2=0

count = TCNT0; //ambil nilai Timer

if(count < 24) //to verify start pulse (2.4 ms long)

{

delay_ms(20);

ENABLE_INT0;

return; //kembali keprogram utama

}

IR_input = read_IR (); //ke fungsi read_IR

code = (unsigned char) ((IR_input & 0xff00) >> 8);

Page 40: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 40/53

 

40

address = (unsigned char) (IR_input & 0x00ff);

ENABLE_INT0; //sebagai interupt lagi

}

unsigned int read_IR (void)

{

unsigned char pulseCount=0, codeIR = 0, addressIR = 0, timerCount;

unsigned int IR_input;

while(pulseCount < 6)

{

while(PIND.2==0); //stay here until PIND.2!=0

TCNT0 = 0;

while(PIND.2==1); //stay here if PIND.2=1

pulseCount++;

timerCount = TCNT0;

if(timerCount > 8) //8*0.0853=0.6824ms

codeIR = codeIR | (1 << (pulseCount-1));

else

codeIR = codeIR & ~(1 << (pulseCount-1));

}

pulseCount = 0;

while(pulseCount < 5)

Page 41: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 41/53

 

41

{

while(PIND.2==0); //stay here until PIND.2!=0

TCNT0 = 0;

while(PIND.2==1); //stay here if PIND.2=1

pulseCount++;

timerCount = TCNT0;

if(timerCount > 8)

addressIR = addressIR | (1 << (pulseCount-1));

else

addressIR = addressIR & ~(1 << (pulseCount-1));

}

IR_input = (((unsigned int)codeIR) << 8) | addressIR;

return(IR_input);

}

void port_init()

{

DDRD = 0x00;

}

 //timer0 init

void timer0_init()

{

 //8-bit timer for measuring delay between IR pulses

Page 42: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 42/53

 

42

TCCR0 = 0x05; //CLK / 1024 0.0853ms

TCNT0 = 0; //reset the timer

}

void int0_init()

{

MCUCR=0x03; //transisi naik 

ENABLE_INT0;

}

void main(void)

{

port_init();

timer0_init();

int0_init();

 // Global enable interrupts

#asm("sei")

 // LCD module initialization

lcd_init(16);

while(1)

{

lcd_clear();

sprintf(lcd_buffer,"code%i address%i",code,address);

lcd_puts(lcd_buffer);

Page 43: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 43/53

 

43

delay_ms(50);

};

}

Mengakses Keypad Matrix 4x4

Pada bab ini Anda harus menggabungkan listing berikut dengan program yang

sudah anda sebelumnya. Karena program berikut hanya berisi fungsi yang dapat digunakan

untuk mengakses fungsi keypad. Ada baiknya jika Anda menggabungkan fungsi keypad ini

dengan progarm yang berfungsi untuk menampilkan nilai keypad yang sedang ditekan.

#define kolom PORTA

#define baris PINA

unsigned char get_keypad()

{

unsigned char data, i, j;

Page 44: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 44/53

 

44

data=16;

for (j=0; j<4; j++)

{

kolom=0xff;

kolom&=~(1<<j);

delay_ms(5);

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

{

if(baris &(1<<i+4))

{

data=i+(4*j)

delay_ms(50);

return data;

}

}

}

return data;

}

Aplikasi Seven Segment dan RTC DS1307

DS1307 merupakan chip atau ic RTC (Real Time Clock) yang dapat difungsikan sebagai jam

digital. Untuk megakses informasi jam, menit, detik, tanggal, bulan, dansebagainya perlu

digunakan sistem komunikasi i2c. Sistem komunikasi ini mengijinkan perangkat

Page 45: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 45/53

 

45

master(mikrokontroler) untuk mengakses slave (DS1307) melalui dua jalur bus yaitu SDA dan

SCL.

Seven Segment yaitu papan yang terdiri dari 7 segmen membentuk angka dan dapat menyala

dengan adanya beberapa buah LED di dalamnya. Kali ini Anda dapat membuat jam digital

sendiri dengan adanya modul AVR KODEBO. Hanya dengan mengatur koneksi shift register

IC 4094 yang ada di blok seven segmen modul AVR KODEBO. Di samping itu Anda juga

harus mengatur koneksi modul RTC dengan port mikrokontroler. Untuk contoh program dapat

dilihat pada tulisan berikut:

Program Jam Digital

#include <mega16.h>

#asm

.equ __i2c_port=0x18 ;PORTB

.equ __sda_bit=6

.equ __scl_bit=7

#endasm

#include <i2c.h>

#include <ds1307.h>

#include <delay.h>

#define on 1

#define posisi_alarm 1

#define posisi_jam 0

#define sw_setting PIND.2

Page 46: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 46/53

 

46

#define sw_alarm PIND.3

#define tombol_set PIND.4

#define tombol_down PIND.5

#define tombol_up PIND.6

#define shift_register_hi PORTB|=(1<<2)

#define shift_register_lo PORTB&=~(1<<2)

#define clock_register_hi PORTB|=(1<<1)

#define clock_register_lo PORTB&=~(1<<1)

#define serial_register_hi PORTB|=(1<<0)

#define serial_register_lo PORTB&=~(1<<0)

unsigned char jam, menit, detik;

signed char jam_alarm,menit_alarm;

eeprom unsigned char eep_jam_alarm, eep_menit_alarm;

flash unsigned char font[]={

0b11000000,//0

0b11111001,//1

0b10100100,//2

0b10110000,//3

0b10011001,//4

0b10010010,//5

Page 47: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 47/53

 

47

0b10000010,//6

0b11111000,//7

0b10000000,

0b10010000,

};

void clock_4094()

{

clock_register_hi;

clock_register_lo;

}

void kirimbyte4094(unsigned char dataled)

{

if (dataled & (1<<7)) serial_register_hi;else serial_register_lo;

clock_4094();

if (dataled & (1<<6)) serial_register_hi; else serial_register_lo;

clock_4094();

if (dataled & (1<<5)) serial_register_hi; else serial_register_lo;

clock_4094();

if (dataled & (1<<4)) serial_register_hi; else serial_register_lo;

clock_4094();

if (dataled & (1<<3)) serial_register_hi; else serial_register_lo;

clock_4094();

Page 48: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 48/53

 

48

if (dataled & (1<<2)) serial_register_hi; else serial_register_lo;

clock_4094();

if (dataled & (1<<1)) serial_register_hi; else serial_register_lo;

clock_4094();

if (dataled & (1<<0)) serial_register_hi; else serial_register_lo;

clock_4094();

}

void tampil(unsigned char data0, unsigned char data1)

{

if (data0==255)

{

kirimbyte4094(255);

kirimbyte4094(255);

}

else

{

kirimbyte4094(font[data0/10]);

kirimbyte4094(font[data0%10]);

}

if (data1==255)

{

kirimbyte4094(255);

kirimbyte4094(255);

Page 49: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 49/53

 

49

}

else

{

kirimbyte4094(font[data1/10]);

kirimbyte4094(font[data1%10]);

}

shift_register_hi;

delay_ms(10);

shift_register_lo;

}

void setting_alarm(void)

{

rtc_get_time(&jam,&menit,&detik);

 jam_alarm=eep_jam_alarm;

menit_alarm=eep_menit_alarm;

while(1)

{

tampil(255,menit_alarm);

delay_ms(500);

tampil(255,menit_alarm);

delay_ms(400);

if (tombol_up==0) {delay_ms(100); jam_alarm++;}

if (tombol_down==0) {delay_ms(100); jam_alarm--;}

Page 50: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 50/53

 

50

if (jam_alarm>23) jam_alarm=0;

else if (jam_alarm<0)jam_alarm=23;

if (tombol_set==0) {delay_ms(100); break;}

}

while(1)

{

tampil(jam_alarm,menit_alarm);

delay_ms(500);

tampil(jam_alarm,255);

delay_ms(400);

if (tombol_up==0) {delay_ms(100); menit_alarm++;}

if (tombol_down==0) {delay_ms(100); menit_alarm--;}

if (menit_alarm>59) menit_alarm=0;

else if (menit_alarm<0)menit_alarm=59;

if (tombol_set==0) {delay_ms(100); break;}

}

}

void setting_rtc(void)

{

signed char jam_set,menit_set;

rtc_get_time(&jam,&menit,&detik);

 jam_set=jam;

Page 51: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 51/53

 

51

menit_set=menit;

while(1)

{

tampil(jam_set,menit_set);

delay_ms(500);

tampil(255,menit_set);

delay_ms(400);

if (tombol_up==0) {delay_ms(100); jam_set++;}

if (tombol_down==0) {delay_ms(100); jam_set--;}

if (jam_set>23) jam_set=0;

else if (jam_set<0)jam_set=23;

if (tombol_set==0) {delay_ms(500); break;}

}

while(1)

{

tampil(jam_set,menit_set);

delay_ms(500);

tampil(jam_set,255);

delay_ms(400);

if (tombol_up==0) {delay_ms(100); menit_set++;}

if (tombol_down==0) {delay_ms(100); menit_set--;}

if (menit_set>59) menit_set=0;

else if (menit_set<0)menit_set=59;

if (tombol_set==0) {delay_ms(500); break;}

Page 52: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 52/53

 

52

}

rtc_set_time(jam_set, menit_set, 0);

}

void main(void)

{

unsigned char detik_now;

DDRB=0xFF;

PORTB=0x00;

DDRD=0x01;

PORTD=0xFE;

i2c_init();

 //rtc_init(0,0,0);

while (1)

{

 // Place your code here

rtc_get_time(&jam,&menit,&detik);

if (detik_now!=detik) {PORTB.3=0; delay_ms(400);} else PORTB.3=1;

detik_now=detik;

tampil(jam,menit);

delay_ms(100);

if (sw_alarm==on)

{

if (jam==jam_alarm && menit==menit_alarm && detik==0) {}

Page 53: Avr Kontri Db a5

5/17/2018 Avr Kontri Db a5 - slidepdf.com

http://slidepdf.com/reader/full/avr-kontri-db-a5 53/53

 

53

}

if (tombol_set==0 && sw_setting==posisi_alarm) {delay_ms(500); setting_alarm();}

if (tombol_set==0 && sw_setting==posisi_jam) {delay_ms(500); setting_rtc();}

};

}

DAFTAR PUSTAKA

http://kontri-electronics.com/