Como aplicação do nosso artigo anterior, segue agora um projecto em que se utilizou o nosso PicPgm para programar um microcontrolador PIC18F4550.
Este pequeno projecto pretende apenas exemplificar a utilização de um microcontrolador PIC numa simples aplicação de audio.
Utilizando apenas entradas e saídas digitais, desenhou-se um simples piano/sintetizador com um estilo parecido ao de 8 bits:
Por uma razão de memória optou-se pelo uso do microcontrolador PIC18F4550 para este projecto.
Primeiro atribuíram-se as seguintes funções às respectivas portas:

As portas a verde correspondem às entradas e as portas a vermelho correspondem às saídas.
Definiram-se as portas:

As entradas b1 a b11 correspondem aos botões de pressão do circuito e a entrada mode corresponde à entrada selectora do modo de funcionamento. Por sua vez as saídas l1 a l11 correspondem aos LED’s indicadores. Cada LED estará posicionado perto do seu botão de pressão e acenderá cada vez que a respectiva nota musical for tocada. Por último, a saída audio corresponderá à ligação a uma pequena coluna ou speaker.
Utilizando o software open-source KiCad, desenhou-se o circuito:

E de seguida desenhou-se a PCB:

Em 3D a placa fica com o seguinte aspecto:

Para construção do circuito utilizou-se uma PCB de dupla face. Primeiro o circuito foi impresso em papel de revista numa impressora a laser, depois foi transposto para a PCB através do método de transferência de toner. Transferiu-se um lado primeiro e depois foram feitos alguns furos para acertar o posicionamento da segunda face:


Depois mergulhou-se a placa em percloreto de ferro para eliminar o cobre não protegido pelo toner:


Para eliminar o toner utilizou-se um esfregão debaixo de água morna. A PCB ficou com o seguinte aspecto:


De seguida fizeram-se todos os furos e foram colocados os componentes. Temos então a placa finalizada:
No modo Tocar ou seja quando mode=0, os botões de pressão b1 a b11 correspondem às teclas do “piano”:
b1 – lá (440 Hz)
b2 – si (494 Hz)
b3 – dó2 (261×2 Hz)
b4 – ré2 (293×2 Hz)
b5 – mi2 (329×2 Hz)
b6 – fá2 (349×2 Hz
b7 – sol2 (392×2 Hz)
b8 – lá2 (440×2 Hz)
b9 – si2 (494×2 Hz)
b10 – dó4 (261×4 Hz)
b11 – ré4 (293×4 Hz)
Optou-se por se utilizar a segunda oitava como escala principal e adicionaram-se duas notas musicais acima e abaixo. Para além disto, pressionando dois botões adjacentes é possível obter também os sustenidos e bemóis.
Quando cada um dos botões é pressionado, é enviada para a coluna uma onda quadrada com a respectiva frequência.
Por exemplo, quando b1 é pressionado deve ser reproduzida a nota lá, então para criar este som, colocamos na saída audio uma onda quadrada com 440Hz. Para fazer isso, sabemos que o período de 440Hz é igual a 1/440 = 2272 µs aproximadamente. Então colocamos a saída a “1” durante metade desse tempo (1136 µs) e depois a saída a “0” durante a outra metade:
if (b1)
{
audio=1;
delay_us(1136);
audio=0;
delay_us(1136);
}
Para além do som, quando a nota lá é reproduzida, o LED L1 acende.
No modo de reprodução cada botão está associado a uma música que será reproduzida quando este for pressionado.
Cada música em memória é composta por dois vectores, um vector de frequências ou de notas musicais e um vector de tempos. Estes vectores são depois lidos através da função Sound_Play(x,y) existente no compilador utilizado (mikroC).
Por último, o b0 é o botão de reset do circuito.
E assim se faz uma simples e divertida aplicação.
Aqui está o ficheiro .hex e o layout da PCB: pianopic hex+pcb.zip
1 comentário
Lisbon Mini Maker Faire – parte I | The BiT Bang Theory · 06/04/2015 às 23:49
[…] Piano PIC – João Duarte; […]