segunda-feira, 28 de fevereiro de 2011

Microcontrolador Texas MSP430





O microcontrolador MSP430 entrou recentemente 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.
Os microcontroladores PIC e 8051 possuem arquiteturas que dividem a memória em regiões distintas e 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 quatro á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 à 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 uma quantidade maior de memória.
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.

            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.
Os vários modelos de MSP430 possuem internamente os periféricos tradicionais de microcontroladores:
·       Entradas e Saídas Digitais: todos os modelos possuem I/O 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 microcontroladores 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 disponível nos modelos mais simples, implementa comunicação serial síncrona ou assíncrona.

Os modelos mais sofisticados possuem capacidade de DMA (transferê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.
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 suficiente para aplicações simples. Se a Flash de até 2K dos modelos MSP430F20xx forem insuficientes e você optar pelos modelos MSP430F21xx, você vai precisar de um programador JTAG.
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.
Além de microcontroladores de baixo custo a Texas Instruments lançou um kit de baixíssimo custo, a Launchpad. A placa inclui um gravador/depurador e possui um soquete para se conectar um MSP430 de 14 ou 20 pinos. A placa inclui ainda um botão de Reset, um botão conectado a uma entrada digital, e dois LEDs (um verde e um vermelho) conectado a saídas digitais (através de um jumper, o que permite desconectá-los se necessário). Todos os sinais do microcontrolador estão disponíveis em conectores na borda, permitindo espetar uma placa de expansão.
O kit inclui, além da placa, dois microcontroladores (um MSP430G2211 e um MSP430G2213), um cabo USB para ligar a placa no micro, conectores para a placa de expansão e um cristal de 32KHz.
Para sair rodando, basta baixar a IDE. Existem duas opções, o IAR Embedded Workbench Kickstart e o Code Composer Studio. As duas opções são gratuitas e tem limitações no tamanho do código que são irrelevantes para a capacidade dos modelos inclusos.

sexta-feira, 14 de janeiro de 2011

Noções sobre microcontroladores




Os microcontroladores (uC ou MCU) são pequenos dispositivos dotados de inteligência, basicamente constituídos de CPU (Central Processing Unit), memória de dados, memória de programas e periféricos como portas de entrada e saída, I2C, SPI, USART, etc. Suas dimensões reduzidas são resultantes da alta capacidade de integração, na qual milhões de componentes são inseridos em uma única pastilha de silício pela técnica de circuitos integrados. Eles estão presentes na maioria dos componentes digitais como celulares, MP3 player, impressoras, robótica, instrumentação, entre outros.
Esse conceito de microcontrolador se espalhou rapidamente e hoje em dia existe uma grande diversidade de produtos para solucionar os mais diferentes problemas de controle. O primeiro microcontrolador foi lançado pela Intel em 1978 e recebeu a sigla 8048; que depois evoluiu, dando origem à família 8051, em 1983. A Intel ainda oferece a família 8096, que trabalha em 16 bits, possibilitando maior capacidade de processamento. Hoje em dia, uma grande quantidade de fábricas de semicondutores oferece microcontroladores. Dentre elas, citamos a Zilog com sua família Z8, a National com o COP8, a Motorola com o 6811 e a Microchip com seus PICs.
As duas principais arquiteturas de microcontroladores são Harvard e Von-Neumann. A arquitetura Harvard é caracterizada pela existência de um barramento de acesso à memória de dados e outro para a memória de programa, resultando em um aumento de fluxo de dados, enquanto na arquitetura Von-Neumann as memórias de dados e de programa compartilham um mesmo barramento, limitando a banda de operação.
Em geral, as memórias de programa presentes nos microcontroladores são do tipo FLASH (EEPROM – Electrically Erasable Programmable Read Only Memory), ROM (Read Only Memory), EPROM (Erasable Programmable Read Only Memory) ou OTP (One Time Programmable). Elas são responsáveis pelo armazenamento do programa, o que significa que sua capacidade deve ser suficiente para armazenar todo código desejado. Essas memórias são do tipo não volátil, portanto o código de programa armazenado não é perdido, caso o circuito não esteja sendo alimentado. Vejamos as principais características das memórias supracitadas:
·         ROM – não permite que o conteúdo seja alterado pelo usuário. Ela aceita somente a leitura do conteúdo, o qual foi gravado pelo fabricante. Microcontroladores dotados de memória de programa do tipo ROM normalmente apresentam um baixo custo com relação às demais memórias e são recomendados quando o código do programa não apresenta erros e há necessidade de grande quantidade.
·         EPROM – pode ser apagada e/ou programada muitas vezes, porém o conteúdo da memória é apagado através da exposição da janela de quartzo à luz ultravioleta, cujo processo de fabricação apresenta um custo elevado, se comparado com os demais dispositivos de memória.
·         OTP – tolera somente uma gravação. Este tipo de memória apresenta o menor custo se for comparado com as memórias programáveis EPROM e FLASH.
·         FLASH – é a memória mais flexível entre todos os outros tipos de memória de programa, pois pode ser apagada eletricamente e reprogramada 100.000 à 1.000.000 de vezes, dependendo da tecnologia empregada na fabricação deste componente.
Outro tipo de memória existente é a de dados, definida como memória RAM (Random Access Memory). Ela é volátil e armazena as constantes e variáveis do sistema. O conteúdo presente neste tipo de memória é perdido sempre que a alimentação é cortada. Isso implica que os valores das variáveis devem ser carregados sempre que o sistema for iniciado.
Pinos I/O (input/output) digitais estão presentes em todos os microcontroladores. Por meio deles o MCU se comunica com o mundo exterior, ou seja, é por intermédio destes que o MCU aciona um relé, lâmpada, motor, etc. O sentido do fluxo de dados de um pino I/O pode ser definido como entrada ou saída. Se o pino for definido com saída, então ele normalmente será utilizado para controlar periféricos; caso contrário, se for definido como entrada, o dispositivo passa a ler o sinal presente no pino. Chamamos de porta um conjunto de pinos relacionados a ela. Por exemplo, os pinos x.1, x.2, x.3, x.4, x.5, x.6, x.7 e x.8 formam a porta X.
Alguns periféricos como conversores A/D, USART (Universal Synchronous Asynchronous Receiver Transmitter), TIMER, SPI (Serial Peripheral Interface) e I2C (Inter-Intergrated Circuit) são muito comuns nos microcontroladores, no entanto existem MCUs mais robustos que, além dos periféricos supracitados, também apresentam outros mais específicos, como controladores de LCD, USB (Universal Serial Bus), RTC (Real-Time Clack), CAN, etc.
A velocidade de processamento do microcontrolador está diretamente relacionada com a freqüência de clock. Quanto maior a freqüência de trabalho maior será a capacidade de processamento, assim como o consumo de energia. Essa freqüência pode ser gerada por um oscilador interno, que normalmente é um circuito RC, ou então por um cristal de quartzo ou um ressonador conectado externamente. Osciladores internos do tipo RC são normalmente utilizados quando não há uma necessidade de precisão de clock; caso contrário, utiliza-se o cristal. Por exemplo, se uma comunicação serial for necessária, é desejável que um cristal de quartzo seja empregado para garantir a fidelidade do sinal de clock, resultando maior confiabilidade na transmissão/recepção dos dados.   

domingo, 12 de dezembro de 2010

Breve introdução aos sistemas embarcados

Sistemas embarcados ou embutidos são sistemas microprocessados responsáveis por um conjunto restrito de funções específicas, ou seja, são sistemas que executam funções dedicadas. Por se tratar de um dispositivo dedicado pode-se através de engenharia otimizar o projeto, reduzindo seus custos, recursos computacionais e tamanho.
A complexidade e importância dos sistemas embarcados são bastante variáveis, podendo ir desde a um brinquedo simples ou um controle remoto até uma máquina com centenas de processadores destinada ao controle de tráfego aéreo ou criar previsões sobre mercado de capitais. Como podemos ver, nos deparamos a todo o momento com sistemas como estes, de forma que muitas vezes sequer percebemos que eles existem.
Sistemas embarcados são formados basicamente pelos mesmos componentes de hardware de um computador, como processador, memória, dispositivos de armazenamento, interfaces, periféricos e demais componentes. Já o software escrito para estes sistemas é muitas vezes chamado de firmware, e é armazenado em memória ROM ou flash ao invés do disco rígido.   
Para sistemas embarcados mais simples, que não exigem processadores potentes, o Z80 ou Motorola 68000 são dois dos processadores mais utilizados, principalmente pelo fato apresentarem baixo custo e satisfazerem as necessidades de um MP3 player, por exemplo. Já para dispositivos que necessitam de mais processamento utilizam-se processadores ARM, chips RISC de 32 bits. Utilizando um ARM de pelo menos 4MB de memória já é possível rodar Linux no sistema embarcado. Os chips ARM são relativamente baratos e possuem baixo consumo elétrico, por isso são extremamente populares em celulares, modems ADSL, videogame e assim por diante.   
Além dos microprocessadores, os microcontroladores são dispositivos bastante utilizados em sistemas embarcados. Os microcontroladores se diferenciam dos processadores, pois além dos componentes lógicos e aritméticos usuais de um microprocessador, o microcontrolador integra elementos adicionais em sua estrutura interna, como memória de leitura e escrita para armazenamento de dados, memória somente de leitura para armazenamento de programas, EEPROM para armazenamento permanente de dados, dispositivos periféricos como conversores analógico/digitais (ADC), conversores digitais/analógicos (DAC) e interfaces de entrada e saída de dados. Dentre os microcontroladores mais utilizados em sistemas embarcados estão os microcontroladores PIC da Microchip.
Em aplicações onde um chip personalizado é essencial, existe a opção de usar chips programáveis, chamados de FPGAs (field-programmable gate arrays) ou de LCAs (logic-cell arrays). São chips compostos por um enorme número de chaves programáveis, que podem ser configurados para simular o comportamento de qualquer outro circuito. Porém, ao invés de desenvolver e fabricar seus próprios chips, as empresas passaram a, cada vez mais, utilizar componentes disponíveis no mercado, que são fabricados em massa e vendidos a preços incrivelmente baixos.
Cada um destes dispositivos, seja ele microprocessador ou microcontrolador, conta com um conjunto próprio de ferramentas de desenvolvimento, que incluem compiladores, debuggers, documentação e ferramentas úteis. Em alguns casos o conjunto de ferramentas de desenvolvimento é distribuído gratuitamente, mas em outras precisa ser comprado ou licenciado, tornando um projeto um pouco caro. Normalmente estas ferramentas de desenvolvimento de software para sistemas embarcados são executadas em um computador e apenas nos estágios finais do desenvolvimento o software é transferido para o hardware do sistema que está se desenvolvendo. 
Embora os computadores normalmente roubem a cena, os sistemas embarcados são mais numerosos e são responsáveis por boa parte da estrutura que utilizamos no dia-a-dia. Com essa presença e importância crescente tornam-se necessários e promissores os estudos nas áreas de projeto em hardware, software e interfaceamento destes sistemas.