• Nenhum resultado encontrado

MSP 430 Lab 04 Fontes de clock e configuração das entradas e saídas digitais

N/A
N/A
Protected

Academic year: 2021

Share "MSP 430 Lab 04 Fontes de clock e configuração das entradas e saídas digitais"

Copied!
16
0
0

Texto

(1)

MSP 430 Lab 04 – Fontes de

clock e configuração das

entradas e saídas digitais

Teste com o sociloscópio

Neste Lab iremos descrever os passos necessários para inicialização de duas fontes de clock da CPU e da configuração das GPIO. O termo GPIO refere-se a General Purpuse Imput and Output (Entradas e Saídas de Propósito Geral) e abrange todos os pinos do microcontrolador que apresentam múltiplas funções. Tópicos como o processo de reset, opções de fonte de clock e manuseio do WDT (Watch Dog Timer) serão descritos neste lab. Ao final, seremos capazes de entender o algoritmo que faz uso dos sistemas de clock e acesso aos pinos de entrada e saídas deste microcontrolador.

Introdução

O microcontrolador MSP430G2553 apresenta um modo ativo de trabalho (Active Mode) e cinco modos de operação em baixo

(2)

consumo, selecionáveis via software.

Um evento de interrupção pode “acordar” o microcontrolador que esteja em qualquer modo de operação em baixo consumo, processar a requisição que gerou a interrupção e retornar novamente para o modo de economia de energia programado anteriormente. Este comportamento é ideal para aplicações onde o consumo de energia é um ponto crítico no desenvolvimento da aplicação.

Pinagem microcontrolador

Os seguintes seis modos de operação podem ser configurados via software no microcontrolador, são eles:

Modo Ativo (Active mode – AM)

Todas as fontes de clock são ativados.

Modo de baixo consumo 0 (Low-power mode 0 – LPM0) CPU é desligada.

ACLK e SMCLK permanecem ativos, MCLK é desligado. Modo de baixo consumo 1 (Low-power mode 1 – LPM1)

CPU é desligada.

ACLK e SMCLK permanecem active, MCLK é desligado. Os osciladores de Clock Digitais (Digitally Controlled Oscilator – DCO’s) são desabilitados se o DCO não for utilizado no Modo Ativo.

(3)

CPU e desligada.

MCLK e SMCLK são desligados. DCO’s permanecem ativos. ACLK permanece ativo.

Modo de baixo consumo 3 (Low-power mode 3 – LPM3) CPU e desligada.

MCLK e SMCLK são desligados. DCO’s são desligados.

ACLK permanece ativo.

Modo de baixo consumo 4 (Low-power mode 4 – LPM4) CPU é desligada.

ACLK é desligado.

MCLK e SMCLK são desligados. DCO’s são desligados.

Oscilador a cristal tem seu funcionamento interrompido.

Inicialização e GPIO

Durante o processo de inicialização do microcontrolador várias ações ocorrem internamente no microcontrolador com o intuito de garantir o funcionamento correto do dispositivo. A seguir, descrevemos o estado do sistema durante a inicialização:

Na alimentação (Power Up – PUC) o circuito que verifica o nível de tensão de alimentação mantém o dispositivo em reset até que o VCC esteja em um nível acima do ponto de histerese.

O pino 16 (RST/NMI) é configurado automaticamente como reset.

Os clocks do sistema são configurados.

M ó d u l o s d o s p e r i f é r i c o s e r e g i s t r a d o r e s s ã o configurados.

O registrador de status (SR) é resetado.

O contador de programa (Program Counter – PC) é carregado com o endereço de memória que está contido no vetor de reset (0FFFEh). Se o valor contido nesta

(4)

posição de memória for 0FFFFh, o dispositivo vai ser desabilitado para um consumo mínimo de energia.

A b a i x o , i l u s t r a m o s o M a p a d e M e m ó r i a r e f e r e n t e a o microcontrolador MSP430G2553.

M a p a d e m e m o r i a MSP430

Após o reset ou início do sistema, o software deve:

Iniciar o ponteiro da pilha, tipicamente no topo da área de memória RAM (Random Acces Memory).

Reconfigurar os clocks (se necessário).

Iniciar o watchdog timer de acordo com a aplicação, usualmente desligado no modo de debugging.

Reconfigurar os periféricos de clock.

Sistemas de Clock’s e Osciladores

Um dos primeiros sistemas a ser programado e entendido pelo usuário é o clock do dispositivo.

O sistema de clock é baseado no modo básico que inclui suporte para o cristal externo de 32768 Hz, um oscilador interno de

