Para os que gostam de música, o uso de um metronomo é essencial para um bom aprendizado de tempos musicais. Tem muitas versões ‘on-line’, com excelente desempenho e facilidades. Mas , se seu computador está sendo compartilhado com outros? Foi por isso que resolvi criar este projetinho, que poderá ter seu uso ‘stand alone’ ou seja, sem necessidade de um PC , (para alegria do restante da familia). Quer saber mais….
Veja o esquema abaixo:
Trata-se de um equipamento bem simples, com um visor com 3 display de 7 seguimentos, sendo multiplexados para ganhar pinos do PIC. A temporização correspondente as batidas por minutos, é obtida a partir de tabelas com valores obtidos através de cálculos matemáticos (para facilitar tantos cálculos, usei um pequeno programa em Visual Basic, para evitar ‘ a fadiga’).
Possui 2 botões para controlar o número de batidas por minutos. O botão ‘up’ incrementa o mostrador e o botão ‘down’ decrementa. Se forem apertados por mais de 3 segundos, irão para a função ‘rápido’, para facilitar o ajuste. Para obter o som, é usado um pequeno altofalante ( do tipo de radinho de pilhas), com dois transistores em par complementar como amplificador de saida. Foi colocado mais um transistor para acionar um led em estilo de ‘flash’ a cada batida. A indicação visual também ajuda muito, complementando o som.
Foi usado a interrupção do timer 1 para obter tempos de multiplexação dos displays e para gerar os tempos entre batidas. O timer 0 foi usado para desligar a saida de som em intervalo predeterminado. A alimentação pode ser obtida de uma fonte externa de 9 a 12 volts ou diretamente de um carregador de celular com tensão de 5 volts . Pode-se usar 4 pilhas AA com um diodo em série.
Trata-se de um protótipo, sendo montado em protoboard apenas. A faixa de uso vai de 40 a 250 batidas por minuto.
Segue abaixo o arquivo ASM:
Segue abaixo o arquivo HEX:
Segue abaixo o código para o Visual Basic, que gera as tabelas tab_1 e tab_2:
Até o próximo artigo!!!
Links técnicos:
Curiosidades:
hydraulus
Instrumentos Musicais A.C.
Universo cheio de surpresas
Universo – obra do acaso?
Nosso inigualável sistema solar
Mapeamento do céu
Qual a origem do universo e a vida?
Ponte da Torre – Entrada para Londres
O planeta vivo
Outros assuntos:
Quatro dicas para lidar com problemas financeiros e dívidas
Como lidar com sucesso com os sogros
Como reagir a um assédio sexual
Como parar de adiar as coisas
Olá Claudio!
Montei este projeto e estou satisfeito com ele porém notei um “problema”, percebi que os beats as vezes perdem um pouco do sincronismo. Como posso solucionar este problema? Notei que no projeto não há um quartzo para garantir o timing preciso.
Aguardo Retorno.
Olá Kreoswalldo!
Na ocasião que montei este projeto foi para ajudar meu filho no aprendizado de tempos musicais (montagem didática e não profissional), mas acabou não sendo usado por muito tempo. Quanto a precisão, na ocasião não achei necessário montar cristal, mas pode ser feito. Para isto tem que mudar a palavra de configuração para utilizar oscilador a cristal (xt). Mude no arquivo asm, esta porção de código:
de:
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT
para:
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
e colocar um cristal de 4 mhz nos pinos 15 e 16. O pino 16 está sendo usado atualmente para saída de som e deverá ser mudado para o pino 13, mudando :
#DEFINE SOM PORTA,7 ; SAIDA DE SOM PINO 16
para
#DEFINE SOM PORTB,7 ; SAIDA DE SOM PINO 13
Também:
MOVLW B’01111000′ ;ENTRADAS E SAIDAS PARA PORT A
MOVWF TRISA
para:
MOVLW B’11111000′ ;ENTRADAS E SAIDAS PARA PORT A
MOVWF TRISA
Depois recompile usando o Mplab para obter o novo arquivo .hex.
Cláudio
Qual o compilador que você usa?
Olá Kreoswalldo!
Poderá usar o Mplab. Escolha aqui a versão que se aplica ao seu sistema operacional.
Cláudio
Olá Claudio!
Uma pergunta meio off topic.
Estou de desenvolvendo um projeto com o pic16f628A onde precisaria de uma subrotina de 25us mas não faço ideia de como fazer, pode me dar uma dica? é possivel com este pic?
Desde já muito obrigado pelas dicas com o Metron, em breve as implementarei.
Aguardo retorno.
Olá Kreosvalldo! Desculpe, mas não entendi. Você precisa de uma subrotina de 25us para fazer o que? Seria o tempo máximo que vai fazer alguma coisa? Se for, com o pic 16f628a rodando com cristal de 20mhz, teremos tempos de instruções de apenas 250nseg. Assim, em 25 us dará para rodar 100 instruções . Note que se usar cristal de 4mhz ou oscilador interno conseguirá rodar apenas 25 instruções neste mesmo periodo de 25 useg. Vê-se que é vantajoso usar um cristal de maior valor possível que ainda seja suportado pelo pic.
Cláudio
Olá Cláudio.
No projeto que estou desenvolvendo preciso que um dos pinos do pic16f628a oscile a 40 khz, por isso preciso de uma sub rotina de tempo de 25us, na verdade deveria ser de 12us, ou 10.
Pensei em encher um labelo de “nop’s” mas acho que há soluções melhores.
aguardo retorno.
Olá Kreosvalldo!
Se entendi, o pic vai fazer outras coisas além de gerar a frequência de 40 khz em um dos pinos. Se fizer uma tabela de nop’s ficará travado neste processo e não conseguira fazer mais nada.
O que me vem a mente no momento é usar a interrupção gerada por um timer para alternar a saída de um pino para gerar a frequência. Outra possibilidade, talvez até melhor, seria usar o modulo PWM interno deste pic, fazendo ele gerar esta frequência de forma direta, deixando o pic livre para outras funções.
Cláudio
Amigo, consegui resolver parte do meu projeto sem utilizar o pic,muito obrigado por toda ajuda!!
E quanto ao metronomo, fiz as alterações no codigo e meu compilador encontrou algun erro nas linhas:
” INCF D10X ”
” INCF D11X ”
Na Build aparece o seguinte:
“A language-plugin exception occurred and was logged.”
Como soluciono esse problema?
Olá Kreosvalldo!
Por favor, experimente colocar uma virgula e um ‘f’ após cada um dos INCF desta forma:
INCF D10X,F
INCF D11X,F
Depois tente recompilar de novo.
Cláudio
Olá Claudio! Desculpe o incomodo 😀 Mas o programa da Build failed…as mensagens de erro no codigo sumiram, mas a frase:
“A language-plugin exception occurred and was logged.”
Como corrijo isso? gostei muito do metronomo mas os beats perdem o sincronismo.
Olá Kreosvalldo! Poderá consultar o forum da microchip para obter ajuda com este problema no compilador. Mas pelo que pesquisei, e se você está usando a versão do Mplab v8.xx , ocorre um bug onde terá que remover um arquivo para funcionar : Segue a tradução do comentário obtido no link citado do forum:
“solução
A exceção não tem nada a ver com o compilador / linker.
Remova o arquivo .map * da pasta “Outros Arquivos” na janela do projeto, o problema vai embora.
Este tem sido um bug de longa data em v8.xx MPLAB IDE que é difícil de corrigir, mas fácil de contornar.
Cheers ”
Eu uso uma versão mais antiga. Poderá baixar versões mais antigas neste link e testar se dá o erro.
Cláudio
Cláudio, muitíssimo obrigado por toda a sua ajuda!
olá Claudio!
me interessa bastante montar o projeto do Metron, gostaria de saber se realmente funciona este projeto pois no proteus não funcionou. voce consegue postar o codigo do metron em C pois gostaria de modificar para colocá-lo em outro PIC
Olá Fsilveira! Esta montagem foi feita unicamente com código assembly no Mplab e infelizmente, não disponho em código ‘c’, pois , ainda não é o meu forte. A montagem funcionou em protoboard apenas, sendo uma montagem didática e não de carater profissional.
Claudio
amigo imagina sentado em um banco , um monte de cabo passando , pedestal de partitura , caixa de retorno e sua caixa de som esta longe de vc , ocorre um problema no cabo da guitarra a igreja ta cheia , vc precisa abaixar o som mas não tem visão do infravermelho como fazer , ou uma peça de teatro um sistema de som controlado por um dos atores ele poderia aumentar ou abaixar o sistema todo por controle sem ter que mirar para ele , muita gente me pergunta porque não faz um sistema de amplificador controlado por rf seria muito util . sei que to te pertubando , mas é dificil encontrar pessoas que estejam dispostas a dividir sua experiecia , se puder me ajudar , procurei ate algo em pwm mas não acho nada do jeito que procuro , estava aprendendo em mikroc , mas apenas começando .
muito obrigado pela sua ajuda mesmo que vc não tenha tempo para fazer se puder me dar uma ideia da modificação ok
Olá Liliano! Gostei da sua resposta. Vou ver algo neste sentido. Por hora, veja algo sobre PWM neste novo artigo ‘Como gerar tensões com PWM’.
Claudio