Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1
MODUL 01 I/O DASAR
Aji Suryo Wibowo (13211059)Asisten: Eki Dwi Wijanarko/13210146 Tanggal Percobaan: 18 Februari 2014 EL3214 – Praktikum Sistem Mikroprosesor
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB
Abstrak
Pada modul ini, dilakukan percobaan untuk mengakses
input dan output pada sistem minimun ATMega 8535.
Percobaan pertama adalah untuk mengakses port output
yaitu PORTA yang direpresentasikan dalam LED pada
DT-51. Percobaan kedua adalah mengakses fasilitas delay
pada AVR. Kemudian, percobaan terakhir adalah
mengombinasikan PORTA sebagai output dan PORTD
sebagai input.
Kata kunci: Input, Output, Delay, ATMega8535.
1. P
ENDAHULUANATMega merupakan sistem minimum yang sering digunakan sebagai prosesor sebuah sistem sederhana. Dalam hal ini, sistem minimum ATMega, khususnya ATMega 8535 digunakan sebagai kit praktikum, sehingga diharapkan setelah melakukan percobaan, mahasiswa dapat: a. memahami datasheet ATMega 8535
b. membuat aplikasi input dan output pada AVR dengan bahasa pemrograman C pada WinAVR
c. memahami pengesetan fuse yang berkaitan dengan penggunaan besar dan jenis kristal
2. S
TUDIP
USTAKA2.1 ATM
EGA8535,
[3]
Gambar 1.1 ATMega 8535, [4]
ATMega 8535 merupakan salah satu mikro kontroler 8 bit buatan Atmel untuk keluarga AVR yang diproduksi secara massal pada tahun 2006. Karena merupakan keluarga AVR, maka ATMega 8535 juga menggunakan arsitektur RISC.
Secara singkat, ATMega 8535 memiliki beberapa kemampuan:
a. Sistem mikrokontroler 8 bit berbasis RISC dengan kecepatan maksimal 16 MHz.
b. Memiliki memori flash 8 KB, SRAM sebesar 512 byte dan EEPROM (Electrically Erasable Programmable Read Only Memory) sebesar 512 byte.
c. Memiliki ADC (pengubah analog-ke-digital) internal dengan ketelitian 10 bit sebanyak 8 saluran.
d. Memiliki PWM (Pulse Width Modulation) internal sebanyak 4 saluran.
e. Portal komunikasi serial (USART) dengan kecepatan maksimal 2.5 Mbps.
f. Enam pilihan mode sleep, untuk menghemat penggunaan daya listrik.
Mikrokontroler ATMega8535 memiliki 40 pin untuk model PDIP, dan 44 pin untuk model TQFP dan PLCC. Nama-nama pin pada mikrokontroler ini adalah:
a. VCC untuk tegangan pencatu daya positif. b. GND untuk tegangan pencatu daya negatif. c. PortA (PA0 – PA7) sebagai port
Input/Output dan memiliki kemampuan lain yaitu sebagai input untuk ADC.
d. PortB (PB0 – PB7) sebagai port Input/Output dan juga memiliki kemampuan yang lain. e. PortC (PC0 – PC7) sebagai port Input/Output
untuk ATMega8535.
f. PortD (PD0 – PD7) sebagai port Input/Output dan juga memiliki kemampuan yang lain.
g. RESET untuk melakukan reset program dalam mikro kontroler.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 2
h. XTAL1 dan XTAL2 untuk input pembangkit sinyal clock.
i. AVCC untuk pin masukan tegangan pencatu daya untuk ADC.
j. AREF untuk pin tegangan referensi ADC. Untuk melakukan pemrograman dalam mikro kontroler AVR, Atmel telah menyediakan software khusus yang dapat diunduh dari website resmi Atmel. Software tersebut adalah AVRStudio. Software ini menggunakan bahasa assembly sebagai bahasa perantaranya. Selain AVRStudio, ada beberapa software pihak ketiga yang dapat digunakan untuk membuat program pada AVR. Software dari pihak ketiga ini menggunakan bahasa pemrograman tingkat tinggi seperti bahasa C, Java, atau Basic. Untuk melakukan pemindahan dari komputer ke dalam chip, dapat digunakan beberapa cara seperti menggunakan kabel JTAG atau menggunakan STNK buatan Atmel.
3. M
ETODOLOGI3.1 A
LAT DANK
OMPONEN YANGD
IGUNAKANa. Sistem Minimum ATMega 8535 (1 buah)
b. DT-51 Trainer Board (1 buah)
c. Power Supply (1 buah)
d. Komputer Terinstal WinAVR (1 buah)
3.2 L
ANGKAH-L
ANGKAHP
ERCOBAANa. Diagram 1.1 PORTA sebagai Output
b. Diagram 1.2 Fasilitas Delay pada AVR
1
•Power supply diset pada 9 V kemudian dihubungkan pada kit praktikum.
•Kabel downloader dihubungkan dari PC ke sismin ATMega.
2
•Dari PORTA pada sismin, dihubungkan kabel output ke port output pada DT-51. •Kodingan ditulis,
kemudian didownload ke dalam sismin.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 3
c. Diagram 1.3 PORTA sebagai Output dan PORTD sebagai Input
4. H
ASIL DANA
NALISIS4.1 PORTA sebagai Output
Gambar 1.2 Output Percobaan 1A1
Gambar 1.3 Output Percobaan 1A2
1
•Power supply diset pada 9 V kemudian dihubungkan pada kit praktikum.
•Kabel downloader dihubungkan dari PC ke sismin ATMega.
2
•Dari PORTA pada sismin, dihubungkan kabel output ke port output pada DT-51. •Kodingan ditulis,
kemudian didownload ke dalam sismin.
1
•Power supply diset pada 9 V kemudian dihubungkan pada kit praktikum.
•Kabel downloader dihubungkan dari PC ke sismin ATMega.
2
•Dari PORTA pada sismin, dihubungkan kabel output ke port output pada DT-51. •Dari PORTD pada
sismin, dihubungkan kabel ke port input pada DT-51 •Kodingan ditulis,
kemudian didownload ke dalam sismin.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 4 Flowchart 1.1 Percobaan 1A1 dan 1A2
Analisis:
Dapat dilihat bahwa LED yang menyala berselang-seling, mulai dari LED pada bit 0, ke-2, ke-4, dan ke-6 (hanya bit yang bernilai genap). Hal ini sesuai dengan nilai yang diassign ke dalam PORTA yang mana hanya PAx yang mana x yang bernilai genap yang diberi nilai 1 yang artinya aktif (high). Dapat dilihat pula bbbahhhwa nilai DDRA diset pada nilai 0b11111111 atau 0xFF yang artinya semua PORTA baik dari bit ke-0 sampai bit ke-7 diset dalam mode output.
Kemudian, dengan cara yang hampir sama, pada PORTA diassign nilai 1 untuk PA4, PA2, PA1, dan PA0 yang berarti nilai PORTA diassign 0b00010111 atau sama dengan nilai 23 dalam basis desimal yang merupakan kelompok kami. Hal tersebut bisa dilihat dari LED yang menyala. 4.2 Fasilitas Delay pada AVR
Gambar 1.4 Output Percobaan 1B1
Gambar 1.5 Output Percobaan 1B2
Pre-processing Main Program Set DDRA to 0xFF (PORTA as Output) Set PORTA to 0b01010101 (1A1) or 0b00010111 (1A2) LED Formation as Gambar 1.2 (1A1) or Gambar 1.3 (1A2) 5 0 0 m s 5 0 0 m s
. .
.
5 0 0 m s 5 0 0 m s. .
.
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 5 Flowchart 1.2 Percobaan 1B1 dan 1B2
Gambar 1.6 Output Percobaan 1B3
Pre-processing Main Program Set DDRA to 0xFF (PORTA as output) and set PORTA to 0xFF (initially turns every LED ON) Loop Set PORTA to 0b00110011 (as seen on Gambar 1.4) for 1B1 or 0b00111010 (as seen on Gambar 1.5) for 1B2 Insert 500 ms delays Set PORTA to 0b11001100 (as seen on Gambar 1.4) for 1B1 or 0b00111011 (as seen on Gambar 1.5) for 1B2 Insert 500 ms delays
LED will do as seen on Gambar 1.4
. .
.
1 2 0 m s 1 2 0 m s 1 2 0 m s 1 2 0 m s 1 2 0 m s 1 2 0 m s 12 0 m s 1 2 0 m sLaporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 6 Flowchart 1.3 Percobaan 1B3
Gambar 1.7 Output Percobaan 1B4 Pre-processing Main Program Make variable i (unsigned char) then set it to 0xFE Re-set PORTA to i Insert 120 ms delays Set i to (i << 1) | (i >> 7) Set DDRA to 0xFF (PORTA as output) and set PORTA to i (0xFE) Loop
LED will do as seen on Gambar 1.6
. .
.
1 2 0 m s 1 2 0 m s 1 2 0 m s 1 2 0 m s 1 2 0 m s 1 2 0 m s 12 0 m s 1 2 0 m s 1 2 0 m s 12 0 m s 1 2 0 m s 1 2 0 m s 1 20 m s 1 2 0 m s 1 2 0 m s 1 2 0 m sLaporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 7 Flowchart 1.4 Percobaan 1B4
Analisis:
Dari library yang digunakan, terlihat bahwa program menggunakan/mengakses library delay. Selain itu, program juga menggunakan nilai clock 1 MHz. Terlihat pula bahwa PORTA dijadikan sebagai output yang terlihat pada pengassignan DDRA pada 0xFF. Kemudian pada body program, terdapat tiga kali pengassignan nilai PORTA yang mana untuk kedua pengassignan PORTA diikuti dengan perintah,
_delay_ms(500);
Kodingan ini berarti bahwa untuk pengassignan pertama PORTA, PORTA akan aktif semua (LED menyala semua) sebelum memasuki loop. Kemudian pada pengassignan PORTA yang terdapat pada loop while(1) terdapat
pengesetan nilai delay yang sesuai dengan perintah yang dituliskan sebelumnya. Delay yang digunakan adalah 500 ms. Sehingga jika hasilnya sesuai dengan kodingan, maka LED akan berkedip dengan selang 500 ms yang mana LED akan berkedip-kedip bergantian dari LED0, LED1, LED4, dan LED5 menyala dan yang lain mati ke LED2, LED3, LED6, dan LED7 menyala dan yang lain mati. Kemudian, untuk perintah while(1) merupakan perintah untuk melakukan loop tak-hingga kali tanpa syarat tertentu untuk keluar dari loop tersebut.
Untuk percobaan selanjutnya (1B2), dengan penjelasan yang sama, diperoleh LED berkedip dengan selang 500 ms yang mana LED akan berkedip-kedip bergantian dari LED1, LED3, LED4, dan LED5 menyala dan yang lain mati ke LED0, LED1, LED3, LED4, dan LED5 menyala dan yang lain mati. Nilai LED yang berkedip tersebut merepresentasikan nilai biner dari tiga digit terakhir NIM kami yaitu 05810 dan 05910.
Percobaan berikutnya (1B3) menggunakan clock 8 MHz. Nilai clock ini diperoleh dengan menggunakan sumber clock eksternal yaitu kristal. Pengaksesan sumber clock eksternal ini dilakukan dengan mengetikkan perintah,
avrdude –c ponyser –p atmega8535 –P com1 –U hfuse:w:0xD9:m –U lfuse:w:0xEF:m
pada command prompt MS Windows sebelum melakukan kodingan dan pendownloadan kodingan ke sismin.
Pada percobaan ini, juga digunakan fasilitas delay yang terlihat dari library yang digunakan (#include <util/delay.h>). Terlihat dalam body program bahwa sebelum program memasuki loop, maka dibuat variabel unsigned char i yang diassign nilai 0b11111110 atau 0xFE. Setelah itu, PORTA diset sebagai output dengan mengassign nilai 0xFF ke dalam DDRA. Kemudian nilai i ini diassign ke dalam PORTA yang artinya, LED akan menyala semua kecuali LED0. Berikutnya, dalam body loop dengan loop tak-hingga, dilakukan pengassignan PORTA dengan i sekali lagi yang bertujuan agar nilai PORTA selalu terisi dengan nilai i yang baru. Lalu, digunakan delay sebesar 120 ms untuk setiap perubahan nyala LED. Terakhir, diset nilai i dengan perintah,
i=(i<<1)|(i>>7);
Perintah ini merupakan perilaku yang akan LED-LED nanti tampilkan yang dideskripsikan sebagai berikut.
Pertama, i diassign nilai 0xFE atau 0b11111110, kemudian i ini akan memasuki loop yang diakhir loop akan diupdate dengan nilai i yang baru yaitu,
Pre-processing Main Program Make variable i (unsigned char) then set it to 0xFE Re-set PORTA to i Insert 120 ms delays Set i to (i << 1) | (i >> 7) Set DDRA to 0xFF (PORTA as output) and set PORTA to i (0xFE) Set integer counter variable k Re-set PORTA to i Insert 120 ms delays Set i to (i >> 1) | (i << 7) First loop Main Loop
First loop will do until k = 6 (from k = 0)
First loop breaks when k = 7 then enters second loop
Second loop Second loop will do until k = 6 (from k = 0) Second loop breaks when k = 7 then enters first loop
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 8 ( ) ( ) ( ) ( )
dengan simbol | (or) merepresentasikan penjumlahan dalam domain biner. Nilai i ini akan selalu diupdate oleh loop yang jika diteruskan maka nilai bit 0 dalam nilai i seolah-olah akan berjalan ke kiri kemudian ketika nilai bit 0 ini mencapai bit ke-7, maka otomatis bit 0 ini akan memosisikan diri pada bit ke-0 yang kemudian akan berjalan ke kiri lagi, demikian nilai i ini dalam loop sehingga, LED (yang mati) akan terlihat seolah-olah berjalan dari kiri ke kanan kemudian langsung ke paling kiri setelah LED yang mati ini mencapai paling kanan (terlihat seperti memutar).
Percobaan terakhir dari bagian B ini (1B4) adalah memodifikasi percobaan sebelumnya (1B3) sehingga LED yang mati tadi akan melakukan bouncing back setelah mencapai bagian paling ujung (paling kiri atau paling kanan). Pada percobaan ini, dalam loop utama terdapat 2 loop lain yang mana untuk loop pertama menangani kasus ketika LED mati berjalan dari paling kiri ke paling kanan dan loop kedua menangani kasus ketika LED mati berjalan dari paling kanan ke paling kiri. Kedua loop ini menggunakan counter integer k. Dari kombinasi kedua loop ini dalam loop utama while(1) diperoleh perilaku LED mati berjalan yang dimulai dari paling kiri (LED0) ke paling kanan (LED7) kemudian bouncing back ke kiri dari paling kanan (LED7) ke paling kiri (LED0) kemudian bouncing back lagi ke kanan dan begitu seterusnya. Berikut penjelasan untuk loop kedua dalam loop utama,
( ) ( )
( ) ( )
Nilai bit 1 merepresentasikan LED menyala, sementara bit 0 merepresentasikan LED mati. Sehingga seolah-olah LED mati terlihat berjalan. 4.3 PORTA sebagai Output dan PORTD sebagai Input
Gambar 1.8 Output Percobaan 1C1
Gambar 1.9 Output Percobaan 1C2
LED
SWITCH. .
.
1 2 0 m s 1 2 0 m s 12 0 m s 1 2 0 m s 1 20 m s 1 2 0 m s 1 2 0 m s 1 2 0 m s 1 20 m s 1 2 0 m s 1 2 0 m s 1 2 0 m sLED
SWITCH. .
.
5 00 m s 5 0 0 m s SWITCHLED
1 2 0 m s 1 2 0 m s 1 2 0 m s 1 2 0 m s SWITCHLED
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 9 Flowchart 1.5 Percobaan 1C1
Flowchart 1.6 Percobaan 1C2
Analisis:
Dari kodingan yang digunakan, terlihat bahwa dalam body program, DDRA diset sebagai output dengan mengassign nilai 0xFF sementara DDRD diset sebagai input dengan mengassign nilai 0x00 sehingga PORTDn akan dijadikan sebagai pin input. Kemudian, resistor pull-up diset aktif dengan cara mengassign nilai SFIOR dengan 0<<PUD. Setelah itu, nilai PORTAx diassign dengan bit 1 semua sehingga PORTA diassign dengan 0xFF. Pada body program, digunakan variabel i yang bertipe unsigned char sebagai pengeset supaya output akan sesuai dengan input. Pada body loop dapat dilihat bahwa nilai i diassign dengan nilai PIND atau dengan kata lain, i menyimpan nilai PIND yang kemudian nilai PIND yang telah disimpan pada variabel i, oleh variabel i nilai PIND ini diassign ke dalam PORTA sehingga nilai PORTA nantinya akan sesuai dengan nilai PIND sehingga apa yang ditampilkan oleh LED akan sama dengan apa yang dimasukkan oleh switch input yang mana jika LED pada switch input menyala artinya switch berada pada kondisi ON.
Percobaan selanjutnya (1C2), adalah memodifikasi percoban sebelumnya (1C1) sehingga output akan menghasilkan output dari percobaan 1B2 jika input switch berada dalam keadaan NIM 05810
atau 0b00111010, menghasilkan output dari percobaan 1B4 jika input switch berada dalam keadaan 05910 atau 0b00111011, dan menghasilkan
output 1A2 untuk keadaan input selain keadaan di atas. Pre-processing Main Program Make variable i (unsigned char) as storage variable Set DDRA to 0xFF (PORTA as output) and set DDRD to 0x00 (PORTD as input, PIND) Activate pull-up internal resistor and set PORTA
to 0xFF Main Loop
Read PIND value then store
it to i
PORTA takes i value to its
value
LEDn will light up for every active (ON) SWITCHn as seen on Gambar 1.8 Pre-processing Main Program Make variable a (unsigned char) as storage variable Set DDRA to 0xFF (PORTA as output) and set DDRD to 0x00 (PORTD as input, PIND) Activate pull-up internal resistor and set PORTA to 0xFF Main Loop
Read PIND value then store
it to a Compare a to the specified value a = 0b00111010 Condition B a = 0b00111011 Condition C a is not equal to 0b00111010 and 0b00111011 Do project 1A2 Do project 1B2 Do project 1B4 LED will do as seen on Gambar 1.5 LED will do as seen on Gambar 1.7
LED will do as seen on Gambar 1.3 Condition A
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1 0
Dapat dilihat dari kodingan yang digunakan bahwa dilakukan pengubahan pada body program terutama pada body loop. Digunakan variabel a sebagai penympan nilai dari PIND untuk kemudian dibandingkan dengan nilai seperti yang diminta spesifikasi. Untuk memenuhi ketiga spesifikasi yang diminta, maka digunakan pula perintah kondisional if yang mana jika nilai variabel a (yang berisi PIND) sama dengan 0b00111010 (05810) maka output LED akan
bertingkah seperti percobaan 1B2 (berkedip dengan representasi tiga digit terakhir NIM anggota kelompok), sementara jika nilai variabel a (yang berisi PIND) sama dengan 0b00111011 (05910) maka LED akan bertingkah seperti
percobaan 1B4 (berjalan dengan mode bouncing back di setiap ujung), dan jika nilai variabel a tidak sama dengan kondisi tersebut di atas, maka LED akan bertingkah seperti percobaan 1A2 (menyala dengan representasi nomor kelompok). Nilai PIND (8 bit biner) merupakan representasi dari input switch yang mana jika switch tertentu aktif (ON, yang mana terlihat dari LED pada switch menyala) maka bit yang mewakili switch tersebut bernilai 1. Contohnya, jika SW0, SW1, SW3, SW4, dan SW5 ON, maka nilai PIND adalah 0b00111011 yang artinya keadaan ini memasuki kondisi 2. Nilai PIND ini kemudian akan disimpan dalam variabel a untuk kemudian nilai variabel a ini akan dibandingkan dalam body loop sehingga diperoleh kondisi 2 dalam spesifikasi. Output yang diperoleh dari kondisi ini adalah sama dengan output yang diperoleh pada percobaan 1B4 (LED mati berjalan dari kiri ke kanan kemudian saat mencapai ujung bouncing back dan berjalan ke arah sebaliknya).
5. K
ESIMPULANDari percobaan dapat disimpulkan bahwa:
a. Untuk mengetahui apa saja yang terdapat dan disediakan oleh ATMega 8535, digunakan datasheet dari ATMega 8535, termasuk di dalamnya tentang PORT, PIN, clock, dan register.
b. Output pada ATMega 8535 dapat diset dengan cara mengeset nilai register yang berkaitan dengan output tersebut dengan nilai hex 0xFF. Contohnya adalah ketika
PORTA ingin diset sebagai output, maka pada program berbahasa C yang ditulis, dalam body program ditulis DDRA = 0xFF. Setelah PORTA diset sebagai output, dengan mengeset nilai PORTAn dengan 1, maka didapat nilai PORTA pada bit ke-n bernilai high, begitupun sebaliknya, jika PORTAn diset dengan nilai 0, maka PORTA pada bit ke-n (PORTA ke-n bernilai low).
Untuk mengeset PORTx sebagai input, maka nilai DDRx harus diset dengan 0, sebagai contoh saat ingin mengeset PORTD sebagai input, maka DDRD diset dengan nilai hex 0x00 dengan cara menuliskan pada body program DDRD = 0x00. Jika nilai DDRxn diset pada nilai 0 (atau PORTxn diset sebagai pin input) dan nilai PORTxn diset pada nilai 0, maka akan memasuki keadaan tri-state, sementara jika DDRxn diset pada nilai yang sama sementara PORTxn diset pada nilai 1, maka pull-up resistor akan aktif.
c. Untuk mengeset fuse bit, digunakan perintah:
avrdude –c ponyser –p atmega8535 –P com1 – U hfuse:w:0xD9:m –U lfuse:w:0xEF:m
pada command prompt yang terdapat pada MS Windows.
Dapat dilihat, untuk menggunakan clock dari sumber eksternal, nilai low-fuse bitnya saja yang diganti, yaitu dari yang bernilai 0xE1 atau 0b11100001 yang berarti masih menggunakan clock internal menjadi 0xEF atau 0x11101111 yang berarti sudah menggunakan clock eksternal (kristal, 8 MHz).
6. D
AFTARP
USTAKA[1] Hutabarat, Mervin T., Waskita Adijarto, dan
Harry Septanto, Praktikum Sistem Mikroprosesor,
Sekolah Teknik Elektro dan Informatika
Institut Teknologi Bandung, Bandung, 2013
[2] ATMega 8535 Datasheet from www.atmel.com
[3]
http://id.wikipedia.org/wiki/ATMega8535
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 11
7. L
AMPIRAN //PERCOBAAN 1A1 //======================================================================== #include <avr/io.h> int main(void) {DDRA = 0xFF; //inisialisasi PORTA sebagai OUTPUT
PORTA = (1<<PA6)|(1<<PA4)|(1<<PA2)|(1<<PA0); //nilai OUTPUT return 0; } //======================================================================== //PERCOBAAN 1A2 //======================================================================== #include <avr/io.h> int main(void) {
DDRA = 0xFF; //inisialisasi PORTA sebagai OUTPUT
PORTA = (1<<PA4)|(1<<PA2)|(1<<PA1)|(1<<PA0); //nilai OUTPUT = 23 dalam Desimal return 0; } //======================================================================== //PERCOBAAN 1B1 //======================================================================== #include <avr/io.h>
#define F_CPU 1000000UL //Menggunakan Internal Clock 1MHz #include <util/delay.h>
int main(void) {
DDRA = 0xFF; //PORTA sebagai OUTPUT PORTA = 0xFF; //menyalakan semua LED //Mengeset LED supaya berkedip-kedip while (1) { PORTA = 0b00110011; _delay_ms(500); PORTA = 0b11001100; _delay_ms(500); } return 0; } //========================================================================
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 12 //Percobaan 1B2
//======================================================================== #include <avr/io.h>
#define F_CPU 1000000UL //Menggunakan Internal Clock 1MHz #include <util/delay.h>
int main(void) {
DDRA = 0xFF; //PORTA sebagai OUTPUT PORTA = 0xFF; //menyalakan semua LED //Mengeset LED supaya berkedip-kedip while (1) { PORTA = 0b00111010; //058 in Decimal _delay_ms(500); PORTA = 0b00111011; //059 in Decimal _delay_ms(500); } return 0; } //========================================================================= //Percobaan 1B3 //========================================================================= #include <avr/io.h>
#define F_CPU 8000000UL //Menggunakan Internal Clock 1MHz #include <util/delay.h>
int main(void) {
unsigned char i = 0xFE;
DDRA = 0xFF; //PORTA sebagai OUTPUT
PORTA = i; //menyalakan LED dari Bit 1 sampai Bit 7 //Mengeset LED supaya nyala memutar
while (1) { PORTA = i; _delay_ms(120); i=(i<<1)|(i>>7); } return 0; } //=========================================================================
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 13 //Percobaan 1B4
//========================================================================= #include <avr/io.h>
#define F_CPU 8000000UL //Menggunakan Internal Clock 1MHz #include <util/delay.h>
int main(void) {
unsigned char i = 0xFE;
DDRA = 0xFF; //PORTA sebagai OUTPUT
PORTA = i; //menyalakan LED dari Bit 1 sampai Bit 7 int k; //counter
//Mengeset LED supaya nyala ke ujung kiri akan kembali ke kanan while (1) { for (k=0; k<7; k++) { PORTA = i; _delay_ms(120); i=(i<<1)|(i>>7); }; for (k=0; k<7; k++) { PORTA = i; _delay_ms(120); i=(i>>1)|(i<<7); } } return 0; } //========================================================================= //Percobaan 1C1 //========================================================================= #include <avr/io.h> int main(void) { unsigned char i;
DDRA = 0xFF; //inisialisasi PORTA sebagai OUTPUT DDRD = 0x00; //inisialisasi PORTD sebagai INPUT SFIOR = 0<<PUD; //aktivasi resistor pull-up internal PORTA = 0xFF; while(1) { i = PIND; PORTA = i; } return 0; } //=========================================================================
Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 14 //Percobaaan 1C2
//========================================================================= #include <avr/io.h>
#define F_CPU 8000000UL #include <avr/delay.h> int main(void)
{
unsigned char a;
DDRA = 0xFF; //inisialisasi PORTA sebagai OUTPUT DDRD = 0x00; //inisialisasi PORTD sebagai INPUT SFIOR = 0<<PUD; //aktivasi resistor pull-up internal PORTA = 0xFF; while(1) { a = PIND; if (0b00111010 == a) { PORTA = 0b00111010; //058 in Decimal _delay_ms(500); PORTA = 0b00111011; //059 in Decimal _delay_ms(500); } else if (0b00111011 == a) {
unsigned char i = 0xFE; int k; for (k=0; k<7; k++) { PORTA = i; _delay_ms(120); i=(i<<1)|(i>>7); }; for (k=0; k<7; k++) { PORTA = i; _delay_ms(120); i=(i>>1)|(i<<7); } } else {
PORTA = (1<<PA4)|(1<<PA2)|(1<<PA1)|(1<<PA0); //nilai OUTPUT }
}
return 0; }