A família de ARM Cortex-M0+ ATSAMC21 possui alimentação de 5V e foi criada visando aplicação industrial e comercial, ou seja, onde existem ambientes com ruídos.
Como exemplo de aplicação onde o conversor analógico digital sigma-delta pode ser utilizado, podemos citar os controladores de temperatura, pois é necessária boa resolução do conversor analógico digital e a variável a ser controlada possui uma variação lenta não necessitando alta taxa de amostragem. Já o periférico de acelerador de divisão por hardware (DIVAS) é muito interessante para certos algoritmos matemáticos, por exemplo o cálculo de uma tensão RMS (root mean square) ou eficaz, onde a equação na forma continua é:
E na forma discreta pode ser escrita da seguinte forma:
Pode-se observar que o rápido cálculo do valor RMS é necessário que o microcontrolador possua algumas operações matemáticas por hardware. Nesse caso o ATSAMC21 possui todas as operações por hardware necessárias para o cálculo da equação acima.
Nesse artigo vamos conhecer o periférico conversor analógico digital sigma-delta (SDADC) e o acelerador de divisão por hardware (DIVAS), além de aprender configurá-los no ATMEL STUDIO 7, usando o Atmel Software Framework (ASF).
O ATSAMC21J18A
Como já dito anteriormente, toda a família ATSAMC21 é ideal para aplicações em ambientes com ruídos, mas escolhemos o microcontrolador ATSAMC21J18A para falar especificamente, pois faz parte do kit de desenvolvimento ATSAMC21N Xplained Pro Evaluation Kit:
Ele também possui robustos periféricos de comunicação, incluindo o módulo SERCOM e CAN-FD, juntamente com avançados periféricos de controle de motor e PTC (Peripheral Touch Control).
Principais características:
- Memória FLASH de 256KB interna, SRAM de 32KB e 8KB FLASH independentes auto programáveis para emulação EEPROM;
- Low power: Modos standby, off sleep, Idle, e periféricos SleepWalking;
- RTC (Real Time Counter) de 32 bits, com função de relógio e calendário;
- Watchdog Timer (WDT);
- Voltagem de operação: 2.7V – 5.5V;
- Até 52 pinos I/O programáveis.
Conhecendo melhor o SDADC
O SDADC possui uma resolução de 16 bits, um range de conversão de 0V a 0,7V x Vref, integração com o DMA, até 3 entradas analógicas diferenciais externas. Abaixo, encontra-se o diagrama de blocos do SDADC:
Criando um projeto e utilizando o SDADC
O exemplo abaixo executa uma conversão analógica-digital quando o botão for pressionado e acende o Led 0. Para a criação do projeto utiliza-se o ATMEL STUDIO 7 e o Atmel Software Framework (ASF) seguindo os passos abaixo:
Passo 1 – Abrir o Atmel Studio e criar um novo projeto:
Passo 2 – Selecionar o tipo de projeto:
Passo 3 – Selecionar o microcontrolador e a placa utilizados.
Passo 4 – Verificar se o projeto foi criado e compilar o projeto.

