Você está na página 1de 27

Processamento Digital de Sinais com dsPIC

NOTAS DE AULA

CURSO

PROCESSAMENTO
DIGITAL DE SINAIS
COM DSPIC

Luis Otávio Médici Hitech Eletrônica 1 de 27


Processamento Digital de Sinais com dsPIC

Índice
CURSO.......................................................................................................................................... 1
Exemplo 1.................................................................................................................................................. 3
Objetivos................................................................................................................................................ 3
Tarefas....................................................................................................................................................3
Dicas.......................................................................................................................................................4
Para pensar............................................................................................................................................. 5
Exemplo 2.................................................................................................................................................. 6
Objetivos................................................................................................................................................ 6
Tarefas....................................................................................................................................................6
Dicas.......................................................................................................................................................7
Para pensar............................................................................................................................................. 8
Exemplo 3.................................................................................................................................................. 9
Objetivos................................................................................................................................................ 9
Tarefas....................................................................................................................................................9
Dicas.....................................................................................................................................................10
Para Pensar........................................................................................................................................... 11
Exemplo 4................................................................................................................................................ 12
Objetivos.............................................................................................................................................. 12
Tarefas..................................................................................................................................................12
Dicas.....................................................................................................................................................13
Para Pensar........................................................................................................................................... 13
Exemplo 5................................................................................................................................................ 14
Objetivos.............................................................................................................................................. 14
Dicas.....................................................................................................................................................15
Para pensar........................................................................................................................................... 18
Exemplo 6................................................................................................................................................ 19
Objetivos.............................................................................................................................................. 19
Tarefas..................................................................................................................................................19
Dicas.....................................................................................................................................................20
Importando valores no dsPICWorks........................................................................................ 21
Para Pensar........................................................................................................................................... 22
Exemplo 7................................................................................................................................................ 23
Objetivos.............................................................................................................................................. 23
Tarefas..................................................................................................................................................23
Dicas.....................................................................................................................................................24
..............................................................................................................................................................26
Para Pensar........................................................................................................................................... 27

Luis Otávio Médici Hitech Eletrônica 2 de 27


Processamento Digital de Sinais com dsPIC

Exemplo 1

Objetivos
- Criar e configurar um projeto no MpLab utilizando o compilador
C30
- Mostrar a estrutura do código em C
- Mostrar os arquivos associados ao projeto
- Entender o recurso de registrador de módulo do dsPIC
- Mostrar a primeira compilação
- Mostrar a primeira gravação
- Mostrar alguns recursos do simulador

Tarefas

1) Crie a pasta: C:\dspic


2) Abra o MpLab
3) No menu: Project/Project Wizard ...
4) Siga os passos do recurso de criação de projeto:
a. Selecione o componente
b. Selecione o compilador e verifique se todos arquivos estão
presentes
c. Defina o nome do projeto como “Curso” e o local como
C:\dspic
d. Adicione o arquivo Lab_1.c ao projeto
e. Siga para o próximo passo para finalizar o “Wizard”
5) Analise o código fonte Lab_1
6) No menu: File/Open , procure pelo arquivo “p33FJ64GP706.h “ na
pasta de instalação do compilador C30
7) Analise o arquivo “Header“

Luis Otávio Médici Hitech Eletrônica 3 de 27


Processamento Digital de Sinais com dsPIC
8) Configure o registrador de período do Timer 1 para interrupções
a cada 0,5 segundo.
9) No menu: Project/Build All <CTRL+F10>, compile o programa
10)Analise o resultado da compilação e tente descobrir a causa do
problema
11)No menu: Project/Add files to project, inclua o arquivo de
“Linker Script”
12)No menu: Project/Build All (atalho: CTRL+F10), compile o
programa
13)Verifique se o programa foi compilador com sucesso
14)Ligue a placa a fonte de alimentação, ligue o ICD2 ao PC usando
o cabo USB e em seguida ligue o ICD2 a placa usando o campo com
conector RJ11
15)No menu: Programmer/Select programmer habilite o ICD2
16)Verifique se o ICD2 foi devidamente habilitado
17)No menu: Programmer/Program, para gravar o programa no dsPIC.
Veja também a opção por ícone.
18)Verifique o funcionamento da do programa na placa comparando o
resultado com a sua interpretação do código
19)No menu: Debugger/Select Tool habilite o “MPLAB SIM”
20)Posicione o curso dentro da área de código que inverte o LED e
,através do botão da direita do Mouse, insira um Break Point
nesta posição
21)No menu: Debbuger/StopWatch abra e configure o relógio para a
placa que estamos trabalhando
22)No menu: Debuger/Reset/Processor Resert (atalho: F6)
23)No menu: Debuger/Run (atalho: F9)
24)Verifique se o programa para de ser executado no Break Point e
qual o valor mostrado no relógio

