sexta-feira, janeiro 04, 2008

Microcontrolador Texas MSP430

O MSP430 é uma entrada relativamente recente no mercado de microcontroladores. Com consumo muito baixo e uma arquitetura de 16 bits voltada para linguagens de alto nível, ele é uma alternativa muito interessante às consagradas famílias PIC e 8051.

As informações que se seguem vem da documentação do MSP430 (que pode ser obtida aqui), do material fornecido no MSP430 Day e da minha experiência de desenvolvimento de software para os modelos MSP430F2011 e MSP430F2121.
Arquitetura do MSP430

Os microcontroladores PIC e 8051 possuem arquiteturas esquisitas, dividindo a memória em regiões distintas que precisam ser acessadas por instruções especializadas. O resultado é uma dificuldade tanto para a programação assembler como para a construção de compiladores.

O MSP possui uma estrutura de 16 bits, tanto na capacidade de processamento da unidade lógica aritmética como nos registradores de trabalho e no endereçamento de memória. Ram, Flash e controle dos periféricos compartilham este mesmo espaço de endereçamento e são manipulados pelas mesmas instruções de acesso á memória.

Uma diferença em relação ao PIC é que o MSP430 não possui memória EEProm interna. Por outro lado ele dispõe de 4 áreas de 64 bytes de memória Flash que podem ser usadas para salvar parâmetros de forma não volátil.

O MSP dispõe de 16 registradores de 16 bits (R0 a R15), dos quais 12 são de uso geral (R4 a R15). R0 é o contador de programa, R1 é o ponteiro da pilha e R2 é o status do processador. R2 e R3 são geradores de constantes (usados como operando geram os valores 0, 1, 2, 4, 8 e 0xFFFF).

Modelos mais recentes expandem a arquitetura para endereços de 20 bits, para suportar um quantidade maior de memória.

Sistema Flexível de Clock

O MSP430 possui diversas opções de clock, que podem inclusive ser mudadas durante a execução para reduzir o consumo em momentos de espera e aumentar o desempenho na hora de processar.

Dependendo do modelo, existem até 4 fontes possíveis para o sinal de clock:
  • VLOCLK: clock interno de 12KHz de baixíssimo consumo.
  • LFXT1CLK: clock lento gerado por um cristal ou ressonador externo, tipicamente um cristal padrão de relógio de 32.768KHz (que fornece uma base de tempo de 1 segundo bastante precisa).
  • XT2CLK: clock rápido gerado por um cristal ou ressonador externo.
  • DCOCLK: clock interno gerado por um digital controlled oscillator (DCO) de até 16MHz com alguns valores pré-calibrados na fábrica para baixo erro.
Os sinais destas fontes podem ser dirigidos para três usos:
  • ACLK: clock auxiliar para os dispositivos (por exemplo o temporizador), pode ser VLOCLK ou LFXT1CLK, dividido por 1, 2, 4 ou 8.
  • MCLK: clock mestre, usado pela CPU. Pode vir de qualquer uma das fontes dividida por 1, 2, 4 ou 8.
  • SMCLK: clock sub-principal (!), pode ser usado nos dispositivos. Também pode vir de qualquer uma das fontes dividida por 1, 2, 4 ou 8.
Baixo consumo

Com todos os clocks parados (LPM4 - Low Power Mode 4), o MSP430 consome apenas 0,1 uA para manter o conteúdo da Ram.

Numa situação mais comum (LPM3), é mantido ligado apenas o ACLK para permitir acordar o processador após um determinado período de tempo. Neste caso o consumo fica em 0,9 uA (para alimentação em 3V).

Em todos os modos de baixo consumo o processador está parado mas é acordado rapidamente (menos de 1 uSeg para o DCO voltar a oscilar na família MSP430F2xx) quando recebe uma interrupção.

Periféricos Internos

Os vários modelos de MSP430 possuem internamente os periféricos tradicionais de microcontroladores:

  • Entradas e Saídas Digitais: todos os modelos possuem e/s digital com capacidade de interrupção (por borda de subida ou descida), pull-up e pull-down configuráveis.
  • Watchdog Timer (WDT): também presente em todos os modelos, resseta o processador se não for periodicamente desarmado (usado para colocar o processador em uma situação conhecida no caso de alguma falha de programação).
  • Timers: o MSP430 difere um pouco de outros micontroladores pelo fato de cada timer ter um único registrador de contagem e múltiplos registradores de comparação/captura. No modo continuous o registrador de contagem é continuamente incrementado por um dos clock (dando a volta quando atinge 0xFFFF) e interrupções de tempo real são geradas quando o registrador de contagem atingem o valor de um dos registradores de comparação. No modo up a contagem vai de 0 até o valor de um dos registradores de comparação, este modo pode ser usado para gerar um sinal PWM em um pino. Na operação de captura uma interrupção é gerada quando ocorre a mudança de sinal em um pino, neste instante o valor no registrador de contagem é copiado para o registrador de captura.
  • Comparador Analógico: compara o sinal presente em um pino com uma referência interna ou externa. Útil, por exemplo, para detectar bateria baixa.
  • Conversor A/D: não disponível em todos os modelos, codifica o nível de um sinal analógico em um valor digital de 10 ou 12 bits (dependendo do modelo).
  • USART: não diponível nos modelos mais simples, implementa comunicação serial síncrona ou assíncrona.
