Pin GPIO adalah pin 'input / output keperluan umum'. Ini secara default hanya tinggi atau rendah (level tegangan, tinggi tegangan suplai pengontrol mikro, rendah biasanya dibumikan, atau 0V). Tetapi tingkat 'tinggi' dan 'rendah' biasanya diberikan sebagai tegangan sebagai proporsi dari tegangan suplai. Jadi apa pun yang biasanya di atas 66% dari tegangan suplai dianggap sebagai level logika 'tinggi' yang berarti beberapa perangkat tegangan rendah dapat berbicara dengan perangkat tegangan tinggi selama tingkatnya termasuk dalam apa yang dianggap 'tinggi'. Mikrokontroler daya rendah 1,8-2,7,7 V atau penerima GPS misalnya akan mengalami kesulitan berkomunikasi langsung ke mikrokontroler 5V karena apa yang dilihat oleh perangkat bertegangan rendah sebagai 'tinggi', perangkat tegangan tinggi tidak akan menganggapnya tinggi sama sekali. Ini untuk menggunakan GPIO sebagai pin input,
Kadang-kadang Anda dapat menggunakan pin TUNGGAL untuk nilai 'analog', dengan mengkonfigurasi pin GPIO untuk digunakan oleh perangkat onboard lain seperti konverter 'analog ke digital' (ADC). Pin diatur ke saluran pada ADC dan ini bertindak sebagai input ke ADC sekarang, bukan pin GPIO normal. Anda kemudian dapat mengatur ADC untuk mengambil sampel, dan membaca nilai register hasil ADC untuk angka-angka seperti 0-1024 jika resolusi 10-bit.
Seperti yang disebutkan seseorang, pin GPIO dapat digunakan dalam perangkat lunak untuk memberikan efek sinyal Pulsed Width Modulation (PWM), biasanya pada kecepatan rendah untuk beralih GPIO. Sebagian besar mikrokontroler memiliki generator PWM khusus yang dapat dikonfigurasi untuk menggunakan pin GPIO sebagai pin output, dan ini sangat cepat dan jauh lebih stabil daripada menggunakan perangkat lunak untuk mengontrol GPIO untuk menghasilkan sinyal PWM. PWM digunakan untuk sinyal gaya 'rata-rata' atau '%' dan memungkinkan Anda untuk melakukan hal-hal seperti lampu redup dan mengendalikan kecepatan motor.
Pin GPIO biasanya diatur dalam kelompok, yang disebut Port. Dalam pengontrol kecil, mereka mungkin arsitektur 8-bit, sehingga port sering dikelompokkan menjadi banyak 8, dan nilai-nilainya dapat dibaca sekaligus pada saat yang sama dengan membaca 'data register' yang mewakili nilai logika tinggi / rendah dari mereka. pin. Demikian pula, Anda dapat mengatur pin menjadi output dan kemudian menulis 8-bit ke dalam register data, dan pengendali mikrokontroler GPIO akan membaca nilai perubahan register, dan mendorong pin tinggi atau menarik pin rendah tergantung pada nilai apa yang baru saja Anda tetapkan.
Pada pengontrol yang lebih baru seperti ARM Cortex A8 dan A9 seperti di Raspberry Pi dan BeagleBone, pengontrol GPIO dan opsi berbeda sangat rumit. Mereka menggunakan arsitektur 32-bit, sehingga sebagian besar pin GPIO diatur ke dalam blok 32-bit, bahkan jika tidak semua benar-benar dapat digunakan (beberapa mungkin didedikasikan atau tidak diaktifkan). BeagleBone (yang telah saya kerjakan sebelumnya) memiliki beberapa opsi yang sangat mengagumkan untuk jumlah pin yang besar, dan kadang-kadang Anda harus menggunakan alat 'pin mux', yang memungkinkan Anda untuk mengatur mode khusus pin tertentu untuk berbagai hal. seperti PWM, tangkapan pulsa, keluaran waktu, input saluran analog (ADC), dan bahkan pemetaan (pada BeagleBone) ke sub-prosesor industri yang tersedia pada inti ARM, tetapi dianggap sebagai prosesor independen dan memerlukan pemetaan pin sendiri agar untuk terhubung ke dunia luar.