Usar ADCs em aplicativos de alto nível
Importante
Esta é a documentação do Azure Sphere (herdado). O Azure Sphere (herdado) será desativado em 27 de setembro de 2027 e os usuários devem migrar para o Azure Sphere (integrado) até esse momento. Use o seletor de versão localizado acima do sumário para exibir a documentação do Azure Sphere (Integrado).
Este tópico descreve como usar ADCs (conversores analógico-digital) em um aplicativo de alto nível. Confira Usar periféricos em um aplicativo com capacidade para tempo real para obter informações sobre o uso de ADC em RTApps.
O Azure Sphere dá suporte à conversão de analógico para digital. Um ADC converte uma entrada analógica em um valor digital correspondente. O número de canais de entrada e a resolução (como o número de bits de saída do ADC) dependem do dispositivo.
O exemplo de ADC_HighLevelApp demonstra como comunicar-se com ADCs em um dispositivo MT3620.
Os snippets periféricos do ADC demonstram duas maneiras de interagir com os ADCs usando funções simplificadas ou avançadas .
O MT3620 contém um ADC de 12 bits com oito canais de entrada. O ADC compara uma voltagem de entrada com uma voltagem de referência e produz um valor entre 0 e 4095 como saída. Os canais de entrada do ADC e os pinos do GPIO de GPIO41 a GPIO48 mapeiam para os mesmos pinos no MT3260. No entanto, se o aplicativo usar o ADC, todos os oito pinos serão alocados para uso como entradas ADC. Nenhum deles poderá ser usado para GPIO.
Requisitos de ADC
Os aplicativos que se comunicam com os ADCs devem incluir o arquivo de cabeçalho adc.h apropriado e adicionar as configurações de ADC ao manifesto do aplicativo.
Todos os aplicativos devem definir hardware de destino deles e incluir o arquivo de cabeçalho da definição de hardware correspondente.
Arquivos de cabeçalho
#include <applibs/adc.h>
#include "path-to-your-target-hardware.h"
Substitua "path-to-your-target-hardware.h" pelo caminho para o arquivo de cabeçalho do seu hardware.
Configurações do manifesto do aplicativo
As configurações de ADC no manifesto do aplicativo listam os controladores ADC que são acessados pelo aplicativo. Para definir essas configurações, adicione a funcionalidade Adc
ao manifesto do aplicativo e, em seguida, adicione cada controlador ADC à funcionalidade. O tópico manifesto do aplicativo do Azure Sphere tem mais detalhes.
Em seu código, use as constantes definidas para seu hardware para identificar os controladores ADC. O compilador converterá esses valores em valores brutos quando você criar o aplicativo.
Por exemplo, há um trecho de um manifesto para um aplicativo que direciona uma RDB (placa de desenvolvimento de referência) MT3620.
"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
O trecho a seguir mostra como especificar o mesmo controlador ADC em um aplicativo destinado ao Kit de Início do Avnet MT3620:
"Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]
Visão geral da implementação
Para implementar seu aplicativo para acessar o ADC, use uma das duas abordagens:
Este tópico descreve os dois métodos. Você pode encontrar o código de exemplo completo para cada método aqui:
Acesso ADC com funções simplificadas
Os aplicativos de alto nível do Azure Sphere podem se comunicar com ADCs chamando as APIs de ADC de Applibs.
Abrir um controlador ADC
Para abrir um controlador ADC para acesso, chame ADC_Open e passe a ID do controlador como um parâmetro. Um descritor do arquivo será retornado se a chamada for bem-sucedida. Caso contrário, um valor de erro será retornado.
int ADC_Open(ADC_ControllerId id);
Ler de um ADC
Para ler do ADC, chame ADC_Poll. Você passa os seguintes parâmetros para ADC_Poll: o descritor de arquivo retornado por ADC_Open, o canal do ADC e um ponteiro para onde o valor do ADC será armazenado.
Para obter o número de bits válidos (resolução) retornados pela função ADC_Poll, chame ADC_GetSampleBitCount.
Definir a tensão de referência do ADC
Chame ADC_SetReferenceVoltage para definir a tensão de referência do ADC.
O MT3620 tem uma referência de 2,5 volts no próprio chip. Como alternativa, ele pode ser conectado a uma referência de tensão externa menor ou igual a 2,5 volts.
Acesso ADC com funções avançadas
Como alternativa às funções simplificadas de alto nível para interagir com o periférico, você pode aproveitar a biblioteca ioctl para abrir a funcionalidade. Esta seção explica como fazer isso e como o uso de ioctls difere do uso das funções genéricas do Linux.
O snippet de funções avançadas do ADC mostra como ler o ADC usando as funções avançadas do Azure Sphere.
Como exemplo, você pode ver uma comparação lado a lado da leitura do ADC com as implementações sysfs simplificadas, avançadas e linux:
- Snippet de funções simplificadas do ADC
- Snippet de nós do ADC Linux Sysfs
- Snippet de funções avançadas do ADC
Abra o canal ADC
Para abrir um controlador ADC para acesso, use a chamada Linux open
passando o caminho para o diretório que começará com /dev/adc<number>
onde 'number' é o ID do controlador. Um descritor de arquivo será retornado se a chamada tiver sido bem-sucedida. Caso contrário, um valor de erro será retornado.
Consulte Exemplo de implementação para obter parâmetros, permissões e verificação de erros.
Obter a especificação do canal
Ao usar as funções avançadas, obtenha a especificação do canal usando chamadas ioctl antes de pesquisar, definir a tensão de referência ou obter a contagem de bits de amostra. Esta etapa pode ser ignorada codificando alguns dos valores obtidos, mas não é recomendado. Observe que essa etapa é tratada pelo código fornecido nas funções simples.
// 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
Defina a tensão de referência
Para definir a tensão de referência de um canal usando a API avançada:
Defina as informações do ADC preenchidas na estrutura que foi recuperada
iio_ioctl_chan_spec_buffer
na especificação Get Channel.Obtenha o índice de propriedade da propriedade a ser definida para o canal.
Escreva a tensão de referência usando o índice de propriedades e as informações de especificação do canal.
Para obter o índice da propriedade de tensão de referência:
A partir da
iio_ioctl_chan_spec_buffer
estrutura recuperada na especificação Get Channel, use ochannel
valor do campo e, a partir dochannel
campo, use o valor doext_info
campo. Oext_info
campo é umiio_ioctl_chan_spec_ext_info
struct que é o cabeçalho de uma lista vinculada de descritores de propriedade para o canal.A partir de 0, percorra a lista contando os nós até que o
name
campo corresponda àreference_voltage
string.- Cada nó na lista tem um campo "próximo" que aponta para o próximo nó na lista. O último nó aponta para NULL.
- O contador resultante é o índice da propriedade.
Para definir a tensão de referência, use o
IIO_WRITE_CHANNEL_EXT_INFO_IOCTL
ioctl que recebe um struct do tipoiio_ioctl_write_chan_ext_info
, que contém os dados relevantes (neste caso, a tensão), o canal a ser definido e a propriedade específica (tensão de referência) definida para esse canal.
Obter a contagem de bits de amostra
Para definir a tensão de referência usando as APIs avançadas:
Certifique-se de obter as informações do canal ADC adequado. Essas informações são preenchidas
iio_ioctl_chan_spec_buffer
na estrutura que foi recuperada na seção Obter Especificação de Canal.Obtenha o índice de propriedade da propriedade que você deseja ler para o canal, que nesse caso é a contagem de bits de amostra.
Use ioctls do Linux para obter a contagem de bits de exemplo usando o índice de propriedade e a especificação do canal.
Para obter o índice de propriedade da contagem de bits de amostra, use um processo idêntico a Definir tensão de referência. No entanto, ao iterar sobre a lista vinculada chamada ext_info
do tipo iio_ioctl_chan_spec_ext_info
, corresponda à string current_bits
.
Chame o ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL
para preencher um struct do tipo iio_ioctl_read_chan_ext_info
com os dados necessários no buffer
campo.
Leia o canal ADC
Para ler o canal ADC, pesquise usando a chamada IIO_READ_RAW_CHANNEL_INFO_IOCTL
ioctl , passando a estrutura iio_ioctl_raw_channel_info
que será preenchida com os dados do canal ADC.
Exemplo de implementação
Para ler o ADC usando a implementação avançada do Azure Sphere, consulte o snippet no exemplo de aplicativo ADC Advanced.
Para comparar as diferenças na semântica entre interagir com o periférico ao codificar para o Azure Sphere e codificar para um sistema Linux genérico, consulte LinuxSysfsNodes.
Suporte à placa de desenvolvimento MT3620
Os recursos do ADC compatíveis para o MT3620 estão na lista de Status do Suporte do MT3620. O Guia do usuário da placa de desenvolvimento MT3620 descreve o layout e as funções do pino.
A pasta HardwareDefinitions no diretório de instalação do SDK do Microsoft Azure Sphere contém definições para placas, módulos e chips de desenvolvimento comuns do Azure Sphere. Ele contém arquivos de cabeçalho e JSON que definem as interfaces mestras para o MT3620, MT3620 RDB, juntamente com outro hardware MT3620. O local padrão para a pasta HardwareDefinitions é C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
no Windows e /opt/azurespheresdk/HardwareDefinitions
no Linux.
O repositório de Exemplos do Azure Sphere no GitHub contém arquivos de cabeçalho e JSON que definem interfaces mestras SPI para o chip MT3620 e o RDB MT3620, juntamente com outro hardware MT3620.-->