Dicas
- O Compialdor precisa das informações contidas no arquivo de
“Linker Script” para conseguir compilar o código fonte. O C30
Luis Otávio Médici Hitech Eletrônica 4 de 27
Processamento Digital de Sinais com dsPIC
possui arquivos “Linker Script” específicos para cada part
number na pasta de instalação do C30, sub-pasta
\Microchip\MPLAB C30\support\gld
- Para que um programa ganhe em portabilidade e facilidade de
alteração é interessante que os parâmetros de configuração
constantes seja definidos em bloco. No caso do período de
0,5s é interessante que o mesmo esteja definido em função
destas constantes, deste modo:
o Fos = 8000000 (8Mhz)
o Fcy = Fos /2 (ciclo de máquina é 1:2)
o PR1 = (FCY/Pré Scale) * TEMPO (com base no datasheet)
o Lembro que PR1 é um registrador de 16 bits

Para pensar

- Explique porque que a temporização de 0,5s não ocorre em


períodos exatos de 0,5s?

- Qual seria o valor do PR1 para um período de 2 segundos?

Luis Otávio Médici Hitech Eletrônica 5 de 27


Processamento Digital de Sinais com dsPIC

Exemplo 2

Objetivos
- Mostrar como editar um projeto
- Mostrar a notação para manipulação de bit
- Mostrar como configurar a interrupção
- Mostrar como incluir o tratamento de interrupção no código
- Mostrar mais recursos do simulador

Tarefas

1) No menu: Project/Remove File From Project, retire do projeto o


arquivo Lab_1.c
2) No menu: Project/Add File to Project, inclua no projeto o
arquivo Lab_2.c
3) Verifique se o arquivo de “Linker Script” esta correto
4) Analise o código fonte Lab_2
5) Abra o datasheet do dsPIC (documento # 70165) no capitulo sobre
interrupções:
a. Localize o bit que habilita as interrupções externas 3 e 4
b. Escreva o código que habilite estas interrupções
6) Abra o Manual do C30 (documento # 51284) no capítulo sobre
Interrupções:
a. Analise a sintaxe de definição de uma ISR no C30
b. Procure os nomes atribuídos a interrupções externa 3 e 4
c. Complete o código com a sintaxe de definição das ISR das
interrupções externas 3 e 4
7) No menu: Project/Build All (atalho: CTRL+F10), compile o
programa
8) Verifique se o programa foi compilador com sucesso
9) No menu: Programmer/Select programmer habilite o ICD2

Luis Otávio Médici Hitech Eletrônica 6 de 27


Processamento Digital de Sinais com dsPIC
10)Verifique se o ICD2 foi devidamente habilitado
11)No menu: Programmer/Program, para gravar o programa no dsPIC.
Veja também a opção por ícone.
12)Verifique o funcionamento da do programa na placa comparando o
resultado com a sua interpretação do código
13)No menu: Debugger/Select Tool habilite o “MPLAB SIM”
14)No menu: View/Watch, criar um estímulo assíncrono (tipo Toggle)
vinculado aos botões da placa
15)Posicione o curso dentro da área de código que trata o Botao1 e
insira um Break Point (botão da direita do mouse)
16)No menu: Debugger/Stimulus/New Workbook:
a. Insira o SRF vinculado aos botões
b. Mude a propriedade para que o valor seja mostrado em
binário (sobre o SRF clique o botão da direita ->
Properties)
17)No menu: Debuger/Reset/Processor Reset (atalho: F6)
18)No menu: Debuger/Run (atalho: F9)
19)Verifique através do Watch em que situação o programa para de
ser executado devido ao Break Point

