Üst düzey uygulamalarda ADC'leri kullanma
Bu konu başlığında, üst düzey bir uygulamada analogdan dijitale dönüştürücülerin (ADC) nasıl kullanılacağı açıklanmaktadır. RTApps'te ADC kullanımı hakkında bilgi için bkz. Gerçek zamanlı özellikli bir uygulamada çevre birimleri kullanma.
Azure Sphere analogdan dijitale dönüştürmeyi destekler. ADC, analog girişi karşılık gelen dijital değere dönüştürür. Giriş kanallarının sayısı ve çözünürlük (ADC çıkış bit sayısı olarak) cihaza bağlıdır.
ADC_HighLevelApp örneği, MT3620 cihazında ADC'lere nasıl erişeceklerini gösterir.
ADC Çevre Birimi kod parçacıkları, basitleştirilmiş veya gelişmiş işlevler kullanarak ADC'lerle etkileşim kurmanın iki yolunu gösterir.
MT3620, 8 giriş kanalına sahip 12 bit ADC içerir. ADC, giriş voltajını referans voltajla karşılaştırır ve çıkış olarak 0 ile 4095 arasında bir değer üretir. ADC giriş kanalları ve GPIO, GPIO41 ile GPIO48 arasında mt3260 üzerindeki aynı pinlerle eşlenir. Ancak, uygulamanız ADC kullanıyorsa 8 pinin tümü ADC girişi olarak kullanılmak üzere ayrılır. Bunların hiçbiri GPIO için kullanılamaz.
ADC gereksinimleri
ADC'lerle iletişim kuran uygulamaların adc.h üst bilgi dosyasını içermesi ve uygulama bildirimine ADC ayarları eklemesi gerekir.
Tüm uygulamaların hedef donanımlarını ayarlaması ve karşılık gelen donanım tanımı üst bilgi dosyasını içermesi gerekir.
Üst Bilgi Dosyaları
#include <applibs/adc.h>
#include "path-to-your-target-hardware.h"
"path-to-your-target-hardware.h" yerine donanımınızın üst bilgi dosyasının yolunu yazın.
Uygulama bildirimi ayarları
Uygulama bildirimindeki ADC ayarı, uygulama tarafından erişilen ADC denetleyicilerini listeler. Bu ayarları yapılandırmak için, özelliği uygulama bildirimine ekleyin Adc
ve ardından her ADC denetleyicisini bu özelliğe ekleyin. Azure Sphere uygulama bildirimi konusunda daha fazla ayrıntı vardır.
Kodunuzda, ADC denetleyicilerini tanımlamak için donanımınız için tanımlanan sabitleri kullanın. Derleyici, uygulamayı oluştururken bu değerleri ham değerlere çevirir.
Örneğin, mt3620 başvuru geliştirme panosu (RDB) hedefleyen bir uygulamanın uygulama bildiriminden bir alıntı aşağıda verilmiştir.
"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Aşağıdaki alıntı, Avnet MT3620 Starter Kit'i hedefleyen bir uygulamada aynı ADC denetleyicisinin nasıl belirtileceğini gösterir:
"Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]
Uygulamaya genel bakış
Uygulamanızı ADC'ye erişmek üzere uygulamak için iki yaklaşımdan birini kullanın:
Bu konuda her iki yöntem de açıklanmaktadır. Her yöntemin tam örnek kodunu burada bulabilirsiniz:
Basitleştirilmiş işlevlerle ADC erişimi
Azure Sphere üst düzey uygulamaları Applibs ADC API'lerini çağırarak ADC'lere erişebilir.
ADC denetleyicisini açma
Erişim için bir ADC denetleyicisi açmak için ADC_Open çağırın ve denetleyicinin kimliğini parametre olarak geçirin. Çağrı başarılı olursa bir dosya tanımlayıcısı döndürülür. Aksi takdirde bir hata değeri döndürülür.
int ADC_Open(ADC_ControllerId id);
ADC'den okuma
ADC'den okumak için ADC_Poll çağırın. aşağıdaki parametreleri ADC_Poll geçirirsiniz: ADC_Open tarafından döndürülen dosya tanımlayıcısı, ADC kanalı ve ADC değerinin depolanacağı yere yönelik bir işaretçi.
ADC_Poll işlevi tarafından döndürülen geçerli bit sayısını (çözümleme) almak için ADC_GetSampleBitCount çağırın.
ADC referans gerilimini ayarlama
ADC referans voltajını ayarlamak için ADC_SetReferenceVoltage'yi çağırın.
MT3620 çip üzerinde, 2,5 volt referansa sahiptir. Alternatif olarak, 2,5 volttan küçük veya buna eşit bir dış gerilim başvurusuna bağlanabilir.
Gelişmiş işlevlerle ADC erişimi
Çevre birimiyle etkileşime geçmek için üst düzey basitleştirilmiş işlevlere alternatif olarak, işlevselliği açmak için ioctl kitaplığından yararlanabilirsiniz. Bu bölümde bunun nasıl yapılacağını ve ioctl'lerin kullanılmasının genel Linux işlevlerinin kullanılmasından nasıl farklı olduğu açıklanmaktadır.
ADC Gelişmiş İşlevler Kod Parçacığı , Azure Sphere gelişmiş işlevlerini kullanarak ADC'yi nasıl okuyacaklarını gösterir.
Örnek olarak, basitleştirilmiş, gelişmiş ve linux sysfs uygulamalarıyla ADC okuma işleminin yan yana karşılaştırmasını görebilirsiniz:
- ADC Basitleştirilmiş İşlevler Parçacığı
- ADC Linux Sysfs DüğümLeri Parçacığı
- ADC Gelişmiş İşlevler Parçacığı
ADC kanalını açma
Erişim için bir ADC denetleyicisi açmak için, dizin /dev/adc<number>
yolundan geçen Linux open
çağrısını kullanın ve 'number' burada denetleyici kimliğidir. Çağrı başarılı olursa bir dosya tanımlayıcısı döndürülür. Aksi takdirde bir hata değeri döndürülür.
Parametreler, izinler ve hata denetimi için Örnek Uygulama bölümüne bakın.
Kanal belirtimini alma
Gelişmiş işlevleri kullanırken yoklamadan, referans voltajını ayarlamadan veya örnek bit sayısını almadan önce ioctl çağrılarını kullanarak kanal belirtimini alın. Bu adım, alınan bazı değerlerin sabit kodlanmasıyla atlanabilir, ancak önerilmez. Bu adımın basit işlevlerde sağlanan kod tarafından işlendiğini unutmayın.
// 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
Referans gerilimini ayarlama
Gelişmiş API'yi kullanarak bir kanalın başvuru gerilimini ayarlamak için:
Kanal Alma belirtiminde
iio_ioctl_chan_spec_buffer
alınan yapıda doldurulan ADC bilgilerini ayarlayın.Kanal için ayarlanacağı özelliğin özellik dizinini alın.
Özellik dizini ve kanal belirtimi bilgilerini kullanarak başvuru gerilimini yazın.
Referans gerilim özelliğinin dizinini almak için:
iio_ioctl_chan_spec_buffer
Kanal Al belirtiminde alınan yapıdanchannel
, alandaki değeri kullanın ve alandanchannel
alanındaki değeriext_info
kullanın.ext_info
alanı,iio_ioctl_chan_spec_ext_info
kanal için bağlı özellik tanımlayıcıları listesinin başı olan bir yapıdır.0'dan başlayarak, alan dizeyle eşleşene kadar
name
düğümleri sayarak listedenreference_voltage
geçin.- Listedeki her düğümün, listedeki bir sonraki düğüme işaret eden bir "sonraki" alanı vardır. Son düğüm NULL değerini gösterir.
- Elde edilen sayaç özelliğin dizinidir.
Referans voltajını ayarlamak için, ilgili verileri (bu durumda voltaj), ayarlanacağı kanalı ve bu kanal için ayarlanan belirli özelliği (referans voltajı) içeren bir tür
iio_ioctl_write_chan_ext_info
yapısına sahip olan ioctl'yi kullanınIIO_WRITE_CHANNEL_EXT_INFO_IOCTL
.
Örnek bit sayısını alma
Gelişmiş API'leri kullanarak referans gerilimini ayarlamak için:
Uygun ADC kanalının bilgilerini edindiğinizden emin olun. Bu bilgiler Kanal Belirtimini
iio_ioctl_chan_spec_buffer
Al bölümünde alınan yapıda doldurulur.Kanal için okumak istediğiniz özelliğin özellik dizinini alın( bu örnekte örnek bit sayısıdır).
Özellik dizini ve kanal belirtimini kullanarak örnek bit sayısını almak için Linux ioctls kullanın.
Örnek bit sayısının özellik dizinini almak için Referans gerilimini ayarla ile aynı işlemi kullanın. Ancak, türü iio_ioctl_chan_spec_ext_info
olarak adlandırılan ext_info
bağlı liste üzerinde yinelenirken dizesiyle current_bits
eşleşin.
Türünde iio_ioctl_read_chan_ext_info
bir yapıyı alandaki gerekli verilerle doldurmak için ioctl'yi IIO_READ_CHANNEL_EXT_INFO_IOCTL
çağırınbuffer
.
ADC kanalını okuma
ADC kanalını okumak için ioctl çağrısını IIO_READ_RAW_CHANNEL_INFO_IOCTL
kullanarak yoklama, ADC kanalındaki verilerle doldurulacak yapıyı iio_ioctl_raw_channel_info
geçirin.
Örnek uygulama
Azure Sphere gelişmiş uygulamasını kullanarak ADC'yi okumak için ADC Gelişmiş uygulama örneğindeki kod parçacığına bakın.
Azure Sphere kodlaması yaparken çevre birimiyle etkileşim kurma ve genel bir Linux sistemi kodlaması arasındaki semantik farkları karşılaştırmak için bkz. LinuxSysfsNodes.
MT3620 desteği
MT3620 için desteklenen ADC özellikleri MT3620 Destek Durumu'nda listelenir. MT3620 geliştirme panosu kullanıcı kılavuzu, pin düzenini ve pin işlevlerini açıklar.
Microsoft Azure Sphere SDK yükleme dizinindeki HardwareDefinitions klasörü, yaygın Azure Sphere geliştirme panoları, modülleri ve yongaları için tanımlar içerir. DIĞER MT3620 donanımlarıyla birlikte MT3620, MT3620 RDB için ana arabirimleri tanımlayan üst bilgi ve JSON dosyalarını içerir. HardwareDefinitions klasörünün varsayılan konumu Windows ve /opt/azurespheresdk/HardwareDefinitions
Linux'tadırC:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
.