Os modelos mais sofisticados possuem capacidade de DMA (tansferência automática entre um bloco de memória e um dispositivo), interface I2C, um multiplicador por hardware (útil para endereçar vetores de estruturas) e conversor digital analógico. Alguns modelos incluem um sensor de temperatura.

A família MSP430x4xx inclui ainda um controlador de LCD.

Programação e Debug a Baixo Custo

Os modelos MSP430F20xx permitem programação e debug através de um dispositivo semelhante a um pen-drive (eZ430-F2013), através de uma conexão chamada pela Texas de Spy-By-Wire. O custo deste dispositivo nos EUA é de apenas U$20, no Brasil ele pode ser encontrado por R$100. A única restrição que encontrei foi o baixo número de breakpoints por hardware.

Uma vantagem adicional é que o programador vem com uma versão limitada do IAR Embedded Workbench Kickstart. Trata-se de uma IDE e compilador C bastante razoáveis. A limitação do compilador gratuito é de 4K de código, mais que sufiente para aplicações simples.

Se os até 2K de Flash dos modelos MSP430F20xx forem insuficientes e você optar pelos modelos MSP430F21xx, você vai precisar de um programador JTAG. O MSP-FET430UIF suporta todos os modelos e custa US$100 nos EUA (R$720 no Brasil!). Ele vem com o mesmo pacote de software que o eZ430-F2013.

Uma limitação nos dois casos é a ausência de um software de gravação standalone (por exemplo para uso na produção). Nos dois casos a gravação é feita disparando o Debug na IDE.

Baixo Custo (Em Termos)

Uma limitação para o hobista é que a maioria dos modelos está disponível apenas em encapsulamento do tipo surface-mounted. Apenas os modelos MSP430F20xx estão disponíveis no encapsulamento PDIP).

No folheto que está no site da Texas estão os preços sugeridos para revenda nos EUA, para mil peças. O modelo mais barato (MSP430F2001) estava a $0,55 quando consultei. Entretanto, este modelo tem apenas 1K de Flash e 128 bytes de Ram, o que limita muito suas aplicações principalmente quando programado em C. O MSP430F2121, com 4K de Flash e 256 bytes de Ram, estava a $1,35.

No Brasil, para compras unitárias, o preço é mais alto. O modelo NSP430F2013 (2K de Flash, 128 bytes de Ram, USART) tem preço EUA $1,65, no Brasil é vendido por R$12,23 (preço verificado na Farnell).

Futuramente vou apresentar uma adaptação do meu artigo de conexão de um LED ao PIC para o MSP430.

7 comentários:

ailton silva disse...

Daniel, comprei uma launchpad que vem com um MSP430g2553, nunca programei uControladores em C, o mais proxmo que programei foi o arduino, usando a IDE do arduino mesmo, Estou precisando de algo parecido com a função millis() do arduino so que para rodar nesse uControlador. vc sabe onde posso encontrar um bibioteca ou algo do tipo que me permita fazer contagens de tempo sem parar o programa? Cheguei a tentar usar a RTC_TA.h e a RTC.h mas parece que nao funciona nesse modelo especifico de uControlador.
Obrigado.

Daniel Quadros disse...

Ailton, talvez o mais fácil para você seja usar a IDE Energia (http://energia.nu/). É um ambiente para desenvolvimento para diversas placas da Texas (inclusive a Launchpad MSP430) que usa uma biblioteca com funções semelhantes às da IDE do Arduino.

ailton silva disse...

Ola novamente. Pesquisei por alguns dias e conseguir avançar no meu projeto, usei comunicação via radio entre 2 msp430 através do nrf24l01, porem o problema com a contagem de tempo permanece. vc falou que o clock pode ser alterado durante a execução do codigo, voce poderia fazer um tutorial mostrando como isso pode ser feito em C? Grato.

Daniel Quadros disse...

Ailton, tem alguns exemplos aqui no blog, veja http://dqsoft.blogspot.com.br/search/label/MSP430.

Adson Caldas disse...
Este comentário foi removido pelo autor.
Adson Caldas disse...

Olá Daniel !

Estou necessitando desenvolver um dispositivo semelhante a um hardlock, onde um aplicativo Windows possa ler através da porta usb a data/hora e um id criptografado. Gostaria de saber se consigo desenvolver esse tipo de solução usando esse dispositivo com eZ430-F2013 Development Tool.

Daniel Quadros disse...

Adson: Os modelos do MSP430 usados tanto na ferramenta de desenvolvimento como na plaquinha destacável não tem interface USB. A ferramenta de desenvolvimento usar um conversor USB serial. Em teoria é possível reprogramar o MSP430 da ferramenta de desenvolvimento, mas isto não é simples e acho que a Texas não divulga o fonte do firmware padrão. Provavelmente o mais adequado é você usar um microcontrolador que tenha interface USB embutida ou então, se você não precisa aderir totalmente ao padrão USB, usar o V-USB com um ATtiny (dê uma olhada em https://dqsoft.blogspot.com.br/2016/09/sinalizador-parte-2.html)