Microcontrolador Nuvoton Mini51 (Cortex-M0)

Neste post analisamos algumas características dos microcontroladores de baixo custo Mini51, que ao contrário do que o nome sugere, são máquinas de 32 bits baseadas nos Cortex-M0 e fabricados pela chinesa Nuvoton.

Para quem não conhece, os Cortex-M0 são os microcontroladores mais simples da linha Cortex da ARM. A linha Cortex da ARM é dividida em três grandes famílias: Cortex-A (microprocessadores de alto desempenho focados em aplicações embarcadas como celulares e tablets), Cortex-R (microcontroladores e microprocessadores de alto desempenho focados em aplicações complexas, especialmente as de tempo real) e Cortex-M (microcontroladores de uso geral destinados a aplicações de baixa, média e alta complexidade).

Na linha Cortex-M, a ARM dispõe de 5 linhas principais: Cortex-M0, Cortex-M0+, Cortex-M1, Cortex-M3 e Cortex-M4. De maneira geral, podemos dizer que os Cortex-M0 são os MCUs de mais baixo desempenho e menor custo, focados em aplicações mais simples e destinados a brigar diretamente nos mercados de 8, 16 e 32 bits low end, por outro lado, a linha Cortex-M4 possui microcontroladores de mais alto desempenho e inclui facilidades avançadas como instruções destinadas ao processamento digital de sinais (DSP).

Para quem não conhece um Cortex-M0, trata-se de um microcontrolador de 32 bits, com um set de instruções RISC (56 instruções) seguindo a arquitetura ARMv6-M, onde a maioria das instruções possui um tamanho de 16 bits, com algumas poucas instruções com 32 bits (note que estamos falando do tamanho da instrução e não dos operandos). Os Cortex-M0 podem operar com dados de 8, 16 e 32 bits de forma extremamente eficiente (o que não é verdade no caso dos ARM7).

Outras características interessantes da linha Cortex-M0 são: controlador de interrupções NVIC com sistema de vetores, prioridades de interrupção e tail-chaining (um sistema que diminui a latência de interrupção, verificando se há interrupções pendentes antes de retornar ao programa principal, evitando desempilhamento e empilhamento desnecessário de registradores), alta densidade de código (consideravelmente melhor que os ARM7), depurador integrado com comunicação de um fio (SWD – Single Wire Debug), multiplicador por hardware, entre outras.

O documento DDI0432 apresenta as principais características dos Cortex-M0 (clique aqui para a versão PDF). O documento DUI0497 apresenta em maiores detalhes a CPU Cortex-M0, o conjunto de instruções e modelo de programação (clique aqui para a versão PDF).

Mini51

O kit analisado neste artigo foi enviado pelo distribuidor da Nuvoton aqui no Brasil, a Infinity Informática (www.infinity-info.net) e utiliza o microcontrolador MINI54LAN, com 16Kib de flash, 2Kib de RAM, 30 pinos de I/O, 2 timers de 32 bits, UART, SPI, I2C, 2 comparadores analógicos e um conversor A/D de 10 bits e 8 canais, tudo isso encapsulado num chip LQFP de 48 pinos. A linha MINI51 inclui também MCUs com 4Kib e 8Kib de flash.

Linha Mini51

A Nuvoton possui também outros microcontroladores Cortex-M0 com mais memória flash (até 128 Kib), mais RAM (até 16Kib), mais pinos (até 100) e mais periféricos (interface USB, conversores A/D de 12 bits, RTC, DMA, etc). O portfolio completo da linha pode ser visto aqui.

O Mini54 é um microcontrolador pequeno (48 pinos LQFP) e barato (cerca de US$ 1,70 com pedido mínimo de 250 peças, segundo a Infinity), mas é flexível o suficiente para aplicações de pequena e média complexidade.

Vejamos as principais características do Mini51LAN:

– 16 Kib de memória flash para programa;

– 2 Kib de memória flash para boot (LDROM);