Dicas
- O datasheet informado é genérico para os dsPIC33F
- No datasheet: procure pelo nome genérico da interrupção externa
que é “INT”
- A sintaxe mais completa demanda que você saída o nome do SRF e
também o nome do bit dentro deste SFR. Descubra em SRF está o
bit que habilita a interrupção: <nome do SFR>bits.<nome do bit>
- A sintaxe mais prática é viabilizada por um define dentro Header
específico do Part Number: _<nome do bit> . Desta forma você não
precisa saber em qual SFR está o bit

Luis Otávio Médici Hitech Eletrônica 7 de 27


Processamento Digital de Sinais com dsPIC
- No manual do C30, capítulo sobre Interrupção, procure a
explicação sobre a sintaxe simplificada para definição de ISR:
void _ISR _<nome da interrupção>(void)

Para pensar

- Como o C30 salva contexto das variáveis quando entra na


Interrupção?

- Onde é definido se a interrupção ocorre na borda de subida ou


de descida?

- É possível fazer com que o Timer 1 também funcione com


Interrupção ?

Luis Otávio Médici Hitech Eletrônica 8 de 27


Processamento Digital de Sinais com dsPIC

Exemplo 3

Objetivos
- Mostrar como encontrar os SRF referentes a cada interrupção
- Mostrar como configurar as interrupções
- Mostrar a funcionalidade do recurso de prioridade de
interrupção

Tarefas

1) No menu: Project/Remove File From Project, retire do projeto o


arquivo Lab_2.c
2) No menu: Project/Add File to Project, inclua no projeto o
arquivo Lab_3.c
3) Verifique se o arquivo de “Linker Script” esta correto
4) Analise o código fonte Lab_3
5) Abra o datasheet do dsPIC (documento # 70165) no capitulo sobre
interrupções:
a. Localize os bits que definem a prioridade sistêmica (core)
b. Defina a prioridade sistêmica como sendo 4
c. Localize os bits que definem a prioridade do Timer 1 e 2
d. Escreva o código que atribua prioridade 3 para o Timer 1
e. Escreva o código que atribua prioridade 5 para o Timer 2

6) Abra o Manual do C30 (documento # 51284) no capítulo sobre


Interrupções:
a. Analise a sintaxe de definição de uma ISR no C30
b. Procure os nomes atribuídos a interrupções de Timer 1 e 2
c. Confirme se a sintaxe de definição das ISR das interrupções
de Timer 1 e 2 está correta

Luis Otávio Médici Hitech Eletrônica 9 de 27


Processamento Digital de Sinais com dsPIC
7) Inclua código dentro da ISR do Timer 1 fazendo com que o
programa permaneça dentro desta ISR até que por mais um período
8) No menu: Project/Build All (atalho: CTRL+F10), compile o
programa
9) Verifique se o programa foi compilador com sucesso
10)No menu: Programmer/Select programmer habilite o ICD2
11)Verifique se o ICD2 foi devidamente habilitado
12)No menu: Programmer/Program, para gravar o programa no dsPIC.
Veja também a opção por ícone.
13)Verifique o funcionamento do programa na placa comparando o
resultado com a sua interpretação do código

Dicas

- Cada evento capaz de gerar uma interrupção tem associado a ele


pelo menos três SFR:
o IECn – Interrupt Enable Control (0<=n<=4)
o IFSn – Interrupt Flag Status (0<=n<=4)
o IPCn – Interrupt Priority Control (0<=n<=17)
- Alem desses temos também:
o INTCON1 – Interrup Control 1
o INTCON2 – Interrup Control 2
o INTTREG – Interrup Control and Status
- A unidade de controle de processamento (core) tem seu nível de
prioridade definido por software (aqui chamada de prioridade
sistêmica) através do SFR SR: CPU Status Register
- Para que uma Interrupção seja atendida temos que: Prioridade da
Interrupção (IPCn) > Prioridade Sistêmica (SR)
- Quando uma Interrupção ocorre e é atendida a Prioridade
Sistêmica a Prioridade da Interrupção que esta sendo atendida,
de modo a garantir que somente Interrupções de Prioridade maior
que a atual interrompam novamente o processamento

Luis Otávio Médici Hitech Eletrônica 10 de 27


Processamento Digital de Sinais com dsPIC
- No exmplos temos três situações:

Sistêmica Timer 1 Timer 2


