terça-feira, dezembro 15, 2009

FreeScale MC9S08LL16 - Parte 4

Vamos completar neste post a nossa descrição do microcontrolador FreeScale MC9S08LL16.

Módulos de Timer e PWM - TPM

O MC9S08LL16 possui dois módulos TPM, cada um com dois canais.

O coração de cada TPM é um contador de 16 bits, que é alimentado por um clock dividido por um prescaler. O clock pode ser gerado internamente pelo ICS (BUSCLK ou ICSFFCLK) ou um sinal externo conectado ao pino TCLK. O prescaler divide este clock por uma potencia de 2 de 1 a 128. O contador é avançado a cada clock até atingir o valor contido no registrador de módulo, quando então retorna para zero. É possível gerar uma interrupção quando o contador retorna a zero (counter overflow).

Cada canal do TPM possui um registrador de 16 bits. Dependendo da configuração do canal, várias funções podem ser realizadas:
  • captura de entrada: o registrador do canal recebe o valor do contador na borda de subida, descida ou ambas de um sinal presente em um pino. Isto permite, por exemplo, medir a largura e frequência de pulsos.
  • comparação e controle de saída: quando o contador atinge o valor contido no registrador uma interrupção é gerada e/ou o sinal de um pino é alterado (para zero, um ou o contrário do que estava).
  • PWM alinhado na borda: o sinal de um pino de saída é colocado em um nível quando o contador dá a volta e no outro nível quando o contador atinge o valor do registrador. Este é o PWM tradicional. Se estiverem sendo gerados sinais PWM com os dois canais do mesmo TPM os dois sinais terão uma mudança no mesmo instante (a causada pelo overflow do contador).
  • PWM alinhado ao centro: neste modo o contador do TPM funciona de forma ligeiramente diferente, incrementando de zero até o valor do módulo e depois decrementando de volta a zero. As mudanças no pino de saída ocorrem quando o contador atinge o valor do registrador. Desta forma, o período do PWM passa a ser determinado pelo dobro do módulo e a largura do pulso pelo dobro do valor no registrador do canal. Mais importante, se estiverem sendo gerados sinais PWM nos dois canais o que ficará alinhado no tempo será o centro dos pulsos não a borda. Este tipo de PWM é necessário para algumas aplicações de controle de motor.
Confuso? Um pouco. Poderoso? Muito!

Interface Serial - SCI

A SCI é uma interface de comunicação assíncrona com as seguintes características:
  • Full duplex
  • Buffers para transmissão e recepção
  • Geração interna de baudrate
  • Interrupções de recepção, pronto para transmissão, fim de transmissão e outras
  • Geração e conferência de paridade
  • Suporte a caracteres com 8 ou 9 bits
Módulo SPI

O módulo Serial Peripheral Interface implementa comunicação no padrão SPI em modo mestre ou escravo, tanto em modo full duplex como com sinal de dados bi-direcional. O clock de comunicação no modo mestre é gerado internamente e tanto a transmissão como a recepção são bufferizadas. O sinal de seleção do escravo (SS) pode ser tratado automaticamente tanto no modo escravo como mestre.

O módulo suporta todas as combinações de polaridade e fase e permite comunicação tanto com o bit mais significativo primeiro como com o bit menos significativo primeiro.

Uma interrupção pode ser gerada a cada byte transmitido/recebido.

Interface I2C

O módulo I2C implementa a comunicação I2C com as seguintes características:
  • Suporte a opeação multi-master
  • Geração automática do clock
  • Geração e detecção automáticos de start e stop
  • Geração e detecção de acknowledge
  • Tratamento automático de endereço, com suporte a endereços de 10 bits
  • Interrupção de recepção e transmissão de byte
Interface para LCD

Um dos destaques do MC9S08LL16 é a sua capacidade de controlar um LCD com até 192 segmentos, através de até 32 pinos.

Cada segmento do LCD é controlado individualmente; o formato do segmento é definido na sua fabricação. O LCD do kit DEMO9S08LL16 contém alguns usos típicos: segmentos com uma figura inteira (como o logotipo da FreeScale), segmentos que juntos compõem uma figura (como os da bateria) e segmentos organizados para apresentação de caracteres.


O MC9S08LL16 controla tantos segmentos através da multiplexação, com os segmentos organizados no LCD em uma matriz. Até 8 pinos podem ser dedicados ao chamado backplane, selecionando cada um deles um conjunto de até 31 segmentos. O módulo LCD cuida de fazer a "varredura" dos pinos do backplane, acionando um de cada vez. Para cada pino de backplane selecionado os demais 24 pinos são acionados com o valores correspondendo aos segmentos do conjunto. Graças à rapidez da varredura, à persistência do LCD e à persistência da visão ficamos com a impressão de todos os segmentos serem acionados simultaneamente.

Uma vez configurado o módulo LCD o processo de multiplexação e varredura fica transparente. Os segmentos são controlados através dos bits em conjunto de 32 registradores.

O módulo LCD é também responsável pela geração das tensões necessárias para o display. Através de ajustes nas tensões pode-se fazer um ajuste do contraste.

Referências

As informações para estes posts foram retiradas dos seguintes documentos da FreeScale, que você pode baixar do site:
  • MC9S08LL16 Series Data Sheet
  • MC9S08LL16 e MC9S08LL8 Reference Manual
Duas boas referências sobre o HCS08 são os livros do Fábio Pereira:
Posts Futuros Sobre o Assunto

Nos próximos dias pretendo publicar um ou dois posts sobre a placa de demonstração do MC9S08LL16.

Vários dos assuntos tratados tem ligação direta com a minha palestra no "Seminário C&C++ para Sistemas Embarcados 2009" e serão objeto de uma futura série de posts.

Nenhum comentário: