• Nenhum resultado encontrado

3.2 Processamento de ´ audio em tempo real em Arduino

3.2.1 Elementos do microcontrolador

Para saber como configurar o dispositivo para o processamento de ´audio em tempo real, ´e necess´ario um entendimento geral do funcionamento interno do microcontrolador. Um microcon- trolador da s´erie Atmel megaAVR ´e composto de diversos elementos, alguns fundamentais para nossa investiga¸c˜ao, que ser˜ao cobertos brevemente nesta se¸c˜ao.

CPU, Registros e interrup¸c˜oes

A CPU do microcontrolador possui uma unidade de l´ogica aritm´etica que disp˜oe de centenas de registros: por¸c˜oes de mem´oria que armazenam dados utilizados na computa¸c˜ao e determinam o fluxo de execu¸c˜ao do programa. No caso do ATmega328P, 32 destes registros podem ser usa- dos para computa¸c˜ao de prop´osito geral, enquanto que os outros s˜ao reservados e desempenham fun¸c˜oes espec´ıficas. Al´em disso, neste modelo n˜ao h´a representa¸c˜ao de n´umeros com ponto flutuante em hardware, de forma que somente opera¸c˜oes sobre inteiros e valores fracion´arios de ponto fixo s˜ao executadas rapidamente, enquanto que opera¸c˜oes mais complexas tˆem que ser emuladas via software.

Uma interrup¸c˜ao ´e uma tentativa de desvio do fluxo corrente de execu¸c˜ao atrav´es da altera¸c˜ao de determinados valores em registros espec´ıficos. Para os prop´ositos deste trabalho, as interrup¸c˜oes s˜ao de extremo valor pois s˜ao elas as estruturas de baixo n´ıvel que permitem que um certo c´odigo seja executado com uma frequˆencia fixa (ao menos se supusermos que a frequˆencia do rel´ogio ´e realmente constante em rela¸c˜ao ao tempo real). Este funcionamento ser´a visto com detalhes mais adiante.

Rel´ogios e pr´e-escalonadores