(5)

baixo consumo e baixa frequência (Low Power and Low Frequency – LF) e um oscilador interno digital (Digitally Controlled Oscillator – DCO).

O sistema básico de clock foi desenvolvido para garantir as necessidades de baixo custo e baixo consumo. O DCO interno garante um rápido retorno dos modos de baixo consumo, com estabilidade de operação, em menos de 1 µs.

O módulo básico de clock fornece os seguintes sinais:

Clock Auxiliar (Auxiliary clock – ACLK), alimentado pelo cristal externo de 32768 Hz ou pelo oscilador interno de baixa frequência (LF).

Clock principal (Main clock – MCLK) que é o sistema de clock utilizado pela CPU.

Sub-Main clock (SMCLK), sendo o subsistema utilizado pelos periféricos.

As fontes de clock ilustradas na figura abaixo, apresentam as seguintes características:

Very Low Power/Low Frequency Oscillator (VLO) 4 –20kHz (típico em 12kHz)

500nA no modo standby

5%/°C e 4%/Mudança de tensão Crystal oscillator (LFXT1)

Capacitores interno programáveis.

Apresenta segurança contra falhas – OSC_Fault. Mínimo pulso na filtragem.

Digitally Controlled Oscillator (DCO)

0-to-16MHz (Calibração de fábrica geralmente em 1 MHz).

+3% de tolerância.

Calibração de fábrica é armazenado na memória Flash.

(6)

Fontes de clock família MSP430

Existe uma relação direta entre a tensão de alimentação do microcontrolador e a frequência de clock na qual queremos que o sistema opere. No gráfico abaixo, essa relação e ilustrada.

Gráfico relação entre frequência de trabalho e alimentação

Observamos que para uma alimentação em 1,8 V o sistema pode operar somente em 6 MHz. Já para alimentações entre 3,3 e 3,6V a frequência de operação pode chegar à até 16 MHz. Esta relação tem como principal objetivo atingir o mínimo de consumo de energia relacionando a frequência e tensão de alimentação.

(7)

Funcionamento do sistema de segurança (Failsafe)

do WatchDog Timer – WDT

Algumas ações são tomadas automaticamente se a fonte de clock escolhida para a aplicação falhar e o módulo de segurança do W D T é r e s p o n s á v e l p o r e s t a s a ç õ e s . U m d i a g r a m a d e funcionamento do Failsafe é ilustrado logo abaixo.

Se o ACLK ou SMCLK falhar, a fonte de clock passará a ser o MCLK (WDT + failsafe feature).

Se o MCLK for alimentado pelo cristal e o cristal falhar, MCLK será o DCO (XTAL failsafe feature).

Essas mudanças automáticas da fonte de clock são impostas para garantir que o sistema não desenvolva ações inesperadas por falhas no sincronismo entre os periféricos e processamento.

F o n t e s d e c l o c k e WDTC

Existe uma outra restrição quanto a fonte de clock do WDT. Não podemos desabilitar a fonte ativa de clock que selecionamos para o WDT. Devemos ter em mente que alguns dos modos de baixo consumo desabilitam o DCO, desligam o SMCLK e podem também desabilitar o VLO.

(8)

Limitação na desativação de uma fonte de clock

Se o WDT for alimentado por uma das fontes descritas anteriormente, não podemos desligar essa fonte de clock no modo de baixo consumo. Um modo de proteção contra essa ação é implementado no compilador do CCS.

Teste das fontes de clock

Para testar as diferentes formas de se usar os módulos de clock deste microcontrolador, crie um novo projeto seguindo os mesmos procedimentos descritos nos Lab 02 e 03.

(9)

CCS novo projeto

No arquivo main.c, copie e cole, inicialmente, o código disponível no quadro abaixo.

[crayon-587cfd84c8420040700211/]

Operando a CPU utilizando o VLO

Vamos iniciar os testes neste Lab operando a CPU na fonte de clock VLO. Este é o clock de menor frequência e trabalha aproximadamente em 12 KHz então, iremos observar sua ação piscando o led vermelho a uma frequência de aproximadamente uma vez a cada 3 segundos. Não vamos utilizar nenhum

(10)

periférico de clock neste agora, apesar do cristal já ter sido montado na launchPad anteriormente.

Informações mais detalhadas sobre os registradores que serão abordados logo em seguida, poderão ser obtidas consultando-se o User Guide do MSP430 neste link.

