Použití adcs v aplikacích vysoké úrovně
Důležité
Toto je dokumentace k Azure Sphere (starší verze). Azure Sphere (starší verze) se vyřazuje 27. září 2027 a uživatelé musí do této doby migrovat do Azure Sphere (integrované). K zobrazení dokumentace k Azure Sphere (integrované) použijte selektor verzí umístěný nad obsahem.
Toto téma popisuje, jak používat analogové a digitální převaděče (ADC) v aplikaci vysoké úrovně. Informace o používání ADC v aplikacích RTApps najdete v tématu Použití periferních zařízení v reálném čase .
Azure Sphere podporuje analogové digitální převody. 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) jsou závislé na zařízení.
Ukázka ADC_HighLevelApp ukazuje, jak získat přístup k adcs na zařízení MT3620.
Fragmenty kódu periferního zařízení ADC ukazují dva způsoby interakce se službami ADCS pomocí zjednodušených nebo pokročilých funkcí.
MT3620 obsahuje 12bitovou 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 špendlíky GPIO41 až GPIO48 mapují na stejné kolíky na MT3260. Pokud ale vaše aplikace používá ADC, přidělují se všechny 8 kolíky pro použití jako vstupy ADC. Pro GPIO se nedá použít žádná z nich.
Požadavky služby ADC
Aplikace, které komunikují se službami ADCS, musí obsahovat soubor hlaviček adc.h a přidat nastavení služby ADC do manifestu aplikace.
Všechny aplikace musí nastavit 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 vašeho hardwaru.
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
do manifestu aplikace funkci a pak do této funkce přidejte každý kontroler ADC. Téma manifestu aplikace Azure Sphere obsahuje další podrobnosti.
V kódu použijte konstanty definované pro váš hardware k identifikaci kontrolerů ADC. Kompilátor tyto hodnoty při sestavování aplikace přeloží na nezpracované hodnoty.
Tady je například výňatek z manifestu aplikace pro aplikaci, která cílí na referenční vývojovou desku MT3620 (RDB).
"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
Následující výňatek 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 ke službě ADC se zjednodušenými funkcemi
Aplikace azure Sphere na vysoké úrovni mají přístup ke službě ADCS voláním rozhraní API ADC služby Applibs.
Otevření kontroleru ADC
Pokud chcete otevřít kontroler 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 uložení hodnoty ADC.
Pokud chcete získat 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á referenční 2,5 V. Alternativně může být připojen k externímu napětí, který je menší nebo roven 2,5 V.
Přístup ke službě 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 využít knihovnu ioctl k otevření funkcí. Tato část vysvětluje, jak to udělat a jak se použití ioctls liší od použití obecných linuxových funkcí.
Fragment kódu rozšířených funkcí ADC 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:
- Fragment kódu zjednodušených funkcí ADC
- Fragment kódu uzlů Sysfs pro ADC s Linuxem
- Fragment kódu rozšířených funkcí ADC
Otevření kanálu ADC
Pokud chcete otevřít kontroler ADC pro přístup, použijte volání Linuxu open
předávající 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.
Viz Příklad implementace parametrů, oprávnění a kontroly chyb.
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 vzorkového bitového počtu. 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 zpracovává kód zadaný 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:
Nastavte informace ADC vyplněné ve
iio_ioctl_chan_spec_buffer
struktuře, která byla načtena ve specifikaci Get Channel.Získejte index vlastností vlastnosti, která se má nastavit pro kanál.
Napište referenční napětí pomocí informací o indexu vlastnosti a specifikaci kanálu.
Získání indexu referenční vlastnosti napětí:
iio_ioctl_chan_spec_buffer
Ze struktury načtené ve specifikaci Get Channel použijte hodnotu zchannel
pole a zchannel
pole použijte hodnotu zext_info
pole. Poleext_info
jeiio_ioctl_chan_spec_ext_info
struktura, která je hlavou propojeného seznamu popisovačů vlastností pro kanál.Počínaje hodnotou 0 projdete seznamem, který počítá uzly, dokud
name
pole neodpovídá řetězcireference_voltage
.- Každý uzel v seznamu má pole "další", které odkazuje na další uzel v seznamu. Poslední uzel odkazuje na hodnotu NULL.
- Výsledný čítač je index vlastnosti.
Chcete-li nastavit referenční napětí, použijte
IIO_WRITE_CHANNEL_EXT_INFO_IOCTL
ioctl, který přebírá strukturu typuiio_ioctl_write_chan_ext_info
, která obsahuje relevantní data (v tomto případě napětí), kanál k nastavení a konkrétní vlastnost (referenční napětí), která je nastavena pro daný kanál.
Získání ukázkového počtu bitů
Nastavení referenčního napětí pomocí pokročilých rozhraní API:
Ujistěte se, že dostáváte informace o správném kanálu ADC. Tyto informace se vyplní ve
iio_ioctl_chan_spec_buffer
struktuře, která byla načtena v části Získat specifikaci kanálu.Získejte index vlastností vlastnosti, kterou chcete pro kanál přečíst, což je v tomto případě ukázkový počet bitů.
Pomocí linuxových ioctls získáte ukázkový počet bitů pomocí indexu vlastností a specifikace kanálu.
Pokud chcete získat index vlastností ukázkového počtu bitů, použijte proces shodný s nastavením referenčního napětí. Při iterování přes propojený seznam s názvem ext_info
typu iio_ioctl_chan_spec_ext_info
však odpovídá řetězci 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 buffer
poli.
Čtení kanálu ADC
Pokud chcete číst kanál ADC, dotazování pomocí volání IIO_READ_RAW_CHANNEL_INFO_IOCTL
ioctl , předávání struktury iio_ioctl_raw_channel_info
, která bude naplněna daty z kanálu ADC.
Příklad implementace
Pokud chcete číst ADC pomocí pokročilé implementace Azure Sphere, podívejte se na fragment kódu v ukázce rozšířené aplikace ADC.
Pokud chcete porovnat rozdíly v sémantice mezi interakcí s periferním zařízením při psaní kódu pro Azure Sphere a kódování pro obecný linuxový systém, přečtěte si téma LinuxSysfsNodes.
Podpora pro MT3620
Podporované funkce ADC pro MT3620 jsou uvedené ve stavu podpory MT3620. Uživatelská příručka vývojové desky MT3620 popisuje funkce připnutí a připnutí.
Složka HardwareDefinitions v instalačním adresáři sady Microsoft Azure Sphere SDK obsahuje definice pro běžné vývojové desky, 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.
Úložiště Ukázek Azure Sphere na GitHubu obsahuje hlavičky a soubory JSON, které definují hlavní rozhraní SPI pro čip MT3620 a MT3620 RDB a další hardware MT3620.-->