LAPORAN PRAKTIKUM 5
ANTARMUKA MIKROKONTROLER DENGAN LCD
Disusun
untuk Memenuhi Matakuliah Praktikum Lab PTE-03
Dibimbing oleh Ibu Dyah Lestari
KELOMPOK
8
Muhammad Rusdi 150534601669
Muhammad Zaki N 150534601331
Syafiq Ubaidillah 150534605079
Wuri Handayani 150534602133
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK ELEKTRO
UNIVERSITAS
NEGERI MALANG
PERCOBAAN 5
ANTARMUKA MIKROKONTROLER DENGAN LCD
1.
TUJUAN
- Mengetahui dan memahami cara mengantarmukakan mikrokontroler dengan modul penampil LCD.
- Mengetahui dan memahami bagaimana memrogram mikrokontroler untuk menampilkan karakter ke penampil LCD.
2.
DASAR TEORI
a. LCD
M1632
LCD (Liquid Cristal
Display) berfungsi untuk menampilkan karakter angka, huruf ataupun simbol
dengan lebih baik dan dengan konsumsi arus yang rendah. LCD (Liquid Cristal
Display) dot matrik M1632 merupakan modul LCD buatan hitachi. Modul LCD (Liquid
Cristal Display) dot matrik M1632 terdiri dari bagian penampil karakter (LCD)
yang berfungsi menampilkan karakter dan bagian sistem prosesor LCD dalam bentuk
modul dengan mikrokontroler yang diletakan dibagian belakan LCD tersebut yang
berfungsi untuk mengatur tampilan LCD serta mengatur komunikasi antara LCD
dengan mikrokontroler yang menggunakan modul LCD tersebut. Modul prosesor M1632
pada LCD tersebut memiliki memori tersendiri sebagai berikut.
LCD ini memiliki 16 kaki,
sebagaimana ditunjukkan dalam Tabel 5.1.
Tabel 5.1 Konfigurasi Pin LCD
M1632
No
|
Kaki
|
Deskripsi
|
1
|
Vss
|
0V (GND)
|
2
|
Vcc
|
+5V
|
3
|
VLC
|
LCD Contrast Voltage
|
4
|
RS
|
Register Select; H: Data Input; L: Instruction Input
|
5
|
RD
|
H:Read; L: Write
|
6
|
EN
|
Enable Signal
|
7
|
D0
|
Data Bus 0
|
8
|
D1
|
Data Bus 1
|
9
|
D2
|
Data Bus 2
|
10
|
D3
|
Data Bus 3
|
11
|
D4
|
Data Bus 4
|
12
|
D5
|
Data Bus 5
|
13
|
D6
|
Data Bus 6
|
14
|
D7
|
Data Bus 7
|
15
|
V+BL
|
Positive Backlight Voltage
|
16
|
V-BL
|
Negative Backlight Voltage
|
![*](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png)
DDRAM adalah merupakan memori
tempat karakter yang ditampilkan berada. Contoh, untuk karakter ‘A’ atau 41H
yang ditulis pada alamat 00, maka karakter tersebut akan tampil pada baris
pertama dan kolom pertama dari LCD. Apabila karakter tersebut ditulis di alamat
40, maka karakter tersebut akan tampil pada baris kedua kolom pertama dari LCD.
Posisi ini ditunjukkan dalam Gambar 5.2.
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png)
Gambar 5.2 Posisi DDRAM
![*](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png)
CGRAM adalah merupakan memori
untuk menggambarkan pola sebuah karakter di mana bentuk dari karakter dapat
diubah-ubah sesuai keinginan. Namun memori ini akan hilang saat power supply
tidak aktif, sehingga pola karakter akan hilang.
![*](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png)
CGROM adalah merupakan memori
untuk menggambarkan pola sebuah karakter di mana pola tersebut sudah ditentukan
secara permanen dari HD44780 sehingga pengguna tidak dapat mengubah lagi. Namun
karena ROM bersifat permanen, maka pola karakter tersebut tidak akan hilang
walaupun power supply tidak aktif. Pada Gambar 6.3, tampak terlihat pola-pola
karakter yang tersimpan dalam lokasi-lokasi tertentu dalam CGROM. Pada saat
HD44780 akan menampilkan data 41H ke DDRAM, maka HD44780 akan mengambil data di
alamat 41H (0100 0001) yang ada pada CGROM yaitu pola karakter A.
Dalam Gambar 5.4 modul LCD dihubungkan ke PORTB
mikrokontroler dimana kaki RS, RD, EN terhubung ke PORTB.0-PORTB.2 dan D4, D5,
D6, D7 terhubung ke PORTB.4-PORTB.7.
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png)
Gambar 5.3 pola Karakter
dalam CGROM
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image011.jpg)
Gambar 5.4 Rangkaian LCD
Fungsi Pin LCD (Liquid Cristal Display) Dot Matrix 2×16 M1632 DB0
·
DB7 adalah jalur data (data bus)
yang berfungsi sebagai jalur komunikasi untuk mengirimkan dan menerima data
atau instruksi dari mikrokontrooler ke modul LCD.
·
RS adalah pin yang berfungsi
sebagai selektor register (register sellect) yaitu dengan memberikan logika low
(0) sebagai register perintah dan logika high (1) sebagai register data.
·
R/W adalah pin yang berfungsi
untuk menentukan mode baca atau tulis dari data yang terdapat pada DB0 – DB7.
Yaitu dengan memberikan logika low (0) untuk fungsi read dan logika high (1)
untuk mode write.
·
Enable (E),
berfungsi sebagai Enable Clock LCD, logika 1 setiap kali pengiriman atau pembacaan data.
1. Penulisan Data Register Perintah LCD (Liquid
Cristal Display) M1632
Penulisan data ke Register Perintah dilakukan dengan tujuan
mengatur tampilan LCD, inisialisasi dan mengatur Address Counter maupun Address
Data. Kondisi RS berlogika 0 menunjukkan akses data ke Register Perintah. RW
berlogika 0 yang menunjukkan proses penulisan data akan dilakukan. Nibble tinggi
(bit 7 sampai bit 4) terlebih dahulu dikirimkan dengan diawali pulsa logika 1
pada E Clock. Kemudian Nibble rendah (bit 3 sampai bit 0) dikirimkan dengan
diawali pulsa logika 1 pada E Clock lagi. Untuk mode 8 bit interface, proses
penulisan dapat langsung dilakukan secara 8 bit (bit 7 … bit 0) dan diawali
sebuah pulsa logika 1 pada E Clock.
2. Pembacaan Data Register Perintah LCD (Liquid
Cristal Display) M1632
Proses pembacaan data pada register perintah
biasa digunakan untuk melihat status busy dari LCD atau membaca Address
Counter. RS diatur pada logika 0 untuk akses ke Register Perintah, R/W diatur
pada logika 1 yang menunjukkan proses pembacaan data. 4 bit nibble tinggi
dibaca dengan diawali pulsa logika 1 pada E Clock dan kemudian 4 bit nibble
rendah dibaca dengan diawali pulsa logika 1 pada E Clock. Untuk Mode 8 bit
interface, pembacaan 8 bit (nibble tinggi dan rendah) dilakukan sekaligus
dengan diawali sebuah pulsa logika 1 pada E Clock.
3. Penulisan Data Register Data LCD (Liquid Cristal
Display) M1632
Penulisan data pada Register Data dilakukan untuk
mengirimkan data yang akan ditampilkan pada LCD. Proses diawali dengan adanya
logika 1 pada RS yang menunjukkan akses ke Register Data, kondisi R/W diatur
pada logika 0 yang menunjukkan proses penulisan data. Data 4 bit nibble tinggi
(bit 7 hingga bit 4) dikirim dengan diawali pulsa logika 1 pada sinyal E Clock
dan kemudian diikuti 4 bit nibble rendah (bit 3 hingga bit 0) yang juga diawali
pulsa logika 1 pada sinyal E Clock.
4. Pembacaan Data Register Data LCD (Liquid Cristal
Display) M1632
Pembacaan data dari Register Data dilakukan untuk
membaca kembali data yang tampil pada LCD. Proses dilakukan dengan mengatur RS
pada logika 1 yang menunjukkan adanya akses ke Register Data. Kondisi R/W
diatur pada logika tinggi yang menunjukkan adanya proses pembacaan data. Data 4
bit nibble tinggi (bit 7 hingga bit 4) dibaca dengan diawali adanya pulsa
logika 1 pada E Clock dan dilanjutkan dengan data 4 bit nibble rendah (bit 3
hingga bit 0) yang juga diawali dengan pulsa logika 1 pada E Clock.
3. ALAT DAN BAHAN YANG DIGUNAKAN
- 1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
- 1 buah catu daya DC +5V
- 1 buah multimeter
- 1 buah ISP Downloader AVR
- 1 buah sistem minimum AVR
- 1 buah LCD
- 1 buah kabel printer USB
4. PROSEDUR KERJA
1. Rangkailah peralatan
yang diperlukan seperti dalam Gambar 6.5. Hubungkan soket jumper PORTB pada
minimum system dengan soket jumper pada LCD.
2.
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image013.png)
3.
Gambar 5.5 Rangkaian antarmuka mikrokontroler dengan
LCD
4.
Buka program Code Vision AVR
5.
Buatlah file project
(.prj) kemudian pilih IC yang digunakan (ATmega8535) dan atur clock 4.000 Mhz.
(seperti praktikum sebelumnya).
6.
Klik sub tab
Libraries>>Alphanumeric LCD (alcd.h). Centang Enable Alphanumeric LCD
Support kemudian sesuaikan pada gambar di bawah ini. Kemudian klik OK
7.
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image015.jpg)
8. Buatlah file source (.c)
kemudian hubungkan file project dengan file source seperti pada praktikum
sebelumnya.
9. Tuliskan file header
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image016.png)
10. Buatlah program utama dan tuliskan program berikut di
dalam program utama .
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image017.png)
11. Tuliskan program
berikut dalam program utama tepatnya di dalam while(1).
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image018.png)
12. Compile
dan Build program jika ada yang error perbaiki program. Masukkan file hex
menggunakan Khanzama AVR Programer. Klik auto program, amati tampilan LCD.
13. Hapus program yang ada di dalam while.
Tuliskan program berikut di dalam while(1).
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image019.png)
14. Compile
dan Build program jika ada yang error perbaiki program. Masukkan file hex
menggunakan Khanzama AVR Programer. Klik auto program, amati tampilan LCD.
15. Hapus program yang ada di dalam while.
Tuliskan program berikut di dalam while(1).
while (1)
{
i.
lcd_gotoxy(0,0);//menempatkan kursor di baris 0 kolom 0
ii.
lcd_putsf("Saya belajar");//menampilkan string “Saya
belajar”
}
16. Compile
dan Build program jika ada yang error perbaiki program. Masukkan file hex
menggunakan Khanzama AVR Programer. Klik auto program, amati tampilan LCD.
17. Hapus program yang ada di dalam while.
Tuliskan program berikut di dalam while(1).
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image020.png)
18. Compile
dan Build program jika ada yang error perbaiki program. Masukkan file hex
menggunakan Khanzama AVR Programer. Klik auto program, amati tampilan LCD.
19. Hapus program yang ada di dalam while.
Tuliskan program berikut di dalam while(1).
![](file:///C:\Users\Dell\AppData\Local\Temp\msohtmlclip1\01\clip_image021.png)
20. Compile
dan Build program jika ada yang error perbaiki program. Masukkan file hex
menggunakan Khanzama AVR Programer. Klik auto program, amati tampilan LCD.
21. Buatlah tampilan nama anda berjalan dari kiri ke kanan pada baris 0 dan NIM anda berjalan dari kanan ke kiri pada baris 1 (tampidlan di baris 0 dan 1 muncul secara
bersamaan).
22. Ubahlah nilai dalam
lcd_init(16) menjadi lcd_init(40) dan lihat perbedaannya.
5.
DATA HASIL PERCOBAAN
A. Source code
1. Program pertama
while(1)
{
lcd_gotoxy(0,0);
lcd_putchar(0x41);
}
}
2. Program kedua
while(1)
{
lcd_gotoxy(0,0);
lcd_putchar(0x41);
delay_ms(1000);
lcd_clear();
lcd_gotoxy(0,1);
lcd_putchar(0x30);
delay_ms(1000);
lcd_clear();
}
}
3. Program ketiga
while(1)
{
lcd_gotoxy(0,0);
lcd_putsf("saya belajar");
}
}
4. program keempat
while(1)
{
lcd_gotoxy(0,1);
lcd_putsf("Antarmuka
LCD");
delay_ms(1000);
}
}
5. program kelima
while(1)
{
lcd_gotoxy(0,0);
lcd_putsf("Saya
belajar");
delay_ms(1000);
lcd_clear();
lcd_gotoxy(0,1);
lcd_putsf("Antarmuka
LCD");
delay_ms(1000);
lcd_clear();
}
}
6. program keenam
while(1)
{
int a,b;
for (a=0,b=4; a<20; a++,b--)
{
lcd_clear();
lcd_gotoxy (a,0);
lcd_putsf ("M Zaki Nasrulloh");
if(a==0)
{lcd_gotoxy (5,1);lcd_putsf
("150534601331"); }
if(a==1)
{lcd_gotoxy (4,1);lcd_putsf
("150534601331"); }
if(a==2)
{lcd_gotoxy (3,1);lcd_putsf
("150534601331"); }
if(a==3)
{lcd_gotoxy (2,1);lcd_putsf
("150534601331");}
if(a==4)
{lcd_gotoxy (1,1);lcd_putsf
("150534601331");}
if(a==5)
{lcd_gotoxy (0,1);lcd_putsf
("150534601331");}
if(a==6)
{lcd_gotoxy (0,1);lcd_putsf
("50534601331");}
if(a==7)
{lcd_gotoxy (0,1);lcd_putsf
("0534601331");}
if(a==8)
{lcd_gotoxy (0,1);lcd_putsf
("534601331");}
if(a==9)
{lcd_gotoxy (0,1);lcd_putsf
("34601331");}
if(a==10)
{lcd_gotoxy (0,1);lcd_putsf
("4601331");}
if(a==11)
{lcd_gotoxy (0,1);lcd_putsf
("601331");}
if(a==12)
{lcd_gotoxy (0,1);lcd_putsf
("01331");}
if(a==13)
{lcd_gotoxy (0,1);lcd_putsf
("1331");}
if(a==14)
{lcd_gotoxy (0,1);lcd_putsf
("331");}
if(a==15)
{lcd_gotoxy (0,1);lcd_putsf
("31");}
if(a==16)
{lcd_gotoxy (0,1);lcd_putsf
("1");}
if(a==17)
{lcd_gotoxy (0,1);lcd_putsf ("
");}
delay_ms (1000);
}
}
}
6.
ANALISA DATA
6.1
Program 1
Program 1 adalah program tentang operasi
LCD sederhana, yaitu menampilkan karakter huruf A pada bagian kiri atas LCD.
Sintaks program diawali dengan header program #include <mega8535.h> untuk
mengaktifkan fungsi IC ATmega 8535. Kemudian #include <alcd.h> untuk
mengaktifkan fungsi LCD dan header terakhir #include <delay.h> untuk
mengaktifkan fungsi jeda pada tampilan LCD. Setelah header program kemudian
adalah tipe data void dilanjutkan lagi dengan inisialisasi lcd_init(16) yang
bermakna bahwa kolom yang tersedia pada lcd adalah 16 (kolom 0-15). Jika angka
dalam kolom dirubah, maka jumlah kolom yang dapat diisi karakter sama dengan angka
yang tertera pada angka inisialisasi. Setelah itu masuk pada program utama
while (1). Sintaks program yang terdapat program utama adalah lcd_gotoxy(0,0)
yang bermakna bahwa daerah yang akan dituju pada lcd adalah kolom 0 baris 0.
Kemudian setelah menentukan daerah yang akan dituju, program dilanjutkan dengan
lcd_putchar(0x41) yang berfungsi untuk meletakkan karakter pada daerah tersebut
dengan huruf A (karena bilangan heksa 41 adalah huruf A). selanjutnya program
ditutup dengan menggunakan sintaks kurung kurawal.
6.2
Program 2
Program 2 adalah program tentang operasi
lcd sederhana. Sama seperti program pertama, program tersebut hanya menampilkan
karakter, akan tetapi karakter yang ditampilkan tidak hanya terdapat di baris
satu saja, tetapi juga terdapat di baris dua. Perbedaan tersebut dikarenakan
pada program utama tidk hanya memberikan perintah baris satu saja, tetapi juga
diberikan perintah untuk mengisi baris kedua. Perintah untuk mengisi baris
kedua ditandai dengan sintaks lcd_gotoxy(0,1); yang berarti bahwa daerah lcd
yang dituju adalah baris dua (1) dan kolom satu (0). Sedangkan karakter yang
ditampilkan adalah karakter “0”, karakter tersebut di tunjukkan dengan sintaks
lcd_putchar(0x30) yang berarti bahwa program akan menempatkan karakter 0 dengan
rumus bilangan heksadesimal 0x30 pada baris dan kolom yang telah dialamatkan,
yaitu baris 2 kolom 1. Sehingga lcd akan menampilkan karakter sesuai sintaks
yang diberikan pada program utama (editor).
6.3
Program 3
Berbeda dengan program yang terdapat pada program
satu dan program dua, program tiga adalah program yang berfungsi untuk
menampilkan string atau kumpulan beberapa karakter. Perbedaan tersebt terdapat
pada sintaks program utama, yaitu perintah menampilkan string lcd_putsf(“saya
belajar”); yang berarti bahwa lcd akan menampilkan string “saya belajar” pada
baris dan kolom yang telah dituju. Baris dan kolom yang dituju pada dasarnya
adalah sama seperti pada program pertama dan kedua, yaitu mnggunakan perintah
lcd_gotoxy(0,0); manunjukkan daerah yang dituju adalah baris 1 dan kolom 1.
Sehingga yang tampil pada lcd adalah kalimat “saya belajar” yang dimulai dari
baris 1 dan kolom 1.
6.4
Program 4
Sama halnya dengan program tiga, program
empat adalah program yang berfungsi untuk menampilkan kalimat. Klimat yang
ditampilkan berbeda dengan program tiga. Perbedaannya terdapat pada kalimat
yang ditampilkan dan baris yang dituju. Pada program tiga kalimat yang
ditampilkan adalah “saya belajar”, sedangkan pada progam empat berikut kalimat
yang ditampilkan adalah “antarmuka lcd”. Perbedaan tersebut terjadi karena
pemberian kalimat dalam kurung yang tertera pada sintaks putsf berbeda.
Kemudian perbedaan daerah yang dituju disebabkan karena penempatan baris dan
kolom pada sintaks gotoxy, pada program tiga angka yang terdapat dalam kurung
adalah (0,0) menunjukkan daerah yang dituju adalah baris 1 dan kolom 1.
Sedangkan pada program empat angka yang terdpat dalam kurung adalah (0,1) yang
berarti bahwa daerah yang dituju adalah baris 2 dan kolom 1.
6.5
Program 5
Pada dasarnya program lima adalah gabungan
antara program tiga dan program empat, yaitu program yang berfungsi menampilkan
kalimat di dua baris sekaligus. Kalimat yang ditampilkanpun juga sama dengan
kalimat yang ditampilkan pada program
tiga dan program empat, yaitu “saya belajar” pada baris satu dan
“antaruka lcd” pada baris dua. Perbedaan utamanya adalah adanya penambahan
sintaks pada program utama yang tidak terdapat pada program tiga dan program
empat. Penambahan tersebut adalah sintaks delay_ms(1000); dan sintaks
lcd_clear();. Fungsi sintaks delay dalam program adalah untuk mengatus jeda lcd
apabila berlaku fungsi perubahan layar atau fungsi looping pada lcd. Sehingga
jeda tersebut sesuai pada program, yaitu 1 detik karena pada sintaks delay
ditentukan sebesar 1000msekon. Sedangkan fungsi sintaks lcd_clear(); adalah
fungsi untuk menghapuskan karakter atau string yang telah ditampilkan
sebelumnya menuju karakter atau string yang akan ditampilkan selanjutnya
apabila ada peubahan tampilan atau looping.
6.6
Program 6
Program 6 merupakan pengembangan dari
program-program sebelumnya, dimana pengembangan tersebut terdapat pada
penembahan perulangan (looping) menggunakan sintaks “for”. Perulangan terseut
dilakukan untuk mengubah tampilan lcd secara berkala. Pada program, fungsi
perulangan digunakan untuk menggeser posisi kolom tempat kalimat awal ditujukan
satu tempat bergeser dari kiri ke kanan dengan jeda waktu satu detik.
Perulangan dilakukan pada lcd baris pertama, sedangkan pada baris kedua tidak
menggunakan perulangan, melainkan menggunakan pengandaian if yang bertumpu pada
keadaan baris pertama, sehingga setiap terdapat perubahan pada baris pertama,
maka baris kedua juga akan berubah sesuai dengan yang diperintahkan pada
program. Baris pertama program menampilkan nama mahasiswa pembuat program,
sedangkan pada baris kedua menampilkan nomor induk mahasiswa pembuat program.
Pada baris kedua bergeser berlawanan arah dengan baris pertama. Yaitu pada
baris pertama nama mahasiswa bergeser dari kiri ke kanan. Sedangkan pada baris
kedua nomor induk mahasiswa bergeser dari kanan ke kiri hingga habis. Baris
kedua bisa saja menggunakan perulangan for, tetapi hasilnya selalu tidak sesuai
dengan yang diharapkan, yaitu NIM mahasiswa yang bergeser kekiri tidak bisa
sampai habis. Pergeseran NIM tersebut berakhir pada saat angka awal NIM
menempati kolom pertama. Hal ini disebabkan karena pada perulangan for nilai
minimal adalah nol, tidak ada nilai kurang dari nol. Selain itu pada LCD juga
hanya terdapat dua baris, sehingga kolom paling kiri pada LCD adalah kolom
pertama. Ketika karakter yang diloop sudah mencapai kolom paling kiri, maka
karakter tidak bisa lagi bergeser kekiri.
7.
KESIMPULAN
a)
LCD (Liquid Crystal
Display) adalah salah satu pitanti elektronik yang berfungsi untuk menampilkan
karakter, gambar ataupun tulisan sesuai yang kita inginkan.
b)
LCD M1632 adalah LCD
dengan tampilan 16 kolom x 2 baris dengan konsumsi daya yang rendah
c)
LCD memiliki 3 memori
utama, yaitu CGROM (Character Generator Read Only Memory), CGRAM
(Character Generator Random Access Memory), dan DDRAM (Display Data Random
Access Memory).
d)
DDRAM adalah merupakan memori tempat karakter yang
ditampilkan berada.
e)
CGRAM adalah merupakan memori untuk menggambarkan
pola sebuah karakter di mana bentuk dari karakter dapat diubah-ubah sesuai
keinginan
f)
CGROM adalah merupakan memori untuk menggambarkan
pola sebuah karakter di mana pola tersebut sudah ditentukan secara permanen
dari HD44780 sehingga pengguna tidak dapat mengubah lagi
g)
Langkah utama sebelum mengantarmukakan LCD dengan
mikrokontroller adalah mengatur konfigurasi program pada libraries untuk
mengaktifkan LCD.
DAFTAR PUSTAKA
· Lestari, Dyah.2012.PRAKTIKUM MIKROPROSESSOR ANTARMUKA
DENGAN LCD PTE PRODI S1 PENDIDIKAN TEKNIK ELEKTRO. Malang.Universitas Negeri
Malang.