Sdílet prostřednictvím


Použití řadičů služby ACS v aplikacích vysoké úrovně

Toto téma popisuje, jak používat převaděče analog-to-digital v aplikaci vysoké úrovně. Informace o použití ADC v RTApps najdete v tématu Použití periferních zařízení v aplikaci podporující reálném čase .

Azure Sphere podporuje převod analogové na digitální. ADC převede analogový vstup na odpovídající digitální hodnotu. Počet vstupních kanálů a rozlišení (jako počet výstupních bitů ADC) závisí na zařízení.

Ukázka ADC_HighLevelApp ukazuje, jak získat přístup k řadičům ACS na zařízení MT3620.

Fragmenty periferních zařízení ADC ukazují dva způsoby interakce se službami ADC pomocí zjednodušených nebo pokročilých funkcí.

MT3620 obsahuje 12bitové ADC s 8 vstupními kanály. ADC porovná vstupní napětí s referenčním napětím a jako výstup vytvoří hodnotu mezi 0 a 4095. Vstupní kanály ADC a GPIO připnou GPIO41 až GPIO48 na mapě na stejné špendlíky na MT3260. Pokud ale vaše aplikace používá ADC, všech 8 pinů se přidělí pro použití jako vstupy ADC. Žádné z nich nelze použít pro GPIO.

Požadavky ADC

Aplikace, které komunikují se službami ADC, musí obsahovat soubor hlaviček adc.h a přidat nastavení ADC do manifestu aplikace.

Všechny aplikace musí nastavit svůj cílový hardware a zahrnout odpovídající soubor hlavičky definice hardwaru.

Soubory hlaviček

 #include <applibs/adc.h>
 #include "path-to-your-target-hardware.h"

Nahraďte path-to-your-target-hardware.h cestou k souboru hlaviček pro váš hardware.

Nastavení manifestu aplikace

Nastavení ADC v manifestu aplikace obsahuje seznam kontrolerů ADC, ke kterým aplikace přistupuje. Pokud chcete tato nastavení nakonfigurovat, přidejte Adc funkci do manifestu aplikace a pak do funkce přidejte každý kontroler ADC. Další podrobnosti najdete v tématu manifestu aplikace Azure Sphere.

V kódu použijte konstanty, které jsou definované pro váš hardware, k identifikaci kontrolerů ADC. Kompilátor při sestavování aplikace přeloží tyto hodnoty na nezpracované hodnoty.

Tady je například výňatek z manifestu aplikace pro aplikaci, která cílí na panel mt3620 pro vývoj referencí (RDB).

   "Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]

Následující úryvek ukazuje, jak určit stejný kontroler ADC v aplikaci, která cílí na úvodní sadu Avnet MT3620:

   "Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]

Přehled implementace

Pokud chcete implementovat aplikaci pro přístup k ADC, použijte jeden ze dvou přístupů:

Toto téma popisuje obě metody. Kompletní vzorový kód pro každou metodu najdete tady:

Přístup k ADC se zjednodušenými funkcemi

Aplikace vysoké úrovně Azure Sphere mají přístup k řadičům ADC voláním rozhraní API applibs ADC.

Otevření kontroleru ADC

Pokud chcete otevřít řadič ADC pro přístup, zavolejte ADC_Open a předejte ID kontroleru jako parametr. Pokud je volání úspěšné, vrátí se popisovač souboru. V opačném případě se vrátí chybová hodnota.

int ADC_Open(ADC_ControllerId id);

Čtení z ADC

Pokud chcete číst z ADC, zavolejte ADC_Poll. Do ADC_Poll předáte následující parametry: popisovač souboru vrácený ADC_Open, kanál ADC a ukazatel na místo, kam bude hodnota ADC uložena.

Pokud chcete zjistit počet platných bitů (rozlišení) vrácených funkcí ADC_Poll, zavolejte ADC_GetSampleBitCount.

Nastavení referenčního napětí ADC

Voláním ADC_SetReferenceVoltage nastavíte referenční napětí ADC.

MT3620 má na čipu 2,5 V odkaz. Případně může být připojen k externímu napětí, které je menší než nebo rovno 2,5 V.

Přístup k ADC s pokročilými funkcemi

Jako alternativu ke zjednodušeným funkcím vysoké úrovně pro interakci s periferním zařízením můžete k otevření funkcí využít knihovnu ioctl. Tato část vysvětluje, jak to udělat a jak se použití ioctls liší od použití obecných funkcí Linuxu.

ADC Advanced Functions Snippet ukazuje, jak číst ADC pomocí pokročilých funkcí Azure Sphere.

Jako příklad můžete vidět souběžné porovnání čtení ADC se zjednodušenými, pokročilými a linuxovými implementacemi sysfs:

Otevření kanálu ADC

