Skip to content Skip to sidebar Skip to footer

Teori Dasar Input / Output Port Digital pada AVR Menggunakan Bahasa C

AVR® 8-bit mikrokontroler mengontrol aplikasi melalui pin Input dan Output (I/O) digitalnya. Pin ini dapat memonitor tegangan apa pun yang ada sebagai input impedansi tinggi dan memasok atau mengeluarkan arus sebagai output digital tegangan tinggi atau rendah.

Pin-pin ini biasanya disusun dalam delapan kelompok dan disebut sebagai PORT. AVR menggunakan alfabet untuk memberi nama port ini, misalnya: PortA, PortB, dll. Pin PortA disebut sebagai PA0 - PA7.

Ikhtisar

Semua port AVR memiliki fungsi Read-Modify-Write saat digunakan sebagai port I/O digital. Ini berarti bahwa arah satu pin port dapat diubah tanpa secara tidak sengaja mengubah arah pin lainnya.

Hal yang sama berlaku ketika mengubah nilai drive (jika dikonfigurasi sebagai output) atau mengaktifkan / menonaktifkan resistor pull-up (jika dikonfigurasi sebagai input).

Setiap buffer output memiliki karakteristik drive simetris dengan kemampuan sink dan sumber yang tinggi.

Driver pin cukup kuat untuk mendorong tampilan LED secara langsung. Semua pin port memiliki resistor pull-up yang dapat dipilih secara individual dengan resistansi invarian tegangan-suplai.

Semua pin I/O memiliki dioda perlindungan untuk VCC dan Ground seperti yang ditunjukkan pada gambar dibawah.


Mengkonfigurasi Pin Digital I / O

Setiap port terdiri dari tiga register:
DDRx - Data Direction Register
PORTx - Pin Output Register
PINx - Pin Input Register
di mana x = Nama Port (A, B, C atau D)

Bit Register

DDxn diakses di alamat I/O DDRx
PORTxn bit pada alamat PORTx I/O
PINxn bit pada alamat I/O PINx
Di mana n = pin bit number di Port Register

DDxn

Bit-bit DDxn dalam DDRx Register memilih arah pin ini.
a. Jika DDxn ditulis ke '1', Pxn dikonfigurasi sebagai pin output.
b. Jika DDxn ditulis ke '0', Pxn dikonfigurasi sebagai pin input.

PORTxn

Bit PORTxn dalam register PORTx memiliki dua fungsi. Mereka dapat mengontrol status keluaran pin dan pengaturan pin input.

Sebagai Output:
a. Jika '1' ditulis ke bit ketika pin dikonfigurasi sebagai pin output, pin port didorong tinggi. 
b. Jika '0' ditulis ke bit ketika pin dikonfigurasi sebagai pin output, pin port didorong rendah.

Sebagai Input:
Ja. ika '1' ditulis ke bit ketika pin dikonfigurasi sebagai pin input, resistor pull-up diaktifkan. 
b. Jika '0' ditulis ke bit ketika pin dikonfigurasikan sebagai pin input, pin port dinyatakan-tri.

PINxn

Bit PINxn dalam register PINx digunakan untuk membaca data dari port pin. Ketika pin dikonfigurasikan sebagai input digital (dalam register DDRx), dan pull-up diaktifkan (dalam register PORTx) bit akan menunjukkan status sinyal pada pin (tinggi atau rendah). 
Catatan: Jika port membuat output, maka membaca register PINx akan memberi Anda data yang telah ditulis ke pin port.

Sebagai Input Tri-State:

Ketika register PORTx menonaktifkan resistor pull-up, input akan dinyatakan tri-state, membiarkan pin dibiarkan mengambang. Saat dibiarkan dalam keadaan ini, bahkan muatan statis kecil yang ada pada objek di sekitarnya dapat mengubah keadaan logika pin. Jika Anda mencoba membaca bit terkait dalam register pin, statusnya tidak dapat diprediksi.


Contohnya

1. PORTA sebagai INPUT

DDRA = 0x00;   // jadikan PORTA semua input
PORTA = 0xFF; // aktifkan semua pull-up
data = PINA;      // baca pin PORTA menjadi data variabel

2. PORTB diatur ke input tri-state:

DDRB  = 0x00;        //make PORTB all inputs 
PORTB = 0x00;        //disable pull-ups and make all pins tri-state



Kiat dan Trik

Beralih Antara Input dan Output

Ketika beralih antara tri-state ({DDxn, PORTxn} = 0b00) dan output tinggi ({DDxn, PORTxn} = 0b11) , keadaan perantara dengan salah satu diaktifkan diaktifkan ({DDxn, PORTxn} = 0b01) atau output rendah ({ DDxn, PORTxn} = 0b10) harus terjadi.

Biasanya, kondisi yang diaktifkan pull-up sepenuhnya dapat diterima, karena lingkungan impedansi tinggi tidak akan melihat perbedaan antara driver tinggi yang kuat dan pull-up. Jika tidak demikian halnya, bit PUD dalam Daftar MCUCR dapat diatur untuk menonaktifkan semua pull-up di semua port.

Beralih antara input dengan pull-up dan output rendah menghasilkan masalah yang sama. Anda harus menggunakan tri-state ({DDxn, PORTxn} = 0b00) atau status high output ({DDxn, PORTxn} = 0b11) sebagai langkah perantara.


Nonaktifkan Pull-Ups Over-ride

The PUD Pull-up Nonaktifkan bit dalam MCUCR mendaftar dapat over-naik DDRx dan PORTx pengaturan pull-up

Ketika bit ini ditulis ke salah satu, pull-up di port I/O dinonaktifkan bahkan jika Register DDxn dan PORTxn dikonfigurasi untuk mengaktifkan pull-up ({DDxn, PORTxn} = 0b01) .

Mengalihkan Pin I/O

Menulis '1' ke PINxn mengubah nilai PORTxn terlepas dari nilai DDRxn. Instruksi perakitan SBI dapat digunakan untuk beralih satu bit tunggal di port.

Pin Tidak Terhubung

Jika beberapa pin tidak digunakan, kami sarankan Anda memastikan bahwa pin ini memiliki level yang telah ditentukan, meskipun sebagian besar input digital dinonaktifkan dalam mode deep sleep.

Input mengambang harus dihindari untuk mengurangi konsumsi saat ini di semua mode lain di mana input digital diaktifkan (Reset, Mode Aktif dan Mode Idle).

Metode paling sederhana untuk memastikan level yang ditentukan dari pin yang tidak digunakan adalah mengaktifkan pull-up internal. Dalam hal ini, pull-up akan dinonaktifkan selama reset.

Jika konsumsi daya rendah selama reset penting, kami sarankan Anda menggunakan pull-up eksternal atau pull-down. Menghubungkan pin yang tidak digunakan secara langsung ke VCC atau GND TIDAK dianjurkan, karena ini dapat menyebabkan arus berlebih jika pin secara tidak sengaja dikonfigurasi sebagai output.

Sumber : translate dari microchipdeveloper.com

Post a Comment for "Teori Dasar Input / Output Port Digital pada AVR Menggunakan Bahasa C"