Preso no Botao1 4 3 (Não) 5 (Sim)
No loop e com Botao1 pressionado 6 3 (Não) 5 (Não)
No loop e com Botao1 liberado 2 3 (Sim) 5 (Sim)

Para Pensar

- O que ocorre se duas Interrupções com prioridades maiores que a


Sistêmica (Core) e iguais ocorrem simultaneamente? Qual das duas
é atendida primeiro?

- De que forma o recurso de priorização de Interrupção pode ajudar


na implementação de um sistema de processamento digital de
sinais?

- No exemplo dois (Lab_2), por que as Interrupções Externas foram


atendidas se nós não configuramos as prioridades específicas e
sistêmicas?

- Por que os Traps são sempre atendidos, independentemente do


nível de prioridade sistêmico?

Luis Otávio Médici Hitech Eletrônica 11 de 27


Processamento Digital de Sinais com dsPIC

Exemplo 4

Objetivos
- Demonstrar a configuração do módulo LCD
- Demonstrar o funcionamento do módulo LCD
- Demonstrar a configuração do periférico UART
- Demonstrar o funcionamento do periférico UART

Tarefas

1) No menu: Project/Remove File From Project, retire do projeto o


arquivo Lab_3.c

2) No menu: Project/Add File to Project, inclua no projeto o arquivo


Lab_4.c

3) Verifique se o arquivo de "Linker Script" esta correto

4) Analise o código fonte Lab_4

5) Abra o datasheet do dsPIC (documento # 70165) no capitulo sobre


UART:
- Configure o baud rate para 9600;
- Habilite a interrupção de recepção;
- Desabilite o autobaud;

6) No menu: Project/Build All (atalho: CTRL+F10), compile o programa

7) Verifique se o programa foi compilador com sucesso

8) No menu: Programmer/Select programmer habilite o ICD2

Luis Otávio Médici Hitech Eletrônica 12 de 27


Processamento Digital de Sinais com dsPIC

9) Verifique se o ICD2 foi devidamente habilitado

10) No menu: Programmer/Program, para gravar o programa no dsPIC.


Veja também a opção por ícone.

11) Verifique o funcionamento da do programa na placa comparando o


resultado com a sua interpretação do código. Para isso use o programa
Comunicação serial Módulo 2 (Ícone localizado na área de trabalho) ou
o Hiper Terminal.

Dicas

- Como estamos usando a UART para receber dados, é interessante


sempre que possível usar a interrupção de recepção de dados para que
a informação seja lida o mais rápido possível.

- No caso do módulo de LCD, todas as funções de delay foram baseadas


em ciclos de máquina. Caso use o C30 com todas as otimizações
habilitadas pode ser que tenha problemas com as funções do LCD. As
funções de delays que usam ciclo de máquina podem ser modificadas
para usar um dos timers disponíveis para a geração dos tempos.

Para Pensar

- Por que o buffer_lcd[] foi inicializado (vide programa) com 0x20


em todos os elementos?

Luis Otávio Médici Hitech Eletrônica 13 de 27


Processamento Digital de Sinais com dsPIC

Exemplo 5

Objetivos
- Demonstrar a configuração básica do periférico ADC
- Demonstrar o recurso de formatação de resultado
- Demonstrar o funcionamento do periférico ADC

Tarefas:

1) No menu: Project/Remove File From Project, retire do projeto o


arquivo Lab_4.c
2) No menu: Project/Add File to Project, inclua no projeto o
arquivo Lab_5.c
3) Verifique se o arquivo de “Linker Script” esta correto
4) Analise o código fonte Lab_5
5) Abra o datasheet do dsPIC (documento # 70165) no capitulo sobre
o periférico:
a. Localize os SRF de configuração;
b. Localize os bits que de configuração da seqüência de
amostragem e conversão
c. Localize os bits de definição de formato
6) No menu: Programmer/Select Programmer, habilite o ICD2
7) No menu: Project/Build All (atalho: CTRL+F10), compile o
programa
8) Verifique se o programa foi compilador com sucesso
9) Verifique se o ICD2 foi devidamente habilitado
10)No menu: Programmer/Program, para gravar o programa no dsPIC.
Veja também a opção por ícone.
11)Verifique o funcionamento da do programa na placa comparando o
resultado com a sua interpretação do código
12)Na função de configuração inicial do ADC, mude para o
formatação “Signed Integer”