Pokud chcete otevřít kontroler ADC pro přístup, použijte volání Linuxu open , které předá cestu k adresáři, která začne tím /dev/adc<number> , kde "číslo" je ID kontroleru. Pokud bylo volání úspěšné, vrátí se popisovač souboru. V opačném případě se vrátí chybová hodnota.

Informace o parametrech, oprávněních a kontrole chyb najdete v příkladu implementace .

Získání specifikace kanálu

Při použití pokročilých funkcí získejte specifikaci kanálu pomocí volání ioctl před dotazováním, nastavením referenčního napětí nebo získáním počtu ukázkových bitů. Tento krok lze přeskočit pevným kódováním některých získaných hodnot, ale nedoporučuje se. Všimněte si, že tento krok je zpracován kódem zadaným v jednoduchých funkcích.


// 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

Nastavení referenčního napětí

Nastavení referenčního napětí kanálu pomocí pokročilého rozhraní API:

  1. Nastavte informace ADC naplněné ve iio_ioctl_chan_spec_buffer struktuře, která byla načtena ve specifikaci Získat kanál.

  2. Získejte index vlastnosti, která se má nastavit pro kanál.

  3. Zapište referenční napětí pomocí informací o indexu vlastností a specifikaci kanálu.

Získání indexu vlastnosti referenčního napětí:

  1. iio_ioctl_chan_spec_buffer Ze struktury načtené ve specifikaci Get Channel použijte hodnotu z channel pole a z channel pole použijte hodnotu z ext_info pole. Pole ext_info je iio_ioctl_chan_spec_ext_info struktura, která je v čele propojeného seznamu popisovačů vlastností pro kanál.

  2. Počínaje hodnotou 0 projdete seznamem, který počítá uzly, dokud name pole neodpovídá řetězci reference_voltage .

    • Každý uzel v seznamu obsahuje pole "další", které odkazuje na další uzel v seznamu. Poslední uzel odkazuje na hodnotu NULL.
    • Výsledný čítač je index vlastnosti.
  3. Pokud chcete nastavit referenční napětí, použijte IIO_WRITE_CHANNEL_EXT_INFO_IOCTL ioctl, který přijímá strukturu typu iio_ioctl_write_chan_ext_info, která obsahuje relevantní data (v tomto případě napětí), kanál, který se má nastavit, a specifickou vlastnost (referenční napětí), která je nastavena pro daný kanál.

Získání počtu ukázkových bitů

Nastavení referenčního napětí pomocí pokročilých rozhraní API:

  1. Ujistěte se, že dostáváte informace o správném kanálu ADC. Tyto informace jsou vyplněny ve iio_ioctl_chan_spec_buffer struktuře, která byla načtena v části Získat specifikaci kanálu.

  2. Získejte index vlastnosti, kterou chcete číst pro kanál, což je v tomto případě ukázkový počet bitů.

  3. Pomocí ioctl v Linuxu získáte ukázkový počet bitů pomocí indexu vlastností a specifikace kanálu.

Pokud chcete získat index vlastností počtu bitů vzorku, použijte proces shodný s nastavením referenčního napětí. Při iteraci nad propojeným seznamem s názvem ext_info typu iio_ioctl_chan_spec_ext_infose však shodujte s řetězcem current_bits.

Voláním metody ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL naplníte strukturu typu iio_ioctl_read_chan_ext_info potřebnými daty v bufferpoli.

Čtení kanálu ADC

Pokud chcete číst kanál ADC, dotazujte se pomocí volání IIO_READ_RAW_CHANNEL_INFO_IOCTLioctl a předejte strukturu iio_ioctl_raw_channel_info , která bude naplněna daty z kanálu ADC.

Příklad implementace

Pokud chcete číst ADC s využitím pokročilé implementace Azure Sphere, projděte si fragment kódu v ukázce aplikace ADC Advanced.

Pokud chcete porovnat rozdíly v sémantice mezi interakcí s periferním zařízením při kódování pro Azure Sphere a kódováním pro obecný linuxový systém, přečtěte si téma LinuxSysfsNodes.

Podpora pro MT3620

Podporované funkce ADC pro MT3620 jsou uvedené v tématu Stav podpory MT3620. Uživatelská příručka vývojové desky MT3620 popisuje rozložení připínáčku a funkce připnutí.

Složka HardwareDefinitions v instalačním adresáři sady Microsoft Azure Sphere SDK obsahuje definice pro běžné vývojové panely, moduly a čipy Azure Sphere. Obsahuje hlavičky a soubory JSON, které definují hlavní rozhraní pro MT3620, MT3620 RDB a další hardware MT3620. Výchozí umístění složky HardwareDefinitions je C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions ve Windows a /opt/azurespheresdk/HardwareDefinitions v Linuxu.