Ü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 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:

  1. Kanal Alma belirtimindeiio_ioctl_chan_spec_buffer alınan yapıda doldurulan ADC bilgilerini ayarlayın.

  2. Kanal için ayarlanacağı özelliğin özellik dizinini alın.

  3. Özellik dizini ve kanal belirtimi bilgilerini kullanarak başvuru gerilimini yazın.

Referans gerilim özelliğinin dizinini almak için:

  1. iio_ioctl_chan_spec_bufferKanal Al belirtiminde alınan yapıdanchannel, alandaki değeri kullanın ve alandan channel alanındaki değeri ext_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.

  2. 0'dan başlayarak, alan dizeyle eşleşene kadar name düğümleri sayarak listeden reference_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.
  3. 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_infoyapı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:

  1. 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.

  2. Kanal için okumak istediğiniz özelliğin özellik dizinini alın( bu örnekte örnek bit sayısıdır).

  3. Ö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_infoolarak adlandırılan ext_info bağlı liste üzerinde yinelenirken dizesiyle current_bitseş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_IOCTLkullanarak 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.