Luis Otávio Médici Hitech Eletrônica 14 de 27


Processamento Digital de Sinais com dsPIC
13)Verifique no código as mudanças para que o número o valor no
LCD seja mostrado em conformidade com o formato “Signed Integer”
e edite o código se necessário.
14)Configure o Timer3 para a taxa de amostragem de 48Khz.
15)No menu: Project/Build All (atalho: CTRL+F10), compile o
programa.
16)Verifique se o programa foi compilador com sucesso
17)No menu: Programmer/Program, para gravar o programa no dsPIC.
Veja também a opção por ícone.
18)Verifique o funcionamento da do programa na placa comparando o
resultado mostrado no display com os valores esperados para a
formatação “Signed Integer”

Dicas

Roteiro para configuração do ADC

- Selecione quais pinos devem trabalhar como entrada analógica


através do SRF ADxPCFGH ou ADxPCFGL

- Selecione a fonte de referencia de tensão para atender a faixa de


tensão do sinal a ser amostrado através do SRF ADxCON2

- Selecione o Clock a ser utilizado para conversão de modo atender a


taxa desejada através do SRF ADxCON3

- Determine quantos S/H (Sample&Hold) devem ser utilizado através do


ADxCON2. No modo 12-bits temos somente um S/H.

- Selecione a seqüência apropriada de Amostragem e Conversão


(Sampling/convertion) através das opções disponíveis nos SFR
ADxCON1 e ADxCON3

Luis Otávio Médici Hitech Eletrônica 15 de 27


Processamento Digital de Sinais com dsPIC

- Selecione como o resultado deve ser apresentado através do SFR


ADxCON1

- Ligue periférico ADC através do SRF ADxCON1

Caso esteja deseje trabalhar com Interrupção configure os respectivos


bits

- Limpe o respectivo Flag de Interrupção de ADC

- Selecione o nível de prioridade da Interrupção de ADC

Informações sobre alguns Bits de Configuração do ADC:

FORM: Data output format


Para 12 bits:
- 11 – Signed Fractional (sddd dddd dddd 0000)
o –1 <= n < 1
- 10 – Fractional (dddd dddd dddd 0000)
o 0 <= n < 1
- 01 – Signed Integer (ssss sddd dddd dddd)
o –2048 <= n < 2048
- 00 – Integer (0000 dddd dddd dddd)
o 0 <= n < 4096

SSRC: Sample Clock Source Select bits: define o modo de disparo de


início de conversão
- 111 = Auto-Convert: amostragem e conversão seqüenciadas de forma
contínua e contígua.
- 011 = Conversão em fase com o periférico MPWM (ciclo ativo)
- 010 = Início de conversão definido pelos Timers 3 ou 5

Luis Otávio Médici Hitech Eletrônica 16 de 27


Processamento Digital de Sinais com dsPIC
- 001 = Início de conversão definido por Interrupção Externa
- 000 = Início de conversão definido pelo Reset do bit SAMP

ASAM: ADC Sample Start Bit: define o momento em de início de


amostragem
- 0 = amostragem começa imediatamente após o fim da conversão
anterior setando o SAMP automaticamente
- 1 = amostragem começa quando SAMP é setado

SAMP: ADC Sample Bit: define em que estado está o S/H


- 0 = Holding
- 1 = Sampling

SAMC: Auto Sample Time bits: define o tempo de amostragem (sampling


do S/H) em função do número de TAD podendo assumir valores entre 0 e
31 TAD.

ADCS: ADC Converstion Clock Select bits: define quantos períodos


ciclos de máquina (Tcy) compõe um TAD, podendo assumir valor entre 1
e 64 Tcy.
ADCS = (TAD/Tcy)-1
TAD = Tcy*(ADCS+1)

Ilustração de um tipo de seqüência de conversão:

Timer

Amostragem Conversão Amostragem Conversão

Tempo
Amostragem começa imediatamente após o fim da conversão anterior
(ASAM=0)

Luis Otávio Médici Hitech Eletrônica 17 de 27


Processamento Digital de Sinais com dsPIC

A amostragem termina é finalizada pelo Timer (SSRC = b’010’) para que


seja iniciada a conversão

Neste caso a freqüência de amostragem é definida pelo Timer e o tempo