– 2 Kib de memória RAM;

– 30 pinos de I/O (com capacidade de fornecer tipicamente 24mA por pino e drenar 16mA por pino);

– Oscilador interno de 22,1184MHz (com precisão de 1% a 25 graus Celsius em 5V), o circuito oscilador pode operar também com cristal externo (4 a 24MHz, ou 32768Hz), além de oscilador auxiliar de 10kHz para o watchdog e auto wake-up;

– Dois timers de 32 bits (24 bits de contagem mais 8 bits de prescaler), com capacidade de captura de pulsos, comparação e PWM, além do timer periódico integrado a CPU (SysTick de 24 bits);

– Três PWM de dois canais cada (máximo de 6 canais);

– UART com 16 bytes de FIFO, suporte a IrDA e 485;

– SPI (mestre até 12MHz, escravo até 4MHz);

– I2C com capacidade multimaster e até 4 endereços com máscara;

– Dois comparadores analógicos com referência interna programada e com 16 níveis;

– Conversor A/D SAR de 10 bits, 8 canais e taxa máxima de amostragem de 150 ksps;

– Detector de baixa tensão com nível de tensão programável e que pode gerar interrupção ou reset.

Kit Mini51

O kit possui um display LCD com interface serial SPI e resolução de 128 x 64 pixels, com backlight a led (controlado pelo pino P5.4), há também um conector DB9 para a UART, uma EEPROM I2C 24LC64, 8 leds verdes, um led RGB (conectado aos PWMs 0, 1 e 2), um buzzer (conectado ao PWM3), duas teclas (uma de reset e outra conectada ao pino P3.2/INT0), um trimpot (conectado a entrada analógica AN0) e um NTC (conectado a entrada analógica AN1). Quatro headers de 12 pinos permitem acesso aos pinos do MCU e um header de 16 pinos permite conectar os 8 leds ao MCU. Há também quatro leds de status do depurador.

O Mini DVD que acompanha o kit possui muita documentação, mas como a maioria dos fabricantes chineses, a documentação é relativamente confusa, com muita coisa ainda em chinês. O DVD inclui versões do Keil e do IAR.  Para avaliação neste artigo utilizamos o ambiente da IAR (EWARM 6.21).

Além da instalação do compilador, é necessário instalar também o driver para o depurador embutido na placa, chamado NU-Link. Um detalhe importante para os brasileiros: no Windows em Português o driver é instalado na pasta “Arquivos de Programas”, porém, todos os exemplos fornecidos no DVD procuram o driver em “Program Files”. Portanto, é necessário alterar o caminho para o driver na janela de opções de cada projeto, conforme mostra a figura abaixo:

 

Finalmente instala-se os exemplos e software de suporte da placa (BSP), disponíveis na pasta “BSP Library”. O BSP inclui as bibliotecas CMSIS (Cortex Microcontroller Software Interface Standard) padronizadas pela ARM.

Para completar este artigo, fizemos algumas rápidas modificações no exemplo SMPL_LCD, que apresenta texto no LCD e controla o backlight através do botão INT.  As modificações são simples: alteramos o texto apresentado e incluímos um toggle do LED0 na interrupção da tecla. Abaixo temos os trechos de código alterados e um link para download do projeto completo para o IAR EWARM:

void EINT0Callback(void)
{
  if(g_level_change==4) g_level_change = 0;
  else g_level_change++;
  _PORT_DOUT (3, 1) = !_PORT_DOUT (3,1); // inverte o estado do LED0
} 

int main(void)
{
  ...
  print_lcd(0, " Hello World!");
  print_lcd(1, " Nuvoton");
  print_lcd(2, "Teste do Mini51!");
  ...
  DrvGPIO_Open (E_PORT3, E_PIN1, E_IO_OUTPUT);    // Configura pino P3.1 como saída
  ...
}

Para baixar o projeto completo, clique AQUI.

Leave a Reply