Passo 5 – Adicionar o driver do SDADC clicando no ícone e na área de busca digite SDADC:
Passo 6 – Clique em Add e depois em Apply.
Passo 7 – Verificar se o driver foi adicionado com sucesso, conforme figura abaixo:
Passo 8 – No arquivo main.c criar uma função configura_sdadc assim como seu protótipo:
void configura_sdadc(void);
void configura_sdadc(void)
{
//! [setup_config]
struct sdadc_config config_sdadc;
//! [setup_config]
//! [setup_config_defaults]
sdadc_get_config_defaults(&config_sdadc);
//! [setup_config_defaults]
//! [setup_set_config]
sdadc_init(&sdadc_instance, SDADC, &config_sdadc);
//! [setup_set_config]
//! [setup_enable]
sdadc_enable(&sdadc_instance);
//! [setup_enable]
}
Passo 9 – Declarar a estrutura struct sdadc_module sdadc_instance acima do protótipo da função:
#include <asf.h> struct sdadc_module sdadc_instance; void configura_sdadc(void);
Passo 10 – Chamar a função configura_sdadc, dentro da função main:
int main (void)
{
system_init();
configura_sdadc();
/* Insert application code here, after the board has been initialized. */
/* This skeleton code simply sets the LED to the state of the button. */
while (1) {
/* Is button pressed? */
if (port_pin_get_input_level(BUTTON_0_PIN) == BUTTON_0_ACTIVE) {
/* Yes, so turn LED on. */
port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE);
} else {
/* No, so turn LED off. */
port_pin_set_output_level(LED_0_PIN, !LED_0_ACTIVE);
}
}
}
Passo 11 – Chamar a função configura_sdadc dentro da função main, declarar a variável resultado como int32 e fazer uma leitura de sdadc quando o botão for pressionado, conforme abaixo:
int main (void)
{
int32_t resultado;
system_init();
configura_sdadc();
while (1) {
/* Is button pressed? */
if (port_pin_get_input_level(BUTTON_0_PIN) == BUTTON_0_ACTIVE) {
/* Yes, so turn LED on. */
port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE);
sdadc_start_conversion(&sdadc_instance);
do {
/* Wait for conversion to be done and read out result */
} while (sdadc_read(&sdadc_instance, &resultado) == STATUS_BUSY);
} else {
/* No, so turn LED off. */
port_pin_set_output_level(LED_0_PIN, !LED_0_ACTIVE);
}
}
}
Conhecendo melhor o DIVAS
O DIVAS é um acelerador de divisão por hardware de 32 bits com ou sem sinal (signed ou unsigned) e uma máquina de 32 bits sem sinal de raiz quadrada.
As principais características do DIVAS são:
- Acelerador de divisão;
- Divisão inteira de 32 bits com ou sem sinal;
- Raiz quadrada de 32 bits sem sinal;
- Divisão de 32 bits entre 2 – 16 ciclos de clock;
- Resultado inclui quociente e resto;
- Resultado inclui raiz quadrada e resto;
- Início automático da operação quando o dado de entrada da raiz quadrada ou o divisor é carregado.
Abaixo, encontra-se o diagrama de blocos do DIVAS:
Adicionando o DIVAS no projeto criado anteriormente

Passo 1 – Adicionar o driver do DIVAS clicando no ícone e na área de busca digite DIVAS:
Passo 2 – Clique em Add e depois em Apply.
Passo 3 – Verificar se o driver foi adicionado com sucesso, conforme figura abaixo:
Passo 4 – No arquivo divas.h pode-se observar as funções das operações matemáticas mencionadas anteriormente:
int32_t divas_idiv(int32_t numerator, int32_t denominator); uint32_t divas_uidiv(uint32_t numerator, uint32_t denominator); int32_t divas_idivmod(int32_t numerator, int32_t denominator); uint32_t divas_uidivmod(uint32_t numerator, uint32_t denominator); uint32_t divas_sqrt(uint32_t radicand);
Passo 5 – Calcular a raiz quadrada da variável resultado usando o DIVAS:
int main (void)
{
int32_t resultado;
system_init();
configura_sdadc();
while (1) {
/* Is button pressed? */
if (port_pin_get_input_level(BUTTON_0_PIN) == BUTTON_0_ACTIVE) {
/* Yes, so turn LED on. */
port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE);
sdadc_start_conversion(&sdadc_instance);
do {
/* Wait for conversion to be done and read out result */
} while (sdadc_read(&sdadc_instance, &resultado) == STATUS_BUSY);
resultado = divas_sqrt(resultado);
} else {
/* No, so turn LED off. */
port_pin_set_output_level(LED_0_PIN, !LED_0_ACTIVE);
}
}
}
Conclusão
Nesse artigo foram abordados dois periféricos existentes no microcontrolador ATSAMC21, assim como a criação de projetos passo a passo para adicionar e configurar os drivers. Embora os exemplos criados nesse artigo sejam simples, a ideia principal foi demonstrar a facilidade de uso dos periféricos citados, ficando a cargo do leitor usar a criatividade para utilização desses periféricos nos seus projetos.
Apresentamos também algumas das características principais do componente ATSAMC21J18A, que faz parte do kit de desenvolvimento.
Para saber mais informações, acesse: https://goo.gl/quBSzf
Para adquirir o ATSAMC21J18A , acesse: https://goo.gl/St09oF
Em caso de outras dúvidas sobre os produtos apresentados ou outros produtos Microchip, acesse o Suporte Artimar, em: www.artimar-suporte.com.br/index.php.
Sobre a Microchip
Microchip Technology Inc. é a fornecedora líder de microcontroladores e semicondutores analógicos, proporcionando o desenvolvimento de produtos de baixo risco, com um custo total baixo de sistema, no tempo do mercado para milhares de diversas aplicações de clientes em todo o mundo, oferecendo um excelente suporte técnico, com uma entrega de qualidade e confiável.
Está sediada na cidade de Chandler, no Arizona, e possui valores que afirmam que os funcionários são sua maior força, a melhoria contínua é algo essencial, e os clientes são seu foco.
(*) esse post foi patrocinado pela ARTIMAR