de amostragem é definido pela diferença entre o período de amostragem
e o tempo de conversão.

Para pensar

- Por que é interessante a existência controles independente para


início de amostragem e início de conversão?

- Que alterações seriam necessárias no código de configuração para


incluirmos mais entradas analógicas?

- Qual o valor mínimo de TAD ? Onde devo procurar esta informação?

- Como deveria ser o código para que o a conversão ocorresse em


“Unsigned Fractional” e o resultado fosse mostrado de forma
coerente com a tensão aplicada a entrada analógica (0..3,3V) ?

- Faça medições de tempo utilizando as saídas Led1 e Led2 (verifique


o valor exato da freqüência de amostragem)

Luis Otávio Médici Hitech Eletrônica 18 de 27


Processamento Digital de Sinais com dsPIC

Exemplo 6

Objetivos
- Utilizar funções da biblioteca matemática (Math)
- Demonstrar o recurso tabelamento de uma função
- Utilizar o periférico SPI
- Demonstrar o funcionamento de um DAC
- Demonstrar o uso do software dspWorks para visualização se sinais
- Utilizar ICD2 no modo Debugger

Tarefas

1) No menu: Project/Remove File From Project, retire do projeto o


arquivo Lab_5.c
2) No menu: Project/Add File to Project, inclua no projeto o
arquivo Lab_6.c
3) Verifique se o arquivo de “Linker Script” esta correto
4) Analise o código fonte Lab_6.c
5) Abra o datasheet do dsPIC (documento # 70165) no capitulo sobre
o periférico SPI e localize os bits de configuração de modo de
operação
6) Abra o datasheet do DAC MCP4922 e localize a carta de tempo de
escrita e também a descrição dos pinos
7) Analise no esquema elétrico como que o MCP4922 está ligado ao
dsPIC
8) Analise a função de configuração do SPI como interface de
comunicação com o MCP4922 (DAC)
9) Coloque o MPLAB no modo simulador (Menu: Debbuger/Select
Tool/MPLAB SIM)
10)Insira um Break Point após a função makewaves()

Luis Otávio Médici Hitech Eletrônica 19 de 27


Processamento Digital de Sinais com dsPIC
11)Compile o código (Build All)
12)Através do simulador execute o código até que ele seja parado
pelo Break Point
13)No menu: View/Watch, inclua a variável fIN
14)Exporte o conteúdo desta variável para um arquivo .MCH
15)Importe o arquivo .MCH no aplicativo dsPICWorks e visualize o
sinal
16)Mude os parâmetros de calculo da função makewaves() e gere uma
nova forma de onda
17)Repita os passos do 11 até 15
18)Ligue um osciloscópio na saída do DAC e compare o sinal da tela
com o sinal mostrado no dsPICWorks
19)Abra a documentação da biblioteca DSP e procure a função que
converte um ponto flutuante em Fractional
20)Descubra em que trecho do programa esta função pode ser
utilizada e teste

Dicas

Equação de síntese do sinal soma de senos

f(t) = sen(wt), w=2*PI*f


f(t) = sen(2*PI*f*t)

Para transformar este sinal contínuo no tempo em um sinal discreto no


tempo definido em intervalos constante iguais a Ts (inverso da
freqüência de amostragem). Temos portanto:

t= n * 1/fs , daí:

f(t) = sen(2*PI*f*n/fs) ou f(t) = sen(2*PI*n*f/fs), sendo n inteiro

Luis Otávio Médici Hitech Eletrônica 20 de 27


Processamento Digital de Sinais com dsPIC
Exportando valores do MPLAB

Para gerar um arquivo de


saída a partir contendo
os valores de um Array
mostrado na Janela
Watch, clique o botão da
direita do mouse sobre o
nome da variável e
selecione a opção
“Export Table”.

Ao pressionar OK será
perguntado um nome de
arquivo deverá ter a
extensão .MCH.

Importando valores no dsPICWorks

Selecione o arquivo de origem


(extensão MCH)
Configure os parâmetros de
importação em conformidade com o
dados previamente exportados do
MPLAB.

Luis Otávio Médici Hitech Eletrônica 21 de 27


Processamento Digital de Sinais com dsPIC
Configuração do Ambiente para trabalhar no modo Debug

Na barra de ferramentas
do MPLAB:

Selecionar modo: Debug

Para Pensar

- Por que o parâmetro N_SAMPLES foi definido como sendo


F_SAMPLE/FREQ_B?

- Por que utilizar a função Float2Fract é mais seguro do que


utilizar o artifício de multiplicar por 0x8000?

- Como podemos estimar a máxima freqüência que podemos sintetizar


através do DAC da placa ?

Luis Otávio Médici Hitech Eletrônica 22 de 27


Processamento Digital de Sinais com dsPIC

Exemplo 7

Objetivos

Tarefas

1) Analise o código fonte programa Lab_7.c


2) Repare que os parâmetros do sinal a ser sintetizado pela função
makewaves foram alterados
3) Abra o manual das bibliotecas do C30
4) Procure as funções relativas a FIR
5) Analise o protótipo destas funções para saber quais dados são
necessários para se executar um filtro
6) Abra o aplicativo dsPICfdLite
7) Parametrize um filtro passa alta da seguinte forma:
a. Sampling Frequency : 10.000
b. Passband frequency: 400
c. Stopband frequency: 200
d. Passband Ripple (dB): 0.1
e. Stopband Ripple (dB): 3
8) Menu: Codegen/Microchip/dsPIC30, gere o arquivo de coeficientes
do filtro armazenado na memória de dados (X Data Space)
9) Faça a adequação de sintaxe do arquivo de coeficientes do filtro
10)Inclua o arquivo de inicialização no projeto
11)Inclua no projeto a biblioteca DSP
12)Inclua no projeto o arquivo header relativo a biblioteca DSP
13)Inclua a declaração da estrutura do programa
14)Inclua a função de inicialização do filtro
15)Inclua a função de filtro

Luis Otávio Médici Hitech Eletrônica 23 de 27


Processamento Digital de Sinais com dsPIC
16)No modo de simulação inclua um Break point antes da função de
inicialização do filtro e outro após a execução do filtro
17)Comente as funções de inicialização de LCD, Timer3, ADC e DAC
18)Compile o programa
19)Através do simulador mande executar o programa até que ele pare
no Break point antes da inicialização do filtro
20)No menu: Debugger/Stopwath zero o contador de tempo
21)Mande o simulador executar o programa novamente até o Break
point após a execução do filtro
22)Verifique em quanto tempo o dsPIC executou o filtro
23)Exporte os dados de saída do filtro
24)Importe os dados de saída do filtro para o dsPICWorks
25)Visualize os dados de saída do filtro

Dicas

Para gerar o arquivo de coeficientes

Luis Otávio Médici Hitech Eletrônica 24 de 27


Processamento Digital de Sinais com dsPIC

Luis Otávio Médici Hitech Eletrônica 25 de 27


Processamento Digital de Sinais com dsPIC

Neste exemplo os coeficientes devem estar armazenados na memória de


dados (X Data Space)
Ao clicar sobre em OK escolha um nome da o arquivo de coeficientes.
Não incluir nenhuma extensão ao nome do arquivo, pois o programa irá
incluir automaticamente a extensão .s (de arquivo de inicialização)

Para adequar a sintaxe do arquivo de coeficientes do filtro


;..................................................................
; Allocate and initialize filter taps
; .section .xdata ; sintaxe antiga
.section .xdata, data, xmemory ; nova sintaxe MPLAB C30 - pos V1.30

;..................................................................
; Allocate delay line in (uninitialized) Y data space
; .section .ybss, "b" ; sintaxe antiga
.section .ydata, data, ymemory ; nova sintaxe MPLAB C30 - pos V1.30

Para portar o filtro no código


- Incluir no projeto a biblioteca DSP
- Incluir o arquivo header referente a biblioteca DSP
- Gerar o arquivo de coeficientes no dsPICfdLite
- Adequar a sintaxe do arquivo gerado
- Incluir a declaração da struture do filtro
- Incluir a função FIRDelayInit
- Incluir a função FIR

Luis Otávio Médici Hitech Eletrônica 26 de 27


Processamento Digital de Sinais com dsPIC

Para Pensar

- Por que na resposta do filtro existe uma distorção nos primeiros


resultados?

- Quando devo utilizar filtros FIR ou IIR?

Luis Otávio Médici Hitech Eletrônica 27 de 27