Eksperimen Mikrokontroler input/output Zainal Abidin1) 1)
Divisi Sistem Mikrokontroler, PLATOGEOSAINS Meteorologi, FITB – ITB – Indonesia
Rabu, 18 November 2009
Mikrokontroler ATMEGA 8535 dan 32 memiliki 4 buah port yang dapat difungsikan sebagai input maupun output. Masing-masing port terdiri dari 8 bit yang dapat diakses sekaligus maupun tiap bit. Empat buah port tersebut yaitu PORTA, PORTB, PORTC dan PORTD. Karena bersifat dua arah (bidirectional), maka diperlukan suatu register yang fungsinya untuk mengatur kapan pin-pin dalam port tersebut diberlakukan sebagai input/output, yaitu DDRA, DDRB, DDRC dan DDRD. Jika DDRx (x = A, B, C atau D) bernilai high (1), maka PORTxn (n = 0, 1, 2, 3, 4, 5, 6 atau 7) akan berfungsi sebagai output. Sedangkan jika DDRx bernilai low (0), maka PORTxn berfungsi sebagai input. Jika PORTxn bernilai high (1) ketika berfungsi sebagai input, PINxn akan menjadi sumber arus (jika secara eksternal di-pulled/tarik low, yaitu dihubungkan dengan ground). Eksperimen sebelum ini membahas mengenai komparator analog. Komparator analog tersebut mengeluarkan tegangan 1.25V-1.37V ketika Vin > Vref dan menghasilkan tegangan 1.85V-1.93V ketika Vref > Vin. Eksperimen ini bertujuan untuk mengetahui respon mikrokontroler terhadap level tegangan tersebut. Sebelum memulai eksperimen, penulis ingin mengetahui perbedaan penggunaan perintah “PINx.n” dengan “PORTx.n” di CodeVisionAVR C. Penulis menduga bahwa “PINx.n” berfungsi jika PORTxn adalah output dan “PORTx.n” digunakan jika PORTxn adalah input. Untuk membuktikannya akan digunakan sebuah rangkaian sederhana dibawah ini:
PLATOGEOSAINS | Eksperimen Mikrokontroler
1
Gambar 1 Rangkaian input/output sederhana Mula-mula mula PA0 diatur sebagai input dan PA1 sebagai output.. Di CodeVisionAVR C, pengaturan port tiap bit secara otomatis dapat dengan mudah dilakukan dengan generator kode (code generator). ). Namun demikian, penulis lebih tertarik untuk mengatur secara manual guna memperdalam pemahaman mengen mengenai sistem mikrokontroler. PORTA terdiri dari 8 bit, begitu juga dengan PORTB, PORTC dan PORTD. Setiap pin di port tersebut mewakili satu bit, contoh: PA0 mewakili bit 0 PORTA, PA1 mewakili bit 1 PORTA dan seterusnya. Jika menginginkan PA0 menjadi input dan PA1 menjadi output,, maka bit 0 PORTA dan DDRA harus low (0). Sedangkan bit 1 PORTA dan DDRA A harus high (1). Supaya mempermudah dalam pemrograman, bit 2-7 2 di-set 0.
PLATOGEOSAINS | Eksperimen Mikrokontroler
2
Register PORTA Bit
7
6
5
4
3
2
1
0
Nilai
0
0
0
0
0
0
1
0
Register DDRA Bit
7
6
5
4
3
2
1
0
Nilai
0
0
0
0
0
0
1
0
CodeVisionAVR C menghendaki setiap pendeklarasian nilai register dalam bentuk heksadesimal. Sehingga PORTA dan DDRA diatas harus dikonversi terlebih dahulu dari biner ke desimal, kemudian dikonversi lagi menjadi heksadesimal. HeksaBiner PORTA 00000010 DDRA
Desimal
Desimal
(0×27)+(0×26)+(0×25)+(0×24)+(0×23)+(0×22)+(1×21)+(0×20)
0×02
2
0×02
00000010
Kode di CodeVisionAVR C adalah sebagai berikut: //PORTA PORTA = 0×02 DDRA = 0×02 Di awal sudah dituliskan bahwa jika PORTxn bernilai 1 ketika berfungsi sebagai input dan terhubung dengan ground, maka PORTxn tersebut dapat menjadi sumber arus bagi pin tertentu yang diinginkan. Menurut pemahaman penulis, kode diatas akan menyebabkan LED menyala dengan nilai PORTA0 = 0 dan PORTA1 = 1. Nilai PORTA0 dan PORTA1 yang sebenarnya dapat diketahui dengan menampilkan register kedua pin tersebut pada program utama. while (1) { for(i=0;;i++) { printf("%d : %d %d %d %d\r\n",i,PORTA.0,PINA.0,PORTA.1,PINA.1); }; PLATOGEOSAINS | Eksperimen Mikrokontroler
3
}; };
Gambar 2 Tampilan program di terminal Terminal menunjukkan bahwa PORTA.0 = PINA.0 dan PORTA.1 = PINA.1. Hal ini berarti dugaan penulis salah, perintah “PINx.n” dan “PORTx.n” mempunyai fungsi dan keluaran yang sama. Saat program dijalankan, LED menyala sebentar kemudian padam dengan tegangan PA1 = 5.07 Volt dimana Vcc (tegangan sumber) = 5.08 Volt dan VPA0 = 0 Volt. LED akan menyala jika terdapat beda potensial yang melewatinya. PA1 diprogram sebagai output dengan nilai 1 (Vcc). Secara teori, seharusnya LED padam tetapi ternyata LED menyala sebentar di awal. Sebelum menyimpulkan hasil, sebaiknya dilakukan eksperimen lagi dengan mengubah nilai PORTA1 menjadi 0 dimana seharusnya LED menyala terus. Register PORTA Bit
7
6
5
4
3
2
1
0
Nilai
0
0
0
0
0
0
0
0
Kode program //PORTA PORTA = 0×00 DDRA = 0×02
Setelah program di-download ke chip dan dijalankan, LED menyala terus hingga sumber arus dimatikan.
PLATOGEOSAINS | Eksperimen Mikrokontroler
4
Terminal juga memperlihatkan bahwa ketika switch belum ditekan, nilai PORTA0 = 1 dan jika diukur dengan voltmeter menunjukkan tegangan 2.54V-2.55V. Akan tetapi jika ditekan, nilainya menjadi 0 dan bertegangan 0.02 Volt.
Gambar 3 Tampilan program di terminal Temuan baru diperlihatkan oleh Gambar 3, yaitu terdapat perbedaan keluaran dari “PINx.n” dan “PORTx.n”. Sehingga pernyataan sebelumnya yang mematahkan dugaan penulis sudah tidak sah untuk digunakan. Kejadian sebenarnya adalah PORTx.n menentukan nilai awal dari suatu pin dan tidak akan berubah walaupun terjadi perubahan pada pin-pin tersebut. Sedangkan PINx.n merupakan nilai real-time dari pin-pin itu, sehingga mengikuti perubahan yang terjadi secara eksternal (akibat pengaruh di luar sistem internal mikrokontroler). Setelah menemukan perbedaan penggunaan PORTx.n dan PINx.n, eksperimen inti dapat dimulai sekarang. Mula-mula output komparator analog LF353P (Texas Instrument) dihubungkan dengan PA0. Kemudian dilakukan pengukuran parameter awal yang meliputi Vs, Vref, Vin, Vout dan Vcc. Diperoleh Vs= 18.07V-18.08V, Vref= 8.73V-8.74V, Vin= 18.08V, Vout= 1.22V dan Vcc= 5.09V. Vin diubah-ubah hingga LED menyala/padam. Hasil pantaun di terminal ditunjukkan pada Gambar 4.
PLATOGEOSAINS | Eksperimen Mikrokontroler
5
Gambar 4 Respon mikrokontroler terhadap output komparator analog Mikrokontroler merespon level tegangan output 1.25V-1.37V (LED padam) dari komparator analog sebagai level TTL (Transistor Transistor Logic) Vcc (1) dan level TTL ground (0) ketika output komparator analog berada pada level tegangan 1.85V-1.93V.
Bersambung ……
PLATOGEOSAINS | Eksperimen Mikrokontroler
6