Menggunakan ADC dalam aplikasi tingkat tinggi
Topik ini menjelaskan cara menggunakan konverter analog-ke-digital (ADC) dalam aplikasi tingkat tinggi. Lihat Menggunakan periferal dalam aplikasi berkemampuan real-time untuk informasi tentang penggunaan ADC di RTApps.
Azure Sphere mendukung konversi analog ke digital. ADC mengonversi input analog ke nilai digital terkait. Jumlah saluran input dan resolusi (sebagai jumlah bit output ADC) bergantung pada perangkat.
Contoh ADC_HighLevelApp menunjukkan cara mengakses ADC di perangkat MT3620.
Potongan ADC Peripheral menunjukkan dua cara untuk berinteraksi dengan ADC menggunakan fungsi yang disederhanakan atau tingkat lanjut .
MT3620 berisi ADC 12-bit dengan 8 saluran input. ADC membandingkan tegangan input dengan tegangan referensi dan menghasilkan nilai antara 0 dan 4095 sebagai outputnya. Saluran input ADC dan GPIO menyematkan GPIO41 hingga GPIO48 memetakan ke pin yang sama pada MT3260. Namun, jika aplikasi Anda menggunakan ADC, semua 8 pin dialokasikan untuk digunakan sebagai input ADC. Tidak ada yang dapat digunakan untuk GPIO.
Persyaratan ADC
Aplikasi yang berkomunikasi dengan ADC harus menyertakan file header adc.h dan menambahkan pengaturan ADC ke manifes aplikasi.
Semua aplikasi harus mengatur perangkat keras target mereka dan menyertakan file header definisi perangkat keras yang terkait.
File Header
#include <applibs/adc.h>
#include "path-to-your-target-hardware.h"
Ganti "path-to-your-target-hardware.h" dengan jalur ke file header untuk perangkat keras Anda.
Pengaturan manifes aplikasi
Pengaturan ADC dalam manifes aplikasi mencantumkan pengontrol ADC yang diakses oleh aplikasi. Untuk mengonfigurasi pengaturan ini, tambahkan Adc
kapabilitas ke manifes aplikasi, lalu tambahkan setiap pengontrol ADC ke kapabilitas. Topik manifes aplikasi Azure Sphere memiliki detail selengkapnya.
Dalam kode Anda, gunakan konstanta yang ditentukan untuk perangkat keras Anda untuk mengidentifikasi pengontrol ADC. Kompiler akan menerjemahkan nilai ini ke nilai mentah saat Anda menyusun aplikasi.
Misalnya, berikut ini adalah kutipan dari manifes aplikasi untuk aplikasi yang menargetkan papan pengembangan referensi MT3620 (RDB).
"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Kutipan berikut ini memperlihatkan cara menentukan pengontrol ADC yang sama dalam aplikasi yang menargetkan Avnet MT3620 Starter Kit:
"Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]
Gambaran umum implementasi
Untuk menerapkan aplikasi Anda untuk mengakses ADC, gunakan salah satu dari dua pendekatan:
Topik ini menjelaskan kedua metode. Anda dapat menemukan kode sampel lengkap untuk setiap metode di sini:
Akses ADC dengan fungsi yang disederhanakan
Aplikasi tingkat tinggi Azure Sphere dapat mengakses ADC dengan menghubungi API ADC Applibs.
Membuka pengontrol ADC
Untuk membuka pengontrol ADC untuk akses, hubungi ADC_Open dan berikan ID pengontrol sebagai parameter. Deskriptor file akan dikembalikan jika panggilan berhasil. Jika tidak, nilai kesalahan akan dikembalikan.
int ADC_Open(ADC_ControllerId id);
Membaca dari ADC
Untuk membaca dari ADC, hubungi ADC_Poll. Anda meneruskan parameter berikut ini ke ADC_Poll: deskriptor file yang dikembalikan oleh ADC_Open, saluran ADC, dan penunjuk ke tempat nilai ADC akan disimpan.
Untuk mendapatkan jumlah bit (resolusi) valid yang dikembalikan oleh fungsi ADC_Poll, hubungi ADC_GetSampleBitCount.
Mengatur tegangan referensi ADC
Hubungi ADC_SetReferenceVoltage untuk mengatur tegangan referensi ADC.
MT3620 memiliki referensi on-chip 2.5 volt. Atau, dapat dihubungkan ke referensi tegangan eksternal yang kurang dari atau sama dengan 2,5 volt.
Akses ADC dengan fungsi tingkat lanjut
Sebagai alternatif fungsi sederhana tingkat tinggi untuk berinteraksi dengan periferal, Anda dapat memanfaatkan pustaka ioctl untuk membuka fungsionalitas. Bagian ini menjelaskan cara melakukan itu dan cara menggunakan ioctls berbeda dari penggunaan fungsi Linux generik.
Snippet Fungsi Tingkat Lanjut ADC memperlihatkan cara membaca ADC menggunakan fungsi tingkat lanjut Azure Sphere.
Sebagai contoh, Anda bisa melihat perbandingan berdampingan membaca ADC dengan implementasi sysfs linux yang disederhanakan, tingkat lanjut, dan linux:
- Snippet Fungsi ADC Yang Disederhanakan
- Snippet Node Sysfs Linux ADC
- Cuplikan Snippet Fungsi Tingkat Lanjut ADC
Membuka saluran ADC
Untuk membuka pengontrol ADC untuk akses, gunakan panggilan Linux open
yang melewati jalur ke direktori yang akan dimulai dengan /dev/adc<number>
di mana 'number' adalah ID pengontrol. Deskriptor file dikembalikan jika panggilan berhasil. Jika tidak, nilai kesalahan akan dikembalikan.
Lihat Contoh Implementasi untuk parameter, izin, dan pemeriksaan kesalahan.
Dapatkan spesifikasi saluran
Saat menggunakan fungsi tingkat lanjut, dapatkan spesifikasi saluran dengan menggunakan panggilan ioctl sebelum pemungutan suara, mengatur tegangan referensi atau mendapatkan sampel hitungan bit. Langkah ini dapat dilewati dengan mengoding keras beberapa nilai yang diperoleh, tetapi tidak disarankan. Perhatikan bahwa langkah ini ditangani oleh kode yang disertakan dalam fungsi sederhana.
// Used to get the size of the buffer to allocate for the channel specification
IIO_GET_CHANNEL_SPEC_BUFFER_TOTAL_SIZE_IOCTL
// Used to get the channel specification and set the ‘iio_ioctl_chan_spec_buffer’ struct properly
IIO_GET_CHANNEL_SPEC_BUFFER_IOCTL
Mengatur tegangan referensi
Untuk mengatur tegangan referensi saluran menggunakan API tingkat lanjut:
Atur informasi ADC yang diisi dalam
iio_ioctl_chan_spec_buffer
struktur yang diambil dalam spesifikasi Get Channel.Dapatkan indeks properti properti untuk mengatur saluran.
Tulis tegangan referensi menggunakan indeks properti dan informasi spesifikasi saluran.
Untuk mendapatkan indeks properti tegangan referensi:
Dari struktur yang
iio_ioctl_chan_spec_buffer
diambil dalam spesifikasi Get Channel, gunakan nilai darichannel
bidang dan, darichannel
bidang, gunakan nilai dari bidang.ext_info
Bidangext_info
adalah structiio_ioctl_chan_spec_ext_info
yang merupakan kepala daftar deskriptor properti yang ditautkan untuk saluran.Mulai dari 0, menelusuri daftar yang menghitung simpul hingga
name
bidang cocok denganreference_voltage
string.- Setiap simpul dalam daftar memiliki bidang "berikutnya" yang mengarah ke simpul berikutnya dalam daftar. Titik terakhir menunjuk ke NULL.
- Penghitung yang dihasilkan adalah indeks properti.
Untuk mengatur tegangan referensi, gunakan
IIO_WRITE_CHANNEL_EXT_INFO_IOCTL
ioctl yang mengambil tipe structiio_ioctl_write_chan_ext_info
, yang berisi data yang relevan (dalam hal ini tegangan), saluran untuk diatur, dan properti tertentu (tegangan referensi) yang diatur untuk saluran tersebut.
Dapatkan sampel hitungan bit
Untuk mengatur tegangan referensi menggunakan API tingkat lanjut:
Pastikan Anda mendapatkan informasi saluran ADC yang tepat. Informasi ini diisi dalam
iio_ioctl_chan_spec_buffer
struktur yang diambil di bagian Dapatkan Spesifikasi Saluran.Dapatkan indeks properti properti yang ingin Anda baca untuk saluran, yang dalam hal ini adalah jumlah bit sampel.
Gunakan ioctls Linux untuk mendapatkan bit count sampel menggunakan indeks properti dan spesifikasi saluran.
Untuk mendapatkan indeks properti dari sampel hitungan bit, gunakan proses yang identik dengan Atur tegangan referensi. Namun, saat berulang di atas daftar tertaut yang disebut ext_info
tipe iio_ioctl_chan_spec_ext_info
, cocok dengan string current_bits
.
Hubungi ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL
untuk mengisi struct tipe iio_ioctl_read_chan_ext_info
dengan data yang diperlukan dalam buffer
bidang.
Membaca saluran ADC
Untuk membaca saluran ADC, polling menggunakan panggilan IIO_READ_RAW_CHANNEL_INFO_IOCTL
ioctl , yang masuk dalam struct iio_ioctl_raw_channel_info
yang akan diisi dengan data dari saluran ADC.
Contoh implementasi
Untuk membaca ADC menggunakan implementasi tingkat lanjut Azure Sphere, lihat cuplikan di sampel aplikasi Adc Advanced.
Untuk membandingkan perbedaan semantik antara berinteraksi dengan periferal saat pengodean untuk Azure Sphere dan pengodean untuk sistem Linux generik, lihat LinuxSysfsNodes.
Dukungan MT3620
Fitur ADC yang didukung untuk MT3620 tercantum dalam Status Dukungan MT3620. Panduan pengguna papan pengembangan MT3620 menjelaskan tata letak pin dan fungsi pin.
Folder HardwareDefinitions di direktori penginstalan SDK Microsoft Azure Sphere berisi definisi untuk papan pengembangan, modul, dan chip Azure Sphere yang umum. Ini berisi file header dan JSON yang menentukan antarmuka master untuk MT3620, MT3620 RDB, bersama dengan perangkat keras MT3620 lainnya. Lokasi default untuk folder HardwareDefinitions ada C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
di Windows dan /opt/azurespheresdk/HardwareDefinitions
Linux.