Saya mencoba memahami GPIO, dan telah membaca banyak posting blog yang berbeda dan saya pikir saya hampir mendapatkannya, tetapi masih berjuang dengan beberapa hal.
Saya telah melihat beberapa referensi untuk GPIO hanya bisa bekerja dengan nilai-nilai biner, tetapi tulisan lain yang mengatakan nilainya bisa dari 0-255. Saya berasumsi ini adalah perbedaan antara GPIO analog dan digital. Apakah itu benar? Apakah mungkin pin GPIO tunggal dapat bertindak sebagai analog dan digital?
Jawaban:
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.
sumber
Anda kemungkinan besar merujuk keluar analog Arduino, yang sering menggunakan pin GPIO dengan PWM perangkat lunak . GPIO biasanya memiliki tiga negara. Output Tinggi, Output Rendah, dan Input / High-Z (Impedansi Tinggi, di mana itu tidak mempengaruhi output).
PWM dengan cepat mengubah output dari Output Tinggi ke Output rendah (periode), untuk membuat rata-rata (Duty Cycle), memungkinkan untuk sesuatu yang terlihat seperti nilai analog. Dengan mengaktifkan BIO GPIO pada siklus kerja 50% (atau 128), outputnya masih biner, tetapi rata-rata setengah jalan antara Tinggi dan Rendah.
Pikirkan bola lampu. Anda melihatnya Hidup, atau Mati. Tapi itu benar-benar menyala dan mati 60 kali per detik, sangat cepat sehingga Anda tidak melihat itu berkedip sangat cepat. Tapi nyalakan dan matikan bohlam secara manual dengan sangat lambat, dan Anda akan melihatnya berkedip. Dengan 255, ini berarti 100% aktif, dan kurang dari 255 adalah sebagian kecil dari 100% aktif.
Begitulah cara Binary GPIO dapat bertindak seperti pin Analog 255 state.
sumber
Bit GPIO dapat berupa 0 atau 1. Port GPIO 8 bit, terbuat dari 8 bit berturut-turut, dapat berkisar antara 00000000 dan 11111111, atau 255 desimal. Ini tidak ada hubungannya dengan konsep "analog"
sumber