MSP430 – Osciladores e Clock – Parte I


Neste artigo, vamos começar a falar sobre osciladores e o sistema de clock. No MSP430 temos algumas alternativas com respeito aos osciladores. Podemos ter uma fonte de clock externa ou interna. Veja alguns dos clocks disponíveis nos microcontroladores desta família:

 

DCO – Digitally Controlled Oscillator (RC Interno) – 1MHz, 8MHz, 12MHz, 16MHz

Possui inclusive calibração de fábrica, armazenada na memória Flash.

VLO – Very Low Power Oscillator (RC Interno) – 12 kHz

 

LFTX1 – Low Frequency/High frequency external oscillator (Externo)

Proteção contra falhas e capacitores internos que são programáveis.

 

Dependendo do microcontrolador que você utilizar, poderá ter mais ou menos funções suportadas por essas fontes de clock. DCO e VLO são baseados em oscilador a partir de um típico circuito RC (resistor/capacitor). Enquanto em LFTX1, pode ser baseado em um oscilador externo, como um cristal oscilador por exemplo.

 

Como você pode ver, no oscilador DCO, podemos ter diferentes frequências, sendo que podemos atingir até 16 MHz. Já em VLO, nós temos um trabalho na faixa de frequência de 12 kHz, e pode ser empregado em determinadas situações para “acordar” o dispositivo em configurações de baixo consumo. Com relação ao aspecto de precisão, o DCO é mais do que este último.

 

E no modo LFTX1, você pode empregar um típico cristal oscilador externo, juntamente com os capacitores necessários. Um detalhe interessante do MSP430, é que você pode utilizar os capacitores internos para esse propósito. Veremos mais adiante.

As fontes de clock estão relacionadas com três diferentes sinais de clock interno:

MCLK – Master Clock – Utilizado pela CPU

SMCLK – Sub-main clock – Utilizado pelos Periféricos

ACLK – Auxiliary clock- Utilizado pelos Periféricos

 

Há uma relação entre a tensão de alimentação e a frequência do clock. Veja o gráfico abaixo que ilustra essa situação:

 

msp430-power-vs-freq

Figura 1 – Tensão x Frequência

 

Em outras palavras, para cada faixa da tensão de alimentação, teremos um valor possível de frequência. E isso é relacionado de tal forma que impacta no consumo de energia dependendo de como o seu sistema foi desenvolvido para operar.

 

Cristal

Antes de mais nada, gostaria de mencionar que os exemplos que iremos fazer nas aulas sobre o sistema de clock no MSP430, utilizam códigos que irão empregar o cristal externo de 32.768 kHz.

Quando você adquire a LaunchPad MSP430, o kit vem com um pequeno cristal que você pode agregar na placa. Portanto, você deve soldar esse cristal no local indicado na placa de desenvolvimento. Observe que o cristal já vem de tal forma que, a posição dos seus terminais indicam o seu posicionamento sobre a placa:

cristal

Figura 2 – Cristal Kit MSP430

 

Portanto você deve fazer três pequenas soldas a fim de fixa-lo no seu lugar.

 

 

Msp430Cristal

Figura 3 – Cristal fixado

 

Código

 

Considerações

Vamos dissecar o código para uma melhor compreensão. Acompanhe.

P1DIR  = 0x40;
P1OUT = 0;

Se você acompanhou os artigos anteriores, estes não são novidade. No registrador P1DIR estamos definindo o bit 6 como saída, que é onde está localizado o nosso led. P1OUT inicializa o Port em zero. Se tiver dúvidas confira as aulas anteriores.

                                                                                                                                                             

BCSCTL3 |= LFXT1S_2

Observe que na tabela abaixo retirado do guia do usuário (download), que o estado inicial deste registrador possui o valor 005h (hexadecimal).

BasicClockModule+

Figura 4 – Registradores Basic Clock Module+

 

Guarde essa informação. Agora vamos analisar os bits deste registrador. Observe a figura abaixo:

RegisterBCSCTL3

Figura 5 – Register BCSCTL3

 

Sabendo que o valor 005h é a mesma coisa que 101b (binário), podemos tirar algumas conclusões das configurações iniciais do registrador. Em outras palavras 101b, nos diz que temos:

 

Bit 2       Bit 1       Bit 0

1             0             1

 

Olhando novamente na tabela anterior, você vai identificar que as configurações estão atreladas ao cristal de 32768 Hz em LFXT1, capacitor de 6pF e condição de falha presente.

Voltando ao código, estamos utilizando o operador OR e a igualdade, em conjunto com o comando LFXT1S_2. Ou seja, temos um valor resultante de 025h. Lembre-se, antes tínhamos o valor de 005h, sendo q agora agregamos o valor de LFXT1S_2 que tem o valor de 020h.

Observe novamente a figura anterior do registrador BCSCTL3. Ao escrever o comando “LFXT1S_2”, estamos atribuindo o valor 10b aos bits 5 e 4. Você também poderia utilizar outras notações para valores diferentes, como LFXT1S_0, LFXT1S_1 e LFXT1S_3. Sendo assim, o valor de 10b nos bits 5 e 4, significa que temos um valor de 100000b ou 020h.

O resultado disso é que habilitamos o modo VLO Clock.

                                                                                                                                                             

IFG1 &= ~OFIFG;

 

Se uma falha ocorre, acontecerá do MCLK, automaticamente passar a utilizar o DCO como fonte. Isto relacionado com uma determinada flag que é setada, a qual é a OFIFG. O comando acima portanto apaga esta flag.

O IFG1 é o Interrupt Flag Register 1. O bit deste registrador é a nossa flag OFIFG. Portanto é aplicado o operador AND em conjunto com a NOT da flag, zerando o bit.

                                                                                                                                                             

_bis_SR_register(SCG1 + SCG0);

É o Status Register com as definições de SCG0 e SCG1 (System Clock Generator 0 e 1). Na seção 4, em CPU Register do guia do usuário, você pode ter maiores informações sobre esses bits.

                                                                                                                                                             

BCSCTL2 |= SELM_3 + DIVM_3;

Aqui estamos configurando o outro registrador. Veja na figura abaixo, o registrador BCSCTL2.

 

RegisterBCSCTL2

Figura 6 – Register BCSCTL2

 

Portanto estamos configurando os bits referentes a SELMx e DIVMx.

SELM_3 faz referência ao valor 11b, bits 7 e 6. Ou seja, seleciona a fonte de MCLK a partir de LFXT1CLK ou VLOCLK.

DIVM_3 também faz referência ao valor 11b, bits 5 e 4. É o divisor do clock por 8.

                                                                                                                                                              

while(1){
P1OUT = 0x40;
_delay_cycles(100);
P1OUT = 0;
_delay_cycles(5000);
}

Por fim, dentro do nosso loop infinito teremos um pequeno código pisca led. A função delay recebe um parâmetro, que é o número de ciclos de clock. Portanto, este atraso depende da frequência do clock.

 

Prática

 

 

 

 

Conclusão:

A ideia central do artigo é mostrar como você pode mexer nas configurações do sistema de clock e programar conforme o resultado que deseja. Para isso alteramos os bits dos registradores relacionados ao assunto em questão. Teremos mais exemplos a fim de continuar esse estudo, e você poderá comparar diferentes configurações para a frequência de clock.

 

Referências:

MSP430 LaunchPad Workshop

Inscreva-se para ficar atualizado!

Inscreva-se agora e fique por dentro das novidades do site

Fique tranquilo, respeitamos sua privacidade!

Deixe um comentário

O seu endereço de e-mail não será publicado.