1 – Com o propósito de conferirmos a execução do código (debug), será melhor parar a execução do watchdog timer. Desta forma, não precisamos nos preocupar com suas ações (Seção 10.3.1 do User Guide). Dentro do arquivo main.c adicione o seguinte código:

WDTCTL = WDTPW + WDTHOLD;

O WDTCTL é o registrador do watchdog timer. Esta instrução configura a password (WDTPW) e o bit responsável por parar o timer (WDTHOLD).

2 – Agora, precisamos configurar o LED que estará conectado a linha de entrada e saída – GPIO. O LED verde está localizado no Port 1 Bit 6 e precisamos de configurá-lo como saída. O LED acenderá quando a saída é configurada com “1”. Vamos limpar este registrador para manter o LED desligado (Seção 8.3 do User Guide). Adicione as duas linhas seguintes de código no main.c.

P1DIR = 0x40; P1OUT = 0;

3 – Para configurar o sistema de clock a ser utilizado neste experimento, adicione a linha de código abaixo no main.c.

BCSCTL3 |= LFXT1S_2;

O BCSCTL3 (Seção 5.3.4 do User Guide) é um dos registradores d o s i s t e m a b á s i c o d e c l o c k d e s t a f a m í l i a d e microcontroladores. Na seção 5.3, página 282 do Guia do Usuário, informa que o estado de reset deste registrador é

(11)

005h. Se conferirmos os campos deste registrador obtemos que estas configurações são para o cristal de 32768 Hz conectado ao LFXT1 com capacitores de 6pF e falha do oscilador configurados.

O operador de estado lógico OR utilizado acima, juntamente com o registrador LFXT1S_2 (Valor 020h – Página 285 do U.G) resulta em um valor 025h. Este valor configura os bits 4 e 5 para 10b, habilitando o modo VLO clock.

4 – O sistema de clock irá forçar o MCLK a usar o DCO como fonte na presença de uma falha no clock (Seção 5.2.7), precisamos então apagar este flag de falha. Inclua as linhas abaixo no programa.

IFG1 &= ~OFIFG;

O registrador IFG1 é o Interrupt Flag Register 1. O bit configurado no campo do registrador é o Oscilator Fault Interrupt Flag – OFIFG. A lógica AND aplicada entre IFG1 e NOT OFIFG (Valor 2) irá zerar o bit 1 do registrador IFG1 (Seção 5.3.6 – pag. 285 do U.G)

5 – Precisamos aguardar aproximadamente 50us para que o sistema de falha de clock (Clock Fault System) possa reagir. Operando com o VLO em 12KHz, parando o DCO, iremos garantir este tempo de 50us. Adicione as linhas abaixo:

_bis_SR_register(SCG1 + SCG0);

SR é o Registrador de Status (Status Register) e todas as informações referentes as definições do SCG0 (System clock generator 0) e SCG1 (System clock generator 1) estão disponíveis na seção 4.3.3 – pág. 121 do U.G.

A operação intrínseca _bis refere-se a chamada de um registro em assembler dentro de um programa escrito em linguagem C.

6 – Temos também um divisor no clock MCLK 3. Vamos dividir por 8 utilizando o seguinte código.

(12)

BCSCTL2 |= SELM_3 + DIVM_3;

Os valores dos registradores utilizados na operação OR acima estão descritos na seção 5.3.3 pág. 284 do U.G.

Um pequeno código será implementado para que o LED verde possa piscar.

[crayon-587cfd84c8453525512277/]

A instrução P1OUT já foi explicada anteriormente. A função __delay é intrínseca ao compilador e serve para gerar atrasos na execução do programa. O único parâmetro requerido é o número de ciclos de clock que a CPU ficará aguardando. Esta não é uma forma correta de gerar atrasos e isso será explicado posteriormente.

Salve o código apresentado abaixo, resultado de nosso trabalho até este momento.

[crayon-587cfd84c846c497569319/]

Clique no botão “Debug” e carregue o código na LaunchPad como descrito no Lab02 e 03. Se tudo proceder da forma esperada, o LED verde deverá piscar.

(13)

Sinal do pino conectado ao LED verde

Operando a CPU utilizando o Cristal

7 – A frequência do cristal é 32768 Hz, quase três vezes mais rápida que o VLO. Se executarmos o código anterior utilizando o cristal, o LED verde deveria piscar uma vez a cada segundo. O valor de 32768 Hz é padrão pois representa o número 215

tornando fácil o uso de um simples contador digital para uma taxa de uma vez por segundo, perfeito para relógios e outros tipos de temporizadores.

