Gostaria de montar um circuitinho simples para brincar com notas musicais?
Esta montagem tem fins apenas recreativos e didáticos e não se trata de uma montagem profissional para músicos, mas unicamente para mostrar como podemos obter notas musicais usando um timer do PIC. Veja o esquema abaixo:
Conforme se nota no esquema, usamos 12 ports como entrada para interruptores, um para cada nota. Temos também uma única saída que poderá acionar diretamente um disco piezoelétrico ou a base de um transistor, colocando em seu coletor, um pequeno falante, destes de radio de pilhas (miniatura de 8 ohms). Nada impede de se injetar este sinal na entrada de um amplificador, usando um cabo blindado, com malha aterrada.
O circuito poderá ser alimentado por 4 pilhas AA de 1,5 volts, com um diodo 1n4007 em série para dar um pequena queda de tensão de 0,7 volts, colocando na faixa segura de trabalho do PIC.
Opcionalmente, poderá usar um carregador de celular com saída de 5 volts para alimentar o circuito.
A rotina geradora de notas musicais faz uso do timer 1 para gerar as frequências das notas musicais. Foi usado um cristal de 4 mhz para estabilizar a frequência e mante-la na tolerância mínima. A titulo de exemplo, para obter a nota ‘dó’ de frequência igual a 261 Hz , carregamos o timer 1 com o valor de metade do período total, que no caso = 1000000/261 -> 3.831 microssegundos /2 = 1915 microssegundos e ligamos a saída. Aguarda o flag de over estourar, e em seguida carregamos mais 1915 e desligamos a saída, repetindo todo o ciclo enquanto o botão estiver pressionado. Como o timer conta incrementando, precisamos lembrar de pegar o valor máximo da contagem e subtrair o valor pretendido (65536 – 1915 -> carga do timer 1). A cada estouro devemos também resetar o flag.
Por ser um circuito ‘primitivo’, apenas uma só nota será tocada, mesmo que uma ou mais teclas seja acionadas ao mesmo tempo.
Caso deseje oitavas acima ou abaixo, altere as frequências das notas em seus múltiplos superiores ou inferiores, nas constantes nomeadas de ‘tabelas de notas’ no arquivo ‘C’ e recompile novamente.
Poderá usar, como sugestão, o compilador CCS v.3200.
Obs. Esta montagem foi feita apenas em placa de protoboard, sujeita a bugs ainda não observados. Esta sendo fornecido os arquivos que poderão ser alterados conforme a necessidade do hobista.
Segue pasta com os arquivos desta montagem:
Segue um vídeo caseiro com a montagem em placa de protoboard:
[stream base=x:/picsource.com.br/wp-content/photos/2014/07/ flv=miniorgao.flv embed=false share=false width=640 height=360 dock=true controlbar=over bandwidth=high autostart=false /]
Manuais:
Pic 16f628a
tabela de frequências das notas
Curiosidades:
Os eficientes e versáteis escudos da Terra
A Grande Fome na Irlanda — Uma epopéia de morte e emigração
Variedade é essencial
Enxaqueca — o que você pode fazer?
Diabetes — como se prevenir
A Terra foi ‘fundada’ por acaso?
Os ciclos que sustentam a vida
“Quase projetado”?
Será que toda vida tem um ancestral em comum?
Ainda há tempo para salvar o planeta?
Outros assuntos:
Como ser educado ao trocar mensagens de texto
Como se livrar do ressentimento
Como ensinar seu filho a usar a internet com segurança
Por que rejeitar a pornografia?
Como ser feliz no casamento?
Quando seu casamento não é o que você esperava
Como resolver diferenças no casamento
Como recuperar a confiança no casamento
Quando um dos cônjuges tem necessidades especiais
Aprenda a perdoar
Como acabar com a tática do silêncio
Como criar filhos responsáveis
Como administrar o seu dinheiro
Como posso controlar meu peso?
Como evitar ferir com palavras?
Como tratar seu cônjuge com respeito?
Até o próximo artigo!!!
Olá Claudio! Esse projetinho é show de bola. Andei mudando algumas coisas mas tem uma que não consegui… no caso queria adicionar uma tecla à mais (no caso Dó mais agudo). Poderia me ajudar?
Olá Zur!
Você poderia usar o pino 4 para acrescentar mais uma tecla, lembrando de mudar a ‘palavra de configuração’ para usar este pino como entrada e acrescentar a rotina para tratar o evento desta nova tecla.
#fuses NOWDT,HS, NOPUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD //altere para esta
Acrescente:
#bit b13 =0x05.5 //PINO 4
const int16 nota_do_x =524;
E acrescente após if(!b12){…….}
while(!b13){ //TESTA BOTÃO DA NOTA ‘Dó aguda’
output_high(TONE_PIN);
set_timer1(0xffff-(500000/nota_do_x-10));
t1if=0;
while(!t1if);
output_low(TONE_PIN);
set_timer1(0xffff-(500000/nota_do_x-10));
t1if=0;
while(!t1if);
Cláudio
Olá Claudio! Muito obrigado pela atenção e prestatividade.Confesso que antes de perguntar ate fiz esses passos mas esbarrei na definição “#bit b13 =0x05.5” pesquizei na internet sobre essa parte e entender o que significa mas nao obtive sucesso. Senão fosse pedir muito poderia me ajudar a entender do se trata essas linhas #bit? Esses valores seriam hexadecimal (por conta do .5)? Desde de ja agradeço a atenção. Abração.
Olá Zur!
Esta ‘definição’ abaixo:
#bit b13 = 0x05.5
Significa o seguinte:
#bit —-> diz ao compilador que estamos trabalhando com apenas um bit.
b13 —-> diz para o compilador que queremos apelidar o bit com este ‘label’ ou rotulo (um nome qualquer que me facilite a vida)
= 0x05.5 —> diz para o compilador que o bit que será apelidado vai ser o portA , o bit n. 5 ( ou seja, estou manipulando um pino de saida do pic , sendo o portA=0x05, conforme o datasheet)
Traduzindo:
A definição #bit b13 = 0x05.5
diz que, doravante usarei nas linhas de código, o apelido “b13” no lugar de “portA.5”
Colocando apelidos fáceis de lembrar, a digitação fica mais intuitiva, rápida e fácil.
Use o help do compilador para obter exemplos de outras definições e funções.
Cláudio
Show! Muito obrigado pela explicação, me ajudará muito a terminar um projetinho estagnado aqui. abração.