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.
- 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.
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.
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:
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.
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.
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.
Ailton, tem alguns exemplos aqui no blog, veja http://dqsoft.blogspot.com.br/search/label/MSP430.
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.
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)
Postar um comentário