8 – Esta parte do experimento utiliza o código anterior como ponto de partida. Os dois LEDs serão utilizados, logo devemos configura-los como saída utilizando as seguintes linhas de código:

(14)

Alterar: P1DIR = 0x40; Para: P1DIR = 0x41;

Fazendo o LED vermelho (P1.0) iniciar ligado: Alterar: P1OUT = 0;

Para: P1OUT = 0x01;

9 – Precisamos de selecionar o cristal externo como uma entrada de baixa frequência.

Mude: BCSCTL3 |= LFXT1S_2;

Para: BCSCTL3 |= LFXT1S_0 + XCAP_3;

O parâmetro XCAP_3 seleciona o capacitor de carga de 12pF. Uma capacitância alta é requerida para cristais de baixa frequência.

10 – No código anterior nós limpamos o flag do registrador OSCFault, agora queremos ter certeza de que este flag esteja limpo e que o cristal funcione corretamente. Isto irá exigir um loop com um teste.

[crayon-587cfd84c848c520160992/]

A condição para o loop while(IFG1 & OFIFG) testa o OFIG no registrador IFG1. Se este flag de falha for limpo, a execução irá sair do loop. Precisamos aguardar 50us após limpar o flag a t é q u e p o d e m o s t e s t a - l o n o v a m e n t e . A f u n ç ã o _delay_cycles(100000); é mais longa do que 50us. Precisamos que este tempo seja longo para que podemos ver o LED vermelho acender no começo do código. Caso contrário ele irá piscar tão rápido que não conseguiremos observar.

11 – Finalmente, precisamos adicionar uma linha no código para desligar o LED, indicando que o algoritmo passou pelo teste de falha. Adicione a nova linha após o while loop:

(15)

P1OUT = 0;

Após todas as mudanças, o seu código deverá se parecer com o mostrado no quadro abaixo.

[crayon-587cfd84c84a1445366086/]

Novamente, aperte o botão “Debug” e aguarde ate que a tela de Debug aparece, em seguida, pressione a opção “Resume” ou aperte F8. (Procedimento já detalhado em Lab’s anteriores). Se tudo der certo, o LED vermelho deverá piscar rapidamente (Tempo gasto no delay e aguardando para o cristal iniciar) e logo em seguida o LED verde deverá acender uma vez a cada segundo.

Na figura abaixo observamos o monitoramento do sinal no pino conectado ao LED verde (sinal na cor azul), ligando e desligando por um tempo muito curto e no canal 2 (sinal na cor amarela) temos o funcionamento do LED vermelho que ativa somente antes do cristal iniciar.

(16)

Sinal nos pinos do Led verde e vermelho

Conclusão

Neste Lab aprendemos a dinâmica de configuração dos registradores necessários para o funcionamento desta família de microcontroladores e de duas fontes principais de clock. Uma primeira visão detalhada sobre as configurações deste microcontrolador pode assustar o usuário, porém elas são necessárias para um entendimento correto do que exatamente estamos programando, já que comportamentos inesperados de funcionamento podem ser evidenciados em uma aplicação industrial ,por exemplo, e isto é um fator mais do que crítico para qualquer projeto.

Referências

Documentos relacionados

Avaliar uma instituição de ensino é uma das tarefas mais complexas que norteiam a avaliação das diretrizes de execução do Plano de Desenvolvimento Institucional (PDI), o que requer

29 Table 3 – Ability of the Berg Balance Scale (BBS), Balance Evaluation Systems Test (BESTest), Mini-BESTest and Brief-BESTest 586. to identify fall

5.2.1.  As  rubricas  de  despesa  de  transferências  correntes  ou  de  capital  e  de  subsídios  para  organismos  da  Administração  Central  devem 

nesta nossa modesta obra O sonho e os sonhos analisa- mos o sono e sua importância para o corpo e sobretudo para a alma que, nas horas de repouso da matéria, liberta-se parcialmente

Estas erupções fundamentalmente havaianas e/ou strombolianas foram de explosividade baixa a média, e emitiram na maioria “bagacinas” (lapilli), bombas e lavas basálticas fluidas

O objetivo do curso foi oportunizar aos participantes, um contato direto com as plantas nativas do Cerrado para identificação de espécies com potencial

3.3 o Município tem caminhão da coleta seletiva, sendo orientado a providenciar a contratação direta da associação para o recolhimento dos resíduos recicláveis,

No código abaixo, foi atribuída a string “power” à variável do tipo string my_probe, que será usada como sonda para busca na string atribuída à variável my_string.. O