Diversos rel´ogios provˆem frequˆencias de opera¸c˜ao para as diferentes partes do microcontrolador. S˜ao basicamente emissores ou divisores de sinais de onda quadrada que determinam a frequˆencia de opera¸c˜ao da CPU, do sistema ADC, do acesso `as mem´orias e de outros componentes do micro- controlador. Poss´ıveis fontes de frequˆencia para rel´ogios s˜ao osciladores RC (resistor/capacitor) e de cristal.

Um conceito ´util associado aos rel´ogios ´e o de um pr´e-escalonador. Pr´e-escalonadores s˜ao divi- sores da frequˆencia dos rel´ogios que, ou diminuem de fato a frequˆencia de um determinado rel´ogio, ou ao menos permitem a opera¸c˜ao de alguns componentes em frequˆencias que s˜ao uma fra¸c˜ao da frequˆencia de certos rel´ogios.

O rel´ogio do sistema (system clock) provˆe a frequˆencia base de opera¸c˜ao do sistema. Outros rel´ogios importantes s˜ao o rel´ogio de Entrada/Sa´ıda (I/O clock), o rel´ogio ADC (ADC clock), e os rel´ogios de contadores, todos estes usados para estabelecer a frequˆencia de opera¸c˜ao da maioria dos mecanismos de entrada e sa´ıda. ´E poss´ıvel escolher quais rel´ogios devem estabelecer a frequˆencia de opera¸c˜ao de diferentes partes do sistema, assim como selecionar valores de pr´e-escalonador de forma independente. Neste estudo, foi feito uso do pr´e-escalonador dos rel´ogios associados aos contadores para controlar a frequˆencia PWM utilizada como base para o mecanismo DSP, como ser´a visto na Se¸c˜ao 3.2.3.

Temporizadores ou contadores

Um temporizador, tamb´em chamado de contador, ´e um registro cujo valor ´e automaticamente incrementado de acordo com algum rel´ogio e um valor de pr´e-escalonador. Um certo contador tem um tamanho fixo em bits e pode ter v´arias interrup¸c˜oes associadas a seu comportamento. Quando um contador atinge seu valor m´aximo, envia uma interrup¸c˜ao de overflow (transbordamento), que pode ser configurada para causar a execu¸c˜ao de uma fun¸c˜ao, e volta a contar a partir do zero.

Contadores s˜ao importantes no contexto de processamento de sinais em tempo real no Arduino pois provˆem uma forma natural de executar v´arias das tarefas necess´arias na sequˆencia do pro- cessamento digital de sinais. Exemplos destas tarefas s˜ao o lan¸camento peri´odico de uma fun¸c˜ao para amostragem do sinal de entrada (que enche um buffer de entrada) e a emiss˜ao de uma forma de onda PWM (que ser´a abordada com mais detalhes na Se¸c˜ao 3.2.3) que, ap´os uma etapa de filtragem anal´ogica, permite convers˜ao do sinal digital para anal´ogico. O microcontrolador AT- mega328P possui dois contadores de 8 bits e um contador de 16 bits. Cada um deles possui um conjunto diferente de funcionalidades mas todos s˜ao capazes de realizar PWM.

3.2 PROCESSAMENTO DE ´AUDIO EM TEMPO REAL EM ARDUINO 41 Pinos de entrada e sa´ıda

Microcontroladores podem receber e emitir sinais digitais atrav´es de pinos de entrada e sa´ıda que, no caso das placas Arduino, s˜ao convenientemente distribu´ıdas na montagem f´ısica de forma que ´e f´acil encaixar neles outros componentes e placas. A leitura e escrita nestes pinos ´e feita de acordo com frequˆencias governadas por diferentes rel´ogios (I/O, ADC e outros).

Em princ´ıpio, os pinos do microcontrolador s˜ao projetados para funcionar com sinais bin´arios, representados por duas voltagens de referˆencia (0 V e 5 V). Apesar disso, os pinos de entrada e sa´ıda vˆem equipados com mecanismos ´uteis para amostrar sinais de entrada com tens˜ao variante (entre os dois valores de referˆencia), e tamb´em para emitir formas de onda que, ap´os serem filtradas no dom´ınio anal´ogico, geram sinais que podem ser conectados diretamente a outros dispositivos que trabalham com ´audio anal´ogico. Estes mecanismos s˜ao, respectivamente, o conversor anal´ogico- digital (ADC) e a modula¸c˜ao por largura de pulso (PWM), que ser˜ao vistos nas pr´oximas se¸c˜oes. Tipos de mem´oria

O microcontrolador possui trˆes ´areas de mem´oria distintas para armazenamento do programa e dados, e a tabela seguinte resume as diferentes caracter´ısticas e prop´ositos de cada uma delas7:

Tipo Tamanho (KB) Persistˆencia de dados Tempo de es- crita (clock ticks) Dura¸c˜ao (ciclos de escrita/leitura) Flash 32 sim 1 10,000 SRAM 2 n˜ao 2 indeterminado EEPROM 1 sim 30 100,000

Em geral, a mem´oria Flash armazena o programa, a mem´oria SRAM guarda dados vol´ateis utilizados durante a computa¸c˜ao, e a mem´oria EEPROM ´e usada para armazenamento de longo prazo entre sess˜oes de trabalho. Note que a quantidade de mem´oria SRAM representa um limite importante para muitos algoritmos DSP. Uma tabela previamente calculada com 512 amostras de 8 bits representando um per´ıodo da fun¸c˜ao seno, por exemplo, representa 25% de todo o espa¸co dispon´ıvel para trabalho. Assim, se o espa¸co de mem´oria estiver escasso para uma certa aplica¸c˜ao, uma op¸c˜ao interessante pode ser armazenar dados previamente calculados diretamente na mem´oria do programa (ou seja, incluir estes dados diretamente no c´odigo fonte).