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.
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
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
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
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:
Postar um comentário