Professional Documents
Culture Documents
Escola de Engenharia
Departamento de Engenharia Eltrica
Graduao em Engenharia Eltrica
Raissan Chedid
Porto Alegre - RS
2015
Raissan Chedid
Porto Alegre - RS
2015
CIP - Catalogao na Publicao
Chedid, Raissan
Bateria Eletrnica sem Fio / Raissan Chedid. --
2015.
112 f.
Banca examinadora:
Porto Alegre - RS
2015
RESUMO
1 INTRODUO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2 REVISO BIBLIOGRFICA . . . . . . . . . . . . . . . . . . . 16
2.1 A Bateria Acstica . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2 A Bateria Eletrnica . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.1 Histrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3 Musical Intrument Digital Interface (MIDI) . . . . . . . . . . . 21
2.3.1 Transmisso dos dados . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3.1.1 IN, OUT e THRU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3.2 Estrutura dos dados transmitidos . . . . . . . . . . . . . . . . . . 23
2.3.3 Status Bytes e Data Bytes . . . . . . . . . . . . . . . . . . . . . . 25
2.4 O Mdulo XBee ZB Series 2 . . . . . . . . . . . . . . . . . . . . 25
2.4.1 Protocolo ZigBee . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.1.1 Formao da rede ZigBee . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.5 Transdutor Piezoeltrico . . . . . . . . . . . . . . . . . . . . . . . 27
2.5.1 Teoria e Modelagem Eltrica . . . . . . . . . . . . . . . . . . . . . 27
2.6 Waveform Audio File Format (WAVE) . . . . . . . . . . . . . 28
2.6.1 Estrutura do Arquivo WAVE . . . . . . . . . . . . . . . . . . . . 30
3 METODOLOGIA EXPERIMENTAL . . . . . . . . . . . . . . . 33
3.1 Mdulos XBee ZB . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.1 Testes dos XBee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.1.1 Verificao do Modo API . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.1.1.2 Verificao do Modo AT . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.1.2 Definio do Modo de Trabalho dos XBee . . . . . . . . . . . . 37
3.1.3 Coordenador com Baud Rate de 31250 baud . . . . . . . . . . . 38
3.2 Microcontroladores . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.2.1 Arduino Mega 2560 . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.2.1.1 IDE Atmel Studio 6.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2.1.2 Code Wizard AVR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2.1.3 Execuo do udio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2.1.4 USART3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.2.1.5 TIMER1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.2 PIC 18F2550 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.3 Execuo do udio das Peas . . . . . . . . . . . . . . . . . . . . 47
3.3.1 Arquivos WAVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.3.2 Carto SD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.3.2.1 Leitura dos Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.3.3 Gerao do Sinal PWM . . . . . . . . . . . . . . . . . . . . . . . . 54
3.3.4 Filtro para Demodulao do Sinal PWM . . . . . . . . . . . . . 55
3.4 Transdutor Piezoeltrico . . . . . . . . . . . . . . . . . . . . . . . 57
3.4.1 Condicionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.4.2 Plataformas das Peas . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.4.3 Ensaio de Impacto . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.5 Gravao da execuo por MIDI . . . . . . . . . . . . . . . . . . 72
4 RESULTADOS E DISCUSSES . . . . . . . . . . . . . . . . . . 76
4.1 Ensaios do Transdutor Piezoeltrico . . . . . . . . . . . . . . . . 76
4.2 Gravao da Execuo por MIDI . . . . . . . . . . . . . . . . . . 84
4.3 Execuo do udio . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5 CONCLUSES . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
REFERNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
1 INTRODUO
Para este projeto foram implementados trs blocos de tratamento dos transdutores
piezoeltricos, um para cada pea da bateria. No decorrer do trabalho, os blocos de
tratamento dos transdutores piezoeltricos sero referidos tambm como peas da
bateria, logo o projeto possui trs peas para execuo, cada uma com o seu respectivo
som.
Alm das trs peas da bateria, foi implementado um bloco de processamento
central e seu diagrama de blocos pode ser conferido na Figura 2.
Captulo 1. Introduo 14
2 REVISO BIBLIOGRFICA
central que faz o processamento desse sinal, reproduzindo o udio da respectiva pea
percutida.
O mdulo pode tambm possuir uma comunicao com um computador ou com
outros dispositivos musicais a fim de enviar a execuo do baterista para um programa
especfico de gravao, para controle de outro equipamento ou simplesmente para servir
de espelho para outro mdulo de processamento. A comunicao entre dois aparelhos
feita atravs do protocolo MIDI6 , utilizando uma interface fsica e lgica para enviar ou
receber informaes de forma serial.
Na Figura 5 possvel identificar a estrutura padronizada de uma bateria eletrnica
da fabricante Yamaha, onde o nome dado s peas destacadas na figura e sua descrio
seguem:
a) o item 1 chama-se pads dos pratos. Na Figura 5, estes pads so feitos de borracha
e so fixados ao rack;
b) o item 2 o mdulo de processamento. responsvel por todo o processamento
dos sinais alm de se comunicar com outros dispositivos atravs do protocolo
MIDI. Possui tambm botes para configurao, display para interao com o
usurio e sadas de udio;
c) o item 3 chama-se pads dos tambores. Similares aos pads dos pratos;
d) o item 4 chama-se rack. Sustenta os pads, cabos e o mdulo, possuindo conexes
que possibilitam ajustes de altura e posio das barras;
6
Protocolo de interface musical detalhado na Seo 2.3
Captulo 2. Reviso Bibliogrfica 19
e) o item 5 chama-se pedal do chimbal. Pedal que simula o fechamento dos pratos de
chimbal. Pode ser apenas um controle ON-OFF ou pode ser dinmico, possuindo
um potencimetro que varia conforme a pisada, que simula a distncia entre os
dois pratos;
f) o item 6 chama-se pad e pedal de bumbo. Pads um pouco diferente dos outros,
tendo uma borracha mais dura.
7
Disponvel em: <http://www.playtech.com.br/bateria-eletronica-yamaha-dtx-520-k-25051.aspx/p>.
Acesso em set. 2015.
Captulo 2. Reviso Bibliogrfica 20
2.2.1 Histrico
A historia da bateria eletrnica comeou a partir da onda dos sintetizadores musicais
que se iniciou por volta de 1950. Estes sintetizadores, presentes em sua maioria nos teclados
digitais, eram capazes de produzir sons diversos atravs da manipulao de sinais eltricos
analogicamente ou digitalmente. Na dcada de 1970, Graeme Edge, do grupo Moody
Blues, e o professor de eletrnica Brian Groves da Universidade de Sussex desenvolveram
o primeiro prottipo de uma bateria eletrnica. Para gerar os sinais eltricos a serem
sintetizados era utilizado um m permanente que era capaz de se movimentar dentro de
uma bobina interligada ao circuito eletrnico principal. Esta estrutura era anexada na
parte de trs do pad a ser tocado. O sinal gerado era manipulado pelo circuito principal
utilizando centenas de transistores, o que tornava este modelo de projeto invivel para ser
comercializado. (BADNESS, 1991)
circuito eletrnico analgico que modificava os sons atravs de filtros que manipulavam
ondas caractersticas geradas por um gerador de funes. A pea a ser tocada servia
como um gatilho para o gerador de funes, enviando um sinal para este produzir a onda
selecionada, passando pelos filtros escolhidos at chegar nos alto falantes. Aps o seu
lanamento, diversas empresas entraram no mesmo ramo e comearam a produzir seus
prprios modelos, como consequncia muitas inovaes comearam a surgir. O equipamento
pode ser conferido na Figura 6. (BADNESS, 1991)
Em 1978 foi lanado pela empresa britnica Simmons uma bateria eletrnica, de
modelo SDS1, capaz de ter seus sons alterados atravs da troca da EPROM9 contida nela.
Eram oferecidos diferentes sons para serem adquiridos. Abaixo segue um trecho extrado
do manual do fabricante.
"O som produzido pela SDS1 uma gravao digital de uma de bateria
verdadeira armazenada numa EPROM. A EPROM ligada parte
frontal da bateria e pode ser facilmente alterada, permitindo que o som
do tambor seja alterado. A biblioteca de sons est disponvel no seu
revendedor Simmons, incluindo todos os tambores e sons eletrnicos
populares, ou voc pode programar seus prprios sons para uso na SDS1
com o Simmons Sampler e um gravador de EPROM. A SDS1 dinmica,
quanto mais forte voc bate no tambor, mais alto e mais brilhante o som
.". (SIMMONS, 1978)
que recebeu este sinal, possibilitando uma ampla gama de possibilidades e controle de
execuo. (HANSEN, 2005)
com exceo de um tipo especial de mensagem que possui apenas um byte. O conjunto
desses bytes, detalhados na Figura 10, chamado de mensagem MIDI. O Status byte serve
para indicar qual o tipo de informao (nota, intensidade, etc.) que est sendo enviada
e tambm para indicar qual o canal da mensagem. Os Data bytes so responsveis por
carregar os parmetros da informao enviada. (KERR, 2009)
O Status byte sempre possui seu bit mais significativo com valor lgico 1, enquanto
os Data bytes sempre possuem seus bits mais significativos com valor lgico 0. Isso
possibilita ao receptor identificar o tipo de byte recebido. Assim, h apenas sete bits de
dados propriamente ditos, permitindo valores entre 0 e 127. (KERR, 2009)
As mensagens MIDI podem ser enviadas em at 16 canais diferentes, que possibili-
tam uma variedade de informaes da execuo musical, e possuem cinco tipos bsicos:
Channel Voice, Channel Mode, System Commom, System Real-Time e System
Exclusive. O diagrama presente na Figura 11 mostra a estrutura e a classificao das
mensagens transmitidas no protocolo MIDI. (HANSEN, 2005)
1
fL = (2.1)
2RC
um formato sem compresso, ou seja, sem perda de informao. Assim, o WAVE ocupa
um espao muito maior de armazenamento comparado outros formatos de udio, porm
ele garante a fidelizao do sinal de udio amostrado.
O arquivo WAVE foi escolhido para execuo do udio devido sua facilidade na
leitura dos bytes referentes tenso do sinal de udio amostrado, pois no necessrio
realizar uma decodificao dos dados uma vez que cada byte lido corresponde amplitude
do sinal de udio.
ChunkID: campo de 4 bytes que contm as letras RIFF no formato ASCII (0x52
0x49 0x46 0x46 em hexadecimal). Indica que o arquivo est baseado no mtodo
RIFF;
Format: campo de 4 bytes que contm as letras WAVE no formato ASCII (0x57
0x41 0x56 0x45 em hexadecimal), indicando que o formato do arquivo WAVE.
Um arquivo WAVE contm dois sub-blocos que se encontram aps o bloco inicial. O
primeiro sub-bloco chama-se fmt e contm as informaes sobre a amostragem e quantizao
do sinal de udio e informaes pertinentes sobre o udio. O contedo dos campos do
primeiro subchunk encontra-se abaixo. (MICROSOFT, 1994)
Subchunk1ID: campo de 4 bytes que contm as letras fmt no formato ASCII (0x66
0x6D 0x74 0x20 em hexadecimal), indicando o incio do primeiro sub-bloco;
Captulo 2. Reviso Bibliogrfica 31
Posio Tamanho
NomedoCampo
(bytes ) (bytes )
0 ChunkID 4 BlocododescritorRIFF
4 ChunkSize 4 queidentificaoformato
8 Format 4 doarquivocomoWAVE
12 Subchunk1ID 4
16 Subchunk1Size 4 Primeirosubbloco,
20 AudioFormat 2 chamado"fmt",que
22 NumChannels 2 descreveoformatoda
24 SampleRate 4 informaodeudio
28 ByteRate 4 contidanosegundosub
32 BlockAlign 2 bloco
34 BitsPerSample 2
36 Subchunck2ID 4 Segundosubbloco,
40 Subchunck2Size 4 chamado"data",que
44 data Varivel contmoudio
Audio Format: campo de 2 bytes que indica se o udio tem alguma compresso. Se
no existe compresso, ou seja, o udio est modulado por cdigos de pulsos, o valor
deste campo 1;
ByteRate: campo de 4 bits que indica o nmero de bytes necessrios para se ter 1
segundo de udio. calculado com a expresso: (SampleRate BitsP erSample
Channels)/8;
Captulo 2. Reviso Bibliogrfica 32
BlockAlign: campo de 2 bytes que indica o nmero de bytes necessrios para guardar
uma amostra do udio, incluindo todos os canais. calculado com a expresso:
(N umChannels BitsP erSample)/8;
Data: contm os bytes das amostras do udio, o udio propriamente dito. O nmero
de bytes deste campo depende da quantidade de amostras do udio.
Por fim, vale mencionar que as amostras em um arquivo de udio WAVE PCM
multi-canal so intercaladas. Assim, em um arquivo de udio estreo (2 canais), uma
amostra referente ao canal esquerdo ser seguida de uma amostra referente ao canal direito,
que por sua vez seguida de outra amostra do canal esquerdo, assim sucessivamente.
33
3 METODOLOGIA EXPERIMENTAL
A primeira parte desenvolvida neste projeto foi a comunicao sem fio atravs dos
mdulos XBee dos blocos dos sensores com o mdulo XBee do bloco de processamento. A
comunicao sem fio foi implementada antes pois a nica que no depende das outras
funcionalidades. Na sequncia, foi desenvolvido o condicionador para o sensor piezoeltrico
para poder ser realizada a aquisio e o envio dos sinais do impacto realizado pelo usurio
na pea da bateria, a partir de plataformas de madeira que simulam a estrutura de uma
pea de bateria. Nesta etapa tambm foi desenvolvida a rotina para o pr-processamento
do sinal proveniente do piezoeltrico.
Aps terminada a implementao dos blocos dos sensores, a ateno foi direcionada
para o desenvolvimento do bloco de processamento central. Foi ento realizado o envio
do sinal MIDI para o computador e a gravao de uma execuo nas peas da bateria.
Posteriormente, implementou-se a leitura e execuo dos udios armazenados em um
carto SD. Todas as etapas do projeto esto detalhadas neste captulo.
trolador externo, porm o uso deste microcontrolador se tornou a melhor opo para o
projeto, como ser mostrado no decorrer desta seo.
As configuraes iniciais definidas para teste dos XBees foram feitas atravs do
software XCTU, como seguem:
Coordenador:
Roteadores:
No modo API o XBee possui trs funes interessantes. Uma delas a amostragem
peridica das entradas e sadas (Periodic IO Sampling), a outra a amostragem das
entradas e sadas a partir de uma identificao de mudana de estado de algum pino
(Change Detection Sampling) e a ltima a amostragem das entradas e sadas a partir
de um pedido do coordenador (Queried Sampling). Ambas funes incluem a leitura das
entradas dos conversores analgico-digitais.
Os testes no modo API foram feitos com o auxlio do software gratuito XCTU.
Captulo 3. Metodologia Experimental 35
Periodic IO Sampling:
A amostragem peridica consiste em um mdulo XBee tirar uma amostra das
entradas e sadas, digitais e analgicas, uma taxa peridica e transmitir essas amostras
um dispositivo remoto. Apenas os dispositivos que esto no modo API podem realizar
esta amostragem. Dispositivos configurados no modo AT iro descartar as amostras de
dados recebidas.
Foi realizado o teste de envio da amostragem de um pino analgico de um XBee do
bloco da pea para o XBee coordenador do bloco de processamento. O perodo de envio
entre as informaes foi de 50 milissegundos. O pacote enviado a cada amostragem possua
22 bytes, no formato frame caracterstico do modo API. No pacote iam informaes como o
endereo do XBee que estava enviando, delimitadores de incio e fim, quais pinos estavam
sendo monitorados, entre outros. Somente um byte do pacote era a informao de tenso
eltrica convertida. No teste, foram enviados 53 frames (totalizando 1166 bytes em um
perodo de 2650 milissegundos) ao coordenador e a quantidade de frames recebidos foi
de 45, demonstrando grande perda de informao em um curto perodo de tempo. Outra
limitao o perodo mnimo de amostragem de 50 milissegundos. Para o projeto em
questo esta funo no se torna adequada pois o equipamento apresentar uma latncia
muito grande entre o impacto do usurio e a gerao do som respectivo pea, e esta
latncia ser perceptvel ao usurio.
Change Detection Sampling:
Os mdulos podem ser configurados para transmitir uma amostra de dados sempre
que um pino digital sendo monitorado muda de estado. O datasheet do XBee no diz se
feita uma amostragem das entradas analgicas tambm, ento foi realizado um teste para
constatar se enviado ou no as amostras dos pinos analgicos.
Com o XBee configurado para adquirir um valor de um pino analgico e monitorar
o estado de um pino digital, verificou-se que ao realizar a mudana de estado do pino
digital o coordenador recebia somente os valores das entradas digitais, sendo este mtodo
invivel para o projeto.
Queried Sampling:
Esta funo possibilita ao coordenador solicitar uma amostra do valor das entradas
e sadas do XBee.
No software XCTU foi criado um frame API contendo o comando necessrio para
solicitar ao roteador a amostragem do valor dos pinos. Ao enviar o frame pelo coordenador,
obteve-se tempos variados de resposta da amostragem pelo roteador. O tempo de resposta
variou conforme a distncia entre os mdulos, quanto mais longe estava um mdulo do
outro, mais tempo demorava para o coordenador receber a informao. O tempo mnimo
obtido no recebimento do frame foi de 37,324 milissegundos, medido no prprio programa
Captulo 3. Metodologia Experimental 36
XCTU. Para obter o valor do atraso da informao, foi feita a diferena entre o tempo
de envio do frame pelo coordenador e o tempo de recebimento do frame que continha a
amostragem do roteador. Isso foi possvel pois o software XCTU informa o horrio em
que foi enviado alguma informao e o tempo que foi recebida alguma informao. Esta
implementao foi descartada tambm por apresentar um atraso maior do que o desejado
no projeto.
3.2 Microcontroladores
Foram utilizados microcontroladores em todos os blocos. Nos blocos das peas
utilizado um PIC18F2550 que realiza, atravs de um mdulo de converso analgico-digital
interno, a converso do valor de tenso obtido na sada do condicionamento do piezoeltrico
para um valor digital. O microcontrolador tambm realiza um pr-processamento do sinal
adquirido e se comunica serialmente com o XBee roteador. J para o bloco de processamento
central, foi utilizado um o kit de desenvolvimento Arduino Mega 2560, no qual possui o
microcontrolador ATmega 2560. Este microcontrolador responsvel pela comunicao
com o XBee coordenador, pelo processamento dos dados recebidos dos blocos das peas,
pela comunicao com o computador via protocolo MIDI, pela leitura dos sons no formato
WAVE armazenados no carto SD e pela execuo do udio de cada pea atravs de PWM.
Para ajudar no desenvolvimento do cdigo foi utilizada uma ferramenta que realiza
gerao automtica das rotinas de inicializao do processador e de configurao dos
registradores de perifricos (SFR) que o software Code Wizard AVR. Este software
uma IDE especfica para o desenvolvimento de microcontroladores de 8 bits da Atmel e
possui um gerador de cdigos automtico para a famlia de microcontroladores AVR e
XMEGA. Atravs da interface grfica do software, define-se a configurao desejada para
o perifrico e a ferramenta gera o cdigo de inicializao. Embora esta funcionalidade
faa parte de uma IDE e um compilador especfico, pode ser utilizada independentemente.
A ferramenta tambm instala um plug-in na IDE Atmel Studio que permite o download
do firmware gerado em placas Arduino, facilitando assim seu uso. No decorrer de todo o
projeto, foi utilizada uma verso de avaliao gratuita disponibilizada no endereo virtual
do fabricante.
Uma breve descrio dos mdulos utilizados para a execuo do udio encontra-se
nesta seo. Para uma descrio detalhada sobre todo o processo necessrio para executar
o udio consulte a Seo 3.3.
Para realizar a execuo de um arquivo de udio WAVE gravado em um carto SD
foram utilizados os seguintes perifricos:
TIMER2: Foi utilizado para gerar o sinal PWM referente ao udio lido do carto
SD. A frequncia do PWM foi definida como sendo 62,5kHz.;
SPI: Este mdulo foi utilizado para se comunicar com o carto SD a fim de ler o
arquivo WAVE contido no carto.
3.2.1.4 USART3
f osc
BAU DRAT E = (3.1)
16(U BRRn + 1)
f osc
U BRR = 1 (3.2)
16BAU D
O baud rate da USART foi definido como 31250 baud, necessrio para a comunicao
em MIDI. Como a frequncia de oscilao f osc do sistema 16 MHz, utilizando a
Equao (3.2) obtm-se o valor decimal 31 que deve ser carregado no registrador UBRR,
apresentando 0% de erro. Utilizando o valor 31 para UBRR na Equao (3.1) obtm-
se exatamente 31250 baud. O XBee que se comunica com o ATmega2560 tambm foi
configurado com 31250 baud, conforme Subseo 3.1.3.
Os dados so enviados atravs de frames conforme Figura 18, definidos com um
start bit, seguidos de 8 bits de dados e por ltimo um stop bit. O start bit (St) e o stop
1
Usart Baud Rate Register
Captulo 3. Metodologia Experimental 42
bit (Sp1) servem para sincronizar o dispositivo que receber a informao, indicando
o incio e o fim do frame, respectivamente. O start bit definido como padro sempre
com nvel lgico 0, sendo o contrrio do stop bit. Os dados so enviados do bit menos
significativo para o bit mais significativo. Se nenhuma transmisso est acontecendo, a
linha de comunicao fica inativa (IDLE) com nvel lgico 1.
A parte transmissora possui um nico buffer para escrita permitindo uma transfe-
rncia contnua de dados sem nenhum atraso entre os frames. Uma vez configurada como
desejado, uma transmisso de dados ocorre quando algum dado carregado no buffer de
transmisso a partir da escrita no registrador UDR e quando o Shift Register est pronto
para enviar um frame. O Shift Register carregado com novos dados imediatamente depois
do ltimo stop bit do frame anterior. Foi utilizado a interrupo de transmisso completa
(Transmit Complete Interrupt) para tratar o envio dos dados.
J a parte de recepo dos dados a parte mais complexa do mdulo USART do
ATmega 2560 devido s suas unidades de recuperao do clock e recuperao dos dados,
Captulo 3. Metodologia Experimental 43
que servem para receber dados de uma comunicao assncrona. A recepo possui um
buffer de dois nveis FIFO2 , o qual compartilha o mesmo endereo de memria (registrador
UDRn) do buffer de transmisso. O receptor inicia a recepo dos dados quando detecta
um start bit vlido. Os bits de dados seguintes so amostrados na taxa do baud rate e
deslocados para o buffer de recepo. Para tratar a recepo de dados foi utilizado a
interrupo de recepo completa (Receive Complete Interrupt).
O fluxograma de execuo das tarefas do mdulo USART3 est apresentado na
Figura 19.
2
First In First Out
Captulo 3. Metodologia Experimental 44
3.2.1.5 TIMER1
Para realizar uma leitura ou escrita no contador de 16 bits com apenas um ciclo de
clock atravs do barramento de dados de 8 bits, o registrador TNCT1H s pode ser acessado
indiretamente pela unidade central de processamento (CPU). Quando necessrio um
acesso TCNT1H, a CPU acessa um registrador temporrio para o byte mais significativo
Captulo 3. Metodologia Experimental 45
de udio gratuitos para utilizao. A fim de simular o som de uma bateria acstica, foram
adquiridos udios para o bumbo, a caixa e o prato de ataque.
Como as faixas adquiridas eram estreo (2 canais), foi preciso transformar a faixa
para mono (1 canal) atravs de um software de edio de udio. Utilizou-se o software
Audacity, que um programa gratuito que permite editar, gravar, importar e exportar
diversos formatos diferentes de arquivos de udio5 .
Aps transformar a faixa para mono, foi preciso alterar a sua taxa de amostragem.
Inicialmente, a taxa do arquivo era de 44,1kHz. Como o prottipo foi projetado para
executar somente udios com taxa de amostragem de 16kHz, foi preciso realizar uma
converso da taxa de amostragem atravs do software Audacity. Depois das alteraes
feitas nos udios os arquivos ficaram com tamanho e durao como indicado abaixo.
5
Disponvel para download em <http://audacityteam.org/download/>. Acesso em nov. 2015.
6
Disponvel para download em <http://www.hhdsoftware.com/free-hex-editor>. Acesso em nov. 2015.
Captulo 3. Metodologia Experimental 49
Figura 22: Arquivo de udio aberto no software Free Hex Editor Neo.
3.3.2 Carto SD
O carto SD7 um carto de memria que armazena dados em uma memria flash.
O padro SD foi desenvolvido pela SD Association8 no ano 2000 e o nome SD foi dado
pois o dispositivo oferece capacidade de criptografia e gesto de direitos autorais. O carto
SD trabalha com tenses de 2,7V 3,6V e possui dois modos de comunicao, o modo SD
e o modo SPI. (SANDISK, 2003)
O ATmega2560 foi programado para utilizar o modo SPI para se comunicar com
o carto SD. Para realizar a interface entre o ATmega2560 e o carto SD foi utilizado
um mdulo para cartes SD adquirido no site de compras internacional eBay 9 . O mdulo
pode ser conferido na Figura 24.
de uma biblioteca prpria para acesso aos arquivos e inicializao do carto SD, porm
esse processo se tornou invivel a ser realizado dentro do prazo previsto para a entrega
deste projeto de diplomao. Aps discusso deste empecilho com o professor orientador,
chegou-se a concluso de passar a utilizar as bibliotecas do Arduino para acesso ao carto
SD. Por consequncia, devido dependncia que a biblioteca SD possui com a biblioteca
para comunicao SPI do Arduino, esta ltima tambm foi utilizada.
At ento, estava sendo utilizada a IDE Atmel Studio 6.2 para o desenvolvimento do
projeto, sendo preciso a migrao para a IDE Arduino. Pequenas modificaes precisaram
ser realizadas, no comprometendo o projeto desenvolvido at ento. As modificaes
realizadas encontram-se abaixo.
A ltima alterao necessria foi a troca do source main.c, que continha a funo
Captulo 3. Metodologia Experimental 52
6, 42.1013
G(s) = 3 (3.3)
s + 50465, 3s2 + 3, 09.109 s + 6, 42.1013
11
Disponvel em: <http://sim.okawa-denshi.jp/en/Sallenkey3Lowkeisan.htm>. Acesso em nov. 2015.
Captulo 3. Metodologia Experimental 56
3.4.1 Condicionamento
Como j foi discutido, a sada do sensor piezoeltrico em carga eltrica. Dessa
forma, preciso aplicar um condicionamento adequado, pois a medida realizada em
tenso eltrica. Utilizou-se para isso um amplificador de carga. A Figura 31 mostra o
circuito projetado para o condicionador.
Como a sada do condicionador ir oscilar entre valores positivos e negativos, foi
adicionado um circuito de terra virtual como mostrado na Figura 32.
A funo de transferncia resultante para o circuito condicionador dada pela
Equao (3.4). A capacitncia do sensor definida como 27nF a partir das medies obtidas
com o medidor RLC est sendo considerada na modelagem.
1
s.
Vc
= !Ri .Cc (3.4)
Vp 1 1
+s +s
Ri .Cp Rc .Cc
Captulo 3. Metodologia Experimental 59
1
fL = (3.5)
2Rc .Cc
1
fH = (3.6)
2Ri .Cp
Vc 661, 37s
= 2 (3.7)
Vp s + 678, 21s + 11134, 27
Captulo 3. Metodologia Experimental 61
Vi 1
= (3.8)
Vo 1 + s(R1.C1 + R1.C2 + R2.C2) + s2 (R1.C1.R2.C2)
Vi 1
= (3.9)
Vo 1 + 2, 11.10 s + 4, 97.109 s2
4
Vc 661, 37s
= (3.10)
Vp 4, 97.109 s4 + 2, 11.104 s3 + 1, 143s2 + 680, 6s + 1113
3, 3 0 3, 3
Resoluo = 8
= = 12, 89mV (3.11)
2 256
Captulo 3. Metodologia Experimental 64
O quarto e ltimo estgio de confeco das plataformas foi a fixao dos transdutores
em suas respectivas plataformas, conforme Figura 41. Os transdutores foram cimentados
Captulo 3. Metodologia Experimental 67
com solda plstica (conhecida como Poxipol) uma distncia de 17 centmetros do centro
do quarto de crculo, sendo esta distncia escolhida pois est mais prxima da regio que
comumente so realizados os impactos.
corte de 2,67Hz e um filtro passa baixa na frequncia de corte de 105,26Hz, ambos do tipo
Butterworth de ordem 1, que possuem a resposta em frequncia mais similar resposta
em frequncia do amplificador de carga. Os filtros podem ser conferidos na rotina da
Figura 46.
Os ensaios realizado foram feitos com apenas um impacto na plataforma e tambm
Captulo 3. Metodologia Experimental 71
com uma srie de impactos com frequncia de 16Hz, o que no contexto musical seria
a execuo de um compasso musical divido em fusas com um tempo de 120 impactos
por minuto. Isso considerado uma velocidade rpida para execuo, no sendo todos
bateristas que conseguem execut-la.
Os valores obtidos pelo microcontrolador foram manipulados no software LabVIEW
2015 juntamente com os valores dos acelermetros. A rotina para plotagem dos grficos e
implementao dos filtros digitais encontra-se na Figura 46.
Figura 46: Rotina de LabVIEW para a plotagem dos sinais do acelermetro e do piezoel-
trico.
Captulo 3. Metodologia Experimental 72
O conversor MIDI para USB do tipo plug and play, ou seja, o dispositivo
reconhecido e configurado automaticamente pelo sistema operacional, que no caso foi
utilizado o Windows 10 onde j possui um driver para o conversor.
Uma vez instalado o conversor MIDI para USB, necessrio um software para
adquirir os sinais provenientes da bateria. Para isso, utilizou-se a estao de trabalho de
udio digital (DAW13 ) Nuendo, da fabricante Steinberg, que possibilita a gravao, edio
e execuo de udios digitais.
12
Pode ser acessado em <http://www.ebay.com/>
13
Abreviao do ingls Digital Audio Workstation
Captulo 3. Metodologia Experimental 73
Para ter acesso aos sinais provenientes do conversor com maior qualidade e menor
latncia, foi utilizado um driver ASIO instalado no computador. A latncia mencionada
se refere ao atraso entre o envio de uma informao de udio por um aplicativo e este
ser reproduzido pela placa de som, ou sinais de entrada do dispositivo de udio estarem
disponveis para o aplicativo de udio.
A sigla ASIO significa Audio Stream Input/Output e se refere um protocolo
de especificaes para drivers de placas de som de computadores. O protocolo ASIO
foi desenvolvido pela fabricante Steinberg e possibilita o acesso direto ao hardware de
som, externo ou interno. O driver ASIO utilizado foi o ASIO4ALL14 , que gratuito e foi
desenvolvido para ser compatvel com qualquer dispositivo de udio no sendo preciso um
driver proprietrio. Por esta razo, o ASIO4ALL um driver ASIO universal.
Os drivers ASIO ignoram o caminho normal do udio entre um hardware e um
programa de gravao atravs de camadas de software intermedirias do sistema operacional
do Windows, assim um aplicativo se conecta diretamente placa ou dispositivo de som. A
funo de um driver ASIO pode ser confirmada quando se utiliza uma DAW configurada
com um driver ASIO para acesso placa de som interna do computador. Quando a DAW
estiver em funcionamento, o sistema de som padro do Windows no ir funcionar pois
o DAW estar com acesso direto placa de som. Neste caso, se utilizarmos ao mesmo
tempo um aplicativo que utilize o sistema de som padro do Windows, como por exemplo
o Windows Media Player, no obteremos sucesso pois a placa de som est disponvel
exclusivamente para a DAW. Na Figura 48 possvel identificar a interface MIDI para
USB configurada como entrada do sistema de udio e a placa de som do computador sendo
acessada diretamente pelo driver ASIO4ALL.
Para o envio das mensagens MIDI do bloco de processamento central para o
computador, foi utilizado o mdulo USART0 do ATmega2560 no qual est descrito na
Subseo 3.2.1.4. As mensagens MIDI utilizadas esto descritas na Tabela 3. Como existem
trs peas na bateria eletrnica, foi utilizado um valor de nota MIDI para cada pea no
Data Byte 1, sendo 0b00100100 (36 em decimal) a nota respectiva ao bumbo, 0b00101000
(40 em decimal) a nota respectiva caixa e 0b00101110 (46 em decimal) a nota respectiva
ao chimbau. O valor do Data Byte 2 referente ao valor da intensidade do impacto
realizado pelo usurio, sendo este valor a intensidade adquirida do sensor piezoeltrico.
Para poder escutar a gravao realizada pelo usurio com sons simulados de uma
bateria acstica, foi utilizado um instrumento virtual utilizando a tecnologia VST. A
tecnologia de estdio virtual VST15 uma interface desenvolvida pela fabricante Steinberg
em 1996 que integra sintetizadores e efeitos de udio com editores e dispositivos de
gravao de som. O VST utiliza processamento de sinal para simular o hardware desejado
14
Disponvel em <http://www.asio4all.com/>
15
Abreviao do ingls Virtual Studio Technology
Captulo 3. Metodologia Experimental 74
Figura 48: Configurao da interface MIDI para USB e acesso placa de som do compu-
tador pelo ASIO4ALL.
Nota 3: Os bits vvvvvvv do Data Byte 2 se referem intensidade da nota do Data Byte 1.
identificar que para o valor 36 recebido via MIDI a nota configurada C1 (bumbo), para
o valor 40 a nota configurada D1 (caixa) e para o valor 46 a nota configurada A#1
(chimbau).
4 RESULTADOS E DISCUSSES
Figura 60: Sinal obtido do acelermetro e do piezoeltrico para vrios impactos superpos-
tos.
Figura 61: FFT do sinal obtido do acelermetro e do piezoeltrico para vrios impactos
superpostos.
Figura 64: Interface do Nuendo quando ocorria a gravao da execuo das notas.
A segunda anlise foi realizada com sinais PWM de duty cycle constantes. Os valores
para o duty cycle utilizados foram 1%, 50% e 99%. A Figura 67 apresenta o resultado
do filtro com duty cycle de 1%, a tenso DC da sada do filtro medida no osciloscpio
174,4mV e a tenso de pico do PWM foi de 5,132V. J a Figura 68 apresenta sada do
filtro com 2,640V e por fim a Figura 69 apresenta sada do filtro de 5,116V.
A terceira e ltima anlise foi realizada com um dos udios gravados no carto SD.
O arquivo escolhido para reproduo foi o bass16k.wav pois o udio de menor durao,
facilitando a anlise. Na Figura 70 possvel visualizar o sinal sendo gerado atravs do
PWM e a sada do filtro de demodulao. Ao analisar o sinal demodulado do udio e
compar-lo ao sinal de udio aberto no software Audacity na Figura 71, possvel perceber
que as formas de onda so bastante similares, comprovando a fidelidade na execuo do
udio gerado pelo PWM do ATmega2560 e demodulado pelo filtro projetado. Alm disso,
sabendo que o udio executado possui durao de 85ms atravs do software Audacity,
percebe-se que o sinal demodulado possui a mesma durao do udio, visto que o sinal
termina em 8,5 divises de 10ms cada no osciloscpio.
Captulo 4. Resultados e Discusses 87
Figura 67: Sada PWM do ATmega2560 com duty cycle de 1% e sada do filtro de demo-
dulao com tenso de 174,4mV.
Figura 68: Sada PWM do ATmega2560 com duty cycle de 50% e sada do filtro de
demodulao com tenso de 2,640V.
Figura 69: Sada PWM do ATmega2560 com duty cycle de 99% e sada do filtro de
demodulao com tenso de 5,116V.
Figura 70: Sada PWM da execuo do udio bass16k.wav armazenado no carto SD.
5 CONCLUSES
REFERNCIAS
MICROSOFT. New Multimedia Data Types and Data Techniques. Revision 3.0. [S.l.],
1994. Disponvel em: <http://www-mmsp.ece.mcgill.ca/documents/audioformats/wave/
Docs/RIFFNEW.pdf>. Acesso em: 25 out. 2015. Citado 3 vezes nas pginas 28, 30 e 32.
SANDISK. SanDisk Secure Digital Card Product Manual. 1.9. ed. Sunnyvale, CA, 2003.
Disponvel em: <http://www.circlemud.org/jelson/sdcard/SDCardStandardv1.9.pdf>.
Acesso em: 12 out. 2015. Citado na pgina 50.
Arquivo timer1.c:
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* Modulo do Timer 1 */
3 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
4 // Modulo responsavel por realizar um temporizacao de 1 ms onde ,
5 // na rotina de interrupcao , sao executadas diversas funcoes
6
36
40 // Rotina de interrupcao
41 ISR ( TIMER1_OVF_vect ) {
42
43 GLOBAL_INTERRUPT_DISABLE ;
44
59 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
60 /* Rotinas para verificar se algum PAD foi tocado */
61 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
62 // Se algum PAD foi tocado , realiza uma temporizacao que e
63 // utilizada para o LCD e para o envio MIDI
64
65 if ( READ_FLAG ( PAD1_ON ) )
66 {
67 pad1_counter ++;
68 if ( pad1_counter == T IM E O UT _ P AD _ C OU N T ER )
69 {
70 pad1_counter = 0;
71 CLEAR_FLAG ( PAD1_ON ) ;
72 lcd_pad_state (1 , OFF ) ; // Para indicar no
LCD que o PAD esta desligado
73 }
74 }
APNDICE B. Cdigos do Mdulos do ATmega2560 98
75 if ( READ_FLAG ( PAD2_ON ) )
76 {
77 pad2_counter ++;
78 if ( pad2_counter == T IM E O UT _ P AD _ C OU N T ER )
79 {
80 pad2_counter = 0;
81 CLEAR_FLAG ( PAD2_ON ) ;
82 lcd_pad_state (2 , OFF ) ;
83 }
84 }
85 if ( READ_FLAG ( PAD3_ON ) )
86 {
87 pad3_counter ++;
88 if ( pad3_counter == T IM E O UT _ P AD _ C OU N T ER )
89 {
90 pad3_counter = 0;
91 CLEAR_FLAG ( PAD3_ON ) ;
92 lcd_pad_state (3 , OFF ) ;
93 }
94 }
95
96 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
97 /* Rotinas periodicas dos modulos */
98 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
99 lcd_periodic () ; // Para controle dos dados do LCD
100
101 GLOBAL_INTERRUPT_ENABLE ;
102 }
Arquivo timer1.h:
1 # ifndef __TIMER1_H_
2 # define __TIMER1_H_
3
4 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5 /* Variaveis globais */
6 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
7 unsigned char flags_global ;
8
9 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
10 /* Prototipos das funcoes publicas do modulo */
11 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
12 void TIMER1_init ( void ) ;
APNDICE B. Cdigos do Mdulos do ATmega2560 99
13
14 # endif
APNDICE B. Cdigos do Mdulos do ATmega2560 100
Arquivo timer2.c:
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* Modulo do Timer 2 */
3 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
4
Arquivo timer2.h:
1 # ifndef __TIMER2_H_
2 # define __TIMER2_H_
3
4 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5 /* Prototipos das funcoes publicas do modulo */
6 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
7 void TIMER2_init ( void ) ;
8
9 # endif
APNDICE B. Cdigos do Mdulos do ATmega2560 102
Arquivo timer3.c:
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* Modulo do Timer 3 */
3 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
4
24 // Rotina de interrupcao
25 ISR ( TIMER3_OVF_vect ) {
26 GLOBAL_INTERRUPT_DISABLE ;
27
Arquivo timer3.h:
1 # ifndef __TIMER3_H_
2 # define __TIMER3_H_
3
4 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5 /* Prototipos das funcoes publicas do modulo */
6 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
7 void TIMER3_init ( void ) ;
8
9 # endif
APNDICE B. Cdigos do Mdulos do ATmega2560 104
Arquivo usart3.c:
1
2 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
3 /* Modulo da USART3 */
4 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
5 // Este modulo serve tanto para receber dados dos XBee s quanto
para
6 // enviar dados via MIDI para o computador
7
22
36
46 // Inicializacao do modulo
47 void USART3_init ( void ) {
48
49 // USART3 initialization
50 // Communication Parameters : 8 Data , 1 Stop , No Parity
51 // USART3 Receiver : On
52 // USART3 Transmitter : On
53 // USART3 Mode : Asynchronous
54 // USART3 Baud Rate : 31250
55 UCSR3B = (1 < < TXCIE3 ) | (1 < < TXEN3 ) | (1 < < RXEN3 ) | (1 < <
RXCIE3 ) ;
56 UCSR3C = (1 < < UCSZ31 ) | (1 < < UCSZ30 ) ;
57 UBRR3H =0 x00 ;
58 UBRR3L =0 x1F ; // 31 decimal p / baud 31250
59
63 GLOBAL_INTERRUPT_DISABLE ;
64
74 GLOBAL_INTERRUPT_ENABLE ;
75 return ;
76 }
APNDICE B. Cdigos do Mdulos do ATmega2560 106
77
81 GLOBAL_INTERRUPT_DISABLE ;
82
86 GLOBAL_INTERRUPT_DISABLE ;
87 return ;
88 }
89
90 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
91 /* Rotina para enviar uma mensagem MIDI */
92 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
93 void USART3_send_MIDI ( unsigned char status , unsigned char note ,
unsigned char velocity ) {
94 USART3_put_char ( status ) ;
95 USART3_put_char ( note ) ;
96 USART3_put_char ( velocity ) ;
97 USART3_start_tx () ;
98 }
APNDICE B. Cdigos do Mdulos do ATmega2560 107
Arquivo usart3.h:
1
2 # ifndef __USART3_H_
3 # define __USART3_H_
4
5 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
6 /* Prototipos das funcoes publicas do modulo */
7 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
8 void USART3_init ( void ) ;
9 void U S A R T 3 _ c l e a r _ b u f f e r _t x ( void ) ;
10 void USART3_start_tx ( void ) ;
11 void USART3_put_char ( char x ) ;
12 void USART3_send_MIDI ( unsigned char status , unsigned char note ,
unsigned char velocity ) ;
13
14 # endif
APNDICE B. Cdigos do Mdulos do ATmega2560 108
Arquivo WiDrum.ino:
1 # include < SPI .h >
2 # include < SD .h >
3
4 File myFile ;
5
13 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
14 /* Macros para uso na funcao loop */
15 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 # define ID_PAD 0 xD0 // Byte para identificar se o dado
recebido eh de um sensor
17 # define PAD1 ID_PAD +1 // ID do PAD 1
18 # define PAD2 ID_PAD +2 // ID do PAD 2
19 # define PAD3 ID_PAD +3 // ID do PAD 3
20
21 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
22 /* Macros para comunicacao MIDI */
23 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24 // Status Bytes
25 # define NOTE_ON 144
26 # define NOTE_OFF 128
27
28 // Data Bytes
29 # define BASSDRUM 36
30 # define SNARE 40
31 # define HIHAT 46
32 # define RIDE 51
33 # define CRASH 49
34 # define TOM1 47
35 # define TOM2 45
36 # define TOM3 43
37
41 void setup () {
42
43 if (! SD . begin (53) ) {
44 return ;
45 }
46
56 void loop () {
57
58
59 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
60 /* Rotina para verificar e tratar dado recebido pela serial */
61 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
62
63 if ( READ_FLAG ( SERIAL_RX ) ) {
64 CLEAR_FLAG ( SERIAL_RX ) ;
65
75 case 2:
76 USART3_send_MIDI ( NOTE_ON ,
SNARE , dataRX ) ;
77 SET_FLAG ( PAD2_ON ) ;
78 break ;
79
APNDICE B. Cdigos do Mdulos do ATmega2560 110
80 case 3:
81 USART3_send_MIDI ( NOTE_ON ,
HIHAT , dataRX ) ;
82 SET_FLAG ( PAD3_ON ) ;
83 break ;
84 }
85 flagSensorOK = 0;
86 }
87 }
88 }
Arquivo main.h:
1 # ifndef __MAIN_H
2 # define __MAIN_H_
3
8 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
9 /* Variaveis globais */
10 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
11 extern volatile unsigned char dataRX ; // Guarda o valor recebido
pela serial
12 extern volatile unsigned char flags_global ; // Guarda as flags
13 extern volatile uint16_t sample ;
14
15 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
16 /* Bits ( flags ) da variavel " flags_global " */
17 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
18 // Utilizados para " comunicacao " entre ISR e laco principal .
19
28 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
29 /* Macros para facilitar a leitura e controle das flags */
30 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
31 # define SET_FLAG ( BYTE ) flags_global |= BYTE
32 # define CLEAR_FLAG ( BYTE ) flags_global &= ~( BYTE )
33 # define READ_FLAG ( BYTE ) (( flags_global & BYTE ) == BYTE ) ? (1) :
(0)
34 # define OFF 0
35 # define ON 1
36
37 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
38 /* Macros para habilitar e desabilitar interrupcoes */
39 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
40
41 # define G L O B A L _ I N T E R R U P T _ E N A B L E sei ()
42 # define G L O B A L _ I N T E R R U P T _ D I S A B L E cli ()
43
44 # endif