14
MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR (I2C DAN APLIKASI RTC) D E P O K I N S T R U M E N T S dins

MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

Embed Size (px)

Citation preview

Page 1: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

MIKROKONTROLER ATMEGA BERBASIS

CODEVISION AVR(I2C DAN APLIKASI RTC)

D E P O K I N S T R U M E N T S dins

Page 2: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

Teori I2C/I2C

I2C/I2C (Baca: I-Two-C atau I-Squared-C) = Inter-Integrated Circuitadalah salah satu teknik komunikasi serial dengan

menggunakan dua jalur, yaitu SCL (Serial Clock), dan SDA (Serial Data).

Page 3: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

Fitur I2C/I2C ATmega16A

PORTC.0 = SCL PORTC.1/PINC.1 = SDA I2C/I2C dapat dibangkitkan pula di PORT lain. Contoh perangkat yang menggunakan I2C/I2C:

IC RTC (Real Time Clock) DS1307

Page 4: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

DI-Smart AVR.16 System(Sistem Plus µC. ATmega16A)

Y111059200

C1

20pFC2

20pF

R1

1K

SW1RST

VCCX1

X2RST

RST

PB0PB1PB2PB3PB4PB5PB6PB7

PA0PA1PA2PA3PA4PA5PA6PA7

PD0PD1PD2PD3PD4PD5PD6PD7 PC0

PC1PC2PC3PC4PC5PC6PC7

X1X2

12345678910

P1PORTB

12345678910

P3PORTD

12345678910

P0PORTA

12345678910

P2PORTC

VCC

VCCVCC

VCC PB0PB1PB2PB3PB4PB5PB6PB7

PA0PA1PA2PA3PA4PA5PA6PA7

PC0PC1PC2PC3PC4PC5PC6PC7R1 IN13

R2 IN8T1 IN11

T2 IN10

GN

D15

V+

2

V-

6

VCC

16

R1 OUT 12R2 OUT 9T1 OUT 14

T2 OUT 7C1+1C1 -3 C2+ 4

C2 - 5

U2

MAX232CPE

+

C91uF

+

C131uF

+

C111uF

+

C101uF

VCC

162738495

DB1SERIAL

+C4470uF

Vin1

GN

D2

+5V 3U0 LM7805CT

+ C510uF

+ C6100nF

C7100nF

VCCD14002

C3

100nf

R3

2K2L10POWER

VCC

VCC

11

23

W 2

VR1

10K

AREF

AREF

VCC

PD0PD1PD2PD3PD4PD5PD6PD7

AGND 31X113 X212

RESET9

PD2 (INT0)16

PD3 (INT1)17PD4 (OC1B)18PD5 (OC1A)19

PB0 (T0)1

PB1 (T1)2PB2 (AIN0)3PB3 (AIN1)4

PB4 (SS)5

PB5 (MOSI)6PB6 (MISO)7

PB7 (SCK)8

PA0 (ADC0) 40

PA1 (ADC1) 39PA2 (ADC2) 38PA3 (ADC3) 37

PA4 (ADC4) 36

PA5 (ADC5) 35PA6 (ADC6) 34

PA7 (ADC7) 33

PC0 22PC1 23PC2 24PC3 25PC4 26PC5 27(TOSC1) PC6 28(TOSC2) PC7 29

PD7 (OC2)21 PD6 (ICP)20

AREF 32

AVCC 30

PD1 (TDX)15 PD0 (RXD)14

IC1 AT MEGA

PB5

PB6PB7

VCC

LEDRST

1 23 45 67 89 10

P4ISP PROG

S2

PD2

S3

PD3

PD2

PD3

L8PC0

VCC

L7PC1

L6PC2

L5PC3

L4PC4

L3PC5

L2PC6

L1PC7

PC0

PC1

PC2

PC3

PC4

PC5

PC6

PC7

C17100nF

D0D1D2D3D4

D6D5

D7

D0

D1

D2

D3

D4

D6

D5

D7

PD0 PD1TXD SERIAL

TXD ISP

RXD SERIAL

RXD ISP

+ C121uF

123

JP1123

JP2

123456789

RP1

12

JP3LED CONNECTED

TXD ISPRXD ISP

TXD SERIAL

RXD SERIAL

POWER9-12VDC

1

2 34

56

7

8

9

Page 5: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

DI-Smart AVR.16 System

1. ATmega16A2. Crystal3. Reset4. ISP5. Power6. Vref ADC7. RS2328. LED Array9. Push Button

1

2

34

56

8

7

9

PC0=SCLPC1=SDA

Page 6: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

Pemrograman I2C/I2C pada CVAVR

Inisialisasi “Wizard” Aktivasi I2C/I2C. Pilih perangkat yang akan digunakan (RTC DS1307). Pilih PIN untuk SDA dan SCL. Aktivasi LCD Alphanumeric untuk menampilkan data dari

RTC.

Page 7: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

Pemrograman I2C/I2C (Setup “Wizard”)

1

4

2 3

Page 8: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

Inisialisasi I2Csesuai dengan yang diinputkan saat Wizard.

i2c.hlibrary sintaks/perintah untuk i2c

ds1307.hlibrary sintaks/perintah untuk RTC DS1307

Pemrograman I2C/I2C (Inisialisasi I2C/I2C Hasil “Wizard”)

Page 9: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

i2c_init(void); //Inisialisasi I2C. i2c_init();

i2c_start(void); //Mengaktifkan proses komunikasi. i2c_start();

i2c_stop(void); //Menghentikan proses komunikasi. i2c_stop();

i2c_read([char ack]); //Membaca data i2c. unsigned char char_data;

void main(void) {char_data = i2c_read(0);}

i2c_write([char data]); //Menulis data i2c. unsigned char char_data;

void main(void) {char_data = i2c_write(255);}

Pemrograman I2C/I2C (i2c.h)

Page 10: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

Pemrograman I2C/I2C (ds1307.h) [1/2]

rtc_init(void); //Inisialisasi rtc ds1307. rtc_init();

rtc_read([char address]); //Membaca data rtc. unsigned char char_data;

void main(void)

{char_data = rtc_read(0);}

rtc_write([char address, char data]); //Menulis data rtc. unsigned char char_data;

void main(void)

{rtc_write(0,0);}

rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). unsigned char cjm, cmn, cdt;

void main(void)

{rtc_get_time(&cjm, &cmn, &cdt);}

Page 11: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

Pemrograman I2C/I2C (ds1307.h) [2/2]

rtc_set_time([char hour, char min, char sec]); //Mengeset waktu (jam, menit, detik). unsigned char cjm, cmn, cdt;

void main(void)

{rtc_set_time(cjm, cmn, cdt);}

rtc_get_date([char *week_day, char *day, char *month, char *year]); //Membaca tanggal

//(hari ke-, tanggal, bulan, tahun). unsigned char chr, ctg, cbl, cth;

void main(void)

{rtc_get_date(&chr, &ctg, &cbl, &cth);}

rtc_get_date([char *week_day, char *day, char *month, char *year]); //Mengeset tanggal

//(hari ke-, tanggal, bulan, tahun). unsigned char chr, ctg, cbl, cth;

void main(void)

{rtc_get_date(chr, ctg, cbl, cth);}

Page 12: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

#include <mega16.h>

#include <delay.h>

#include <stdio.h>

#asm // I2C Bus functions

.equ __i2c_port=0x15 ;PORTC

.equ __sda_bit=1

.equ __scl_bit=0

#endasm

#include <i2c.h>

#include <ds1307.h> // DS1307 Real Time Clock functions

#include <alcd.h> // Alphanumeric LCD Module functions

// Declare your global variables here

unsigned char cstr[16];

unsigned char jm=0, dt=0, mn=0, hr=0, tg=0, bl=0, th=0;

Pemrograman I2C/I2C “Jam Digital” [1/3]

Page 13: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

void main(void)

{

// DS1307 Real Time Clock initialization

// Square wave output on pin SQW/OUT: Off

// SQW/OUT pin state: 0

rtc_init(0,0,0);

lcd_init(16);

hr=1;tg=6;bl=9;th=15;

rtc_set_date(hr,tg,bl,th);

jm=13;mn=52;dt=59;

rtc_set_time(jm,mn,dt);

Pemrograman I2C/I2C “Jam Digital” [2/3]

Page 14: MIKROKONTROLER ATMEGA BERBASIS CODEVISION AVR … · rtc_get_time([char *hour, char *min, char *sec]); //Membaca- waktu (jam, menit, detik). ... “Jam Digital”

while (1)

{

// Place your code here

rtc_get_date(&hr,&tg,&bl,&th); sprintf(cstr,"%02d-%02d-%02d",tg,bl,th);

lcd_gotoxy(0,0);

lcd_puts(cstr); rtc_get_time(&jm,&mn,&dt);

sprintf(cstr,"%02d:%02d:%02d",jm,mn,dt);

lcd_gotoxy(0,1); lcd_puts(cstr);

delay_ms(100);

}

}

Pemrograman I2C/I2C “Jam Digital” [3/3]