Oleh :
Alvina Rizky
NIM 190532547220
D3 ELKA ’19 OFF A
TUJUAN
Komunikasi serial USART merupakan komunikasi full duplex (dua arah) antara pengirim
dan penerima. Hal ini dapat dilakukan karena mikrokontroler AVR dilengkapi dengan perangkat
keras yang terpisah antara pengirim dan penerima. USART biasanya digunakan untuk
komunikasi asinkron, yaitu komunikasi yang tidak memerlukan clock yang sama antara
pengirim dan penerima untuk menyinkronkan antara satu dengan yang lainnya. Untuk menjaga
sikronisasi antara pengirim dan penerima, digunakan bit start dan stop di awal dan di akhir
setiap urutan transmisi satu byte data.
Mikrokontroler AVR cukup fleksibel. Mikrokontroler ini mempunyai kemampuan untuk
mengeset berbagai macam kecepatan transmisi data yang disebut dengan baud (bit per
second) rate. USART tersebut juga dapat diset untuk mengirimkan lebar data 5 sampai 9 bit
dengan 1 atau 2 stop bit. Selain itu, mikrokontroler AVR juga dilengkapi dengan perangkat
keras pembangkit bit paritas (ganjil atau genap) dan perangkat keras pengecek paritas pada sisi
penerima. Sebuah bit parity digunakan untuk mendeteksi error satu bit dalam satu byte data.
USART juga dapat dikonfigurasi untuk beroperasi dalam mode sinkron.
Register yang digunakan untuk mengontrol sistem USART adalah sebagai berikut:
UDR – USART I/O Data Register
UCSRA – USART Control and Status Register A
UCSRB – USART Control and Status Register B
UCSRC – USART Control and Status Register C
UBRRL dan UBRRH – USART Baud Rate Register
1 set PC/Laptop yang sudah berisi program Code Vision AVR, Proteus, VSPE (Vitual
Serial Port Emulator) dan HTerm.
PROSEDUR
VCC
LCD1
PB7
PB6
PB5
PB4
PB3
PB2
PB1
PB0
LM016L
RP1
1
2
3
4
5
VDD
VSS
VEE
6
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
VCC
E
7
8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
9
RESPACK-8 RV1
PC0
PC1
PC2
PC4
PC5
PC6
PC7
SW7 SW6 SW5 SW4 SW3 SW2 SW1 SW0
SW-SPST SW-SPST SW-SPST SW-SPST SW-SPST SW-SPST SW-SPST SW-SPST
1k
U1
VCC
1 40
PB0 PB0/T0/XCK PA0/ADC0
2 39
PB1 PB1/T1 PA1/ADC1
3 38
PB2 PB2/AIN0/INT2 PA2/ADC2
XTAL1
XTAL2
4 37
PB3 PB3/AIN1/OC0 PA3/ADC3
5 36
PB4 PB4/SS PA4/ADC4 P1
6 35
PB5 PB5/MOSI PA5/ADC5
PB6
7
PB6/MISO PA6/ADC6
34 R1
PB7
8
PB7/SCK PA7/ADC7
33 10k X1 1
DCD
6
DSR
14 22 1 2 2
PDO PD0/RXD PC0/SCL PC0 PD0 RXD
15 23 7
PD1 PD1/TXD PC1/SDA PC1 RTS
16 24 3
PD2/INT0 PC2 PC2 RESET CRYSTAL PD1 TXD
17 25 8
PD3/INT1 PC3 PC3 CTS
18 26 4
PD4/OC1B PC4 PC4 DTR
19
PD5/OC1A PC5
27
PC5 C1 9
RI
20
PD6/ICP1 PC6/TOSC1
28
PC6 4,7uF C2 C3
21 29 1nF 1nF
PD7/OC2 PC7/TOSC2 PC7
13 ERROR
XTAL1 XTAL1
12 32 COMPIM
XTAL2 XTAL2 AREF
9 30
RESET RESET AVCC
ATMEGA8535
2. Buka program Code Vision AVR. Buatlah project baru. Dengan menggunakan wizard, set
PORTB sebagai input dengan pull up dan komunikasi USART sebagai Transmitter, baud
rate 19200, frame format 8 data, 1 stop, no parity dan mode asynchronous.
3. Buat program untuk membaca data dari piranti input toggle switch kemudian mengirim
ke komputer untuk ditampilkan di hyperterminal/Hterm dalam bilangan desimal dan
heksadesimal. Compile program tersebut.
4. Buka rangkaian di Proteus, kemudian masukkan program yang sudah dicompile ke
mikrokontroler di Proteus.
5. Buka program VSPE kemudian set komunikasi virtual (pair) misalnya antara COM1 dan
COM2.
6. Buka rangkaian di Proteus, set komponen COMPIM menggunakan port serial COM1.
Kemudian simulasikan rangkaian.
7. Buka aplikasi Hterm. Pilih Port COM2 dan Baud Rate 19200. Klik Connect.
8. Ubah kombinasi toggle switch di Proteus seperti dalam Tabel 5.1.
9. Lihat karakter yang muncul di jendela Transmitted Data dan catat di Tabel 5.1 (desimal
dan heksadesimal).
10. Ulangi langkah 8 dan 9.
XTAL21
XTAL22
4 37
PB3/AIN1/OC0 PA3/ADC3
5 36
PB4/SS PA4/ADC4
6 35
PB5/MOSI PA5/ADC5
7
PB6/MISO PA6/ADC6
34 R3
8
PB7/SCK PA7/ADC7
33 10k X3
VDD
VSS
VEE
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
VCC
E
14 22 1 2
PD1 PD0/RXD PC0/SCL PC0
15 23
PD0 PD1/TXD PC1/SDA PC1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
16 24
PD2/INT0 PC2 PC2 RESET1 CRYSTAL
17 25
PD3/INT1 PC3 PC3 RV2
18 26
PD4/OC1B PC4 PC4
19 27 C7
PC0
PC1
PC2
PC4
PC5
PC6
PC7
PD5/OC1A PC5 PC5
20
PD6/ICP1 PC6/TOSC1
28
PC6 4,7uF C8 C9
21 29 1nF 1nF
PD7/OC2 PC7/TOSC2 PC7
13
XTAL21 XTAL1
12 32
XTAL22 XTAL2 AREF
9 30 1k
RESET2 RESET AVCC
ATMEGA8535
U2
VCC
1 40
PB0/T0/XCK PA0/ADC0
2 39
PB1/T1 PA1/ADC1
3 38
PB2/AIN0/INT2 PA2/ADC2
XTAL12
XTAL11
4 37
PB3/AIN1/OC0 PA3/ADC3
5 36
PB4/SS PA4/ADC4
6 35
PB5/MOSI PA5/ADC5
7
PB6/MISO PA6/ADC6
34 R2
8
PB7/SCK PA7/ADC7
33 10k X2
14 22 1 2
PDO PD0/RXD PC0/SCL
15 23
PD1 PD1/TXD PC1/SDA
16 24
PD2/INT0 PC2 RESET1 CRYSTAL
17 25
PD3/INT1 PC3
18 26
PD4/OC1B PC4
19
PD5/OC1A PC5
27 C4
20
PD6/ICP1 PC6/TOSC1
28 4,7uF C5 C6
21 29 1nF 1nF
PD7/OC2 PC7/TOSC2
13
XTAL11 XTAL1
12 32
XTAL12 XTAL2 AREF
9 30
RESET1 RESET AVCC
ATMEGA8535
}
}
2.
Tabel 5.1 Hasil percobaan A
Kombinasi toggle switch Tampilan hyperterminal
No
SW7 SW6 SW5 SW4 SW3 SW2 SW1 SW0 Desimal Heksadesimal
1 0 0 0 0 0 0 0 1 1 0x01
2 0 0 0 0 0 0 1 1 3 0x03
3 0 0 0 0 0 1 1 1 7 0x07
4 0 0 0 0 1 1 1 1 15 0x15
5 0 0 0 1 1 1 1 1 31 0x31
6 0 0 1 1 1 1 1 1 63 0x63
7 0 1 1 1 1 1 1 1 127 0x127
8 1 1 1 1 1 1 1 1 255 0x255
void main(void)
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 19200
UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) |
(0<<UPE) | (0<<U2X) | (0<<MPCM);
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) |
(0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) |
(0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
UBRRH=0x00;
UBRRL=0x0C;
lcd_init(16);
while (1)
{
for(n=0;n<16;n++)
{
input= getchar();
lcd_gotoxy(n,0);
lcd_putchar(input);
putchar(input);
}
}
}
4.
Tabel 5.2 Hasil percobaan B
Karakter yang dikirim dari
No Tampilan LCD
hyperterminal
1
Satu
Dua kata
void main(void)
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 19200
UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) |
(0<<UPE) | (0<<U2X) | (0<<MPCM);
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) |
(1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) |
(0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
UBRRH=0x00;
UBRRL=0x0C;
while (1)
{
putchar('A');
delay_ms(1000);
putchar('B');
delay_ms(1000);
putchar ('C');
delay_ms(1000);
}
}
6. Program menerima data dan menampilkan ke LCD pada mikrokontroler2.
#include <mega8535.h>
#include <alcd.h>
#include <stdio.h>
char a;
char data[10];
void main(void)
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 19200
UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) |
(0<<UPE) | (0<<U2X) | (0<<MPCM);
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) |
(0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) |
(0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
UBRRH=0x00;
UBRRL=0x0C;
lcd_init(16);
while (1)
{
a=getchar();
sprintf(data,"%c",a);
lcd_gotoxy(0,0);
lcd_puts(data);
}
}
12
7.
Tabel 5.3 Hasil Percobaan C
Karakter yang dikirim pada Tampilan LCD pada
No
mikrokontroler1 mikrokontroler2
1
ANALISIS DATA
3. Instruksi apa yang digunakan untuk mengirim data dari mikrokontroler ke komputer?
Instruksi yang digunakan yaitu :
Printf() berfungsi mengirimkan data satu atau lebih karakter memalui USART.
Putchar() berfungsi mengirimkan data hanya satu karakter.
13
5. Instruksi apa yang digunakan untuk menerima data dari komputer ke mikrokontroler?
getchar() = hanya dapat menerima satu karakter saja.
scanf() = dapat menerima satu atau lebih karakter.
6. Bandingkan antara karakter yang dikirimkan dari mikrokontroler1 dengan karakter yang
tampil di LCD yang terhubung ke mikrokontroler2?
Karakter yang dikirimkan oleh mikrokontroler 1 yaitu A , B , C kemudian diterima oleh
mikrokontroler 2 dan hasilnya ditampilkan pada LCD.
7. Tuliskan kembali instruksi yang digunakan untuk mengirim data dari mikrokontroler
serta instruksi yang digunakan untuk menerima data di mikrokontroler.
Instruksi yang digunakan untuk mengirimkan data dari mikrokontroler yaitu