METRON – METRÔNOMO SIMPLES COM PIC 16F628A

0

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:

METRONOMO_ASM

Segue abaixo o arquivo HEX:

METRONOMO_HEX

Segue abaixo o código para o Visual Basic, que gera as tabelas tab_1 e tab_2:

VB_CALCULAR_TABELA

Até o próximo artigo!!!

Links técnicos:

datasheet Pic16f628a

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

0

27 comments

  1. 0

    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.

    1. 0

      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

          1. 0

            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.

          2. 0

            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

          3. 0

            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.

          4. 0

            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

          5. 0

            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?

          6. 0

            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

          7. 0

            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.

          8. 0

            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

  2. 0

    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

    1. 0

      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

  3. 0

    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

  4. 0

    amigo é masi oumenos isso , pode ser com 1 digito de 0 a 9 , este ci tda trabalha com variação de tensão de 0a 5 V , o que eu faço no caso se eu quizese usar um controle ht6p20b , para fazer sata função volume e mute usando os 3 botões .

    1. 0

      Olá Liliano!
      Normalmente, usamos controle remoto por infravermelho para controlar funções de aparelhos de som. Qual o motivo que você deseja fazer por RF?
      Claudio

  5. 0

    é muito verdade , mas tenho pouco tempo e certos circuitos testo antes mas ja tive problemas com o proteus , pois simulava e não funcionava ai na pratica dava certo , mas eu queria usar este projeto seu para outra finalidade , o que tenho que mudar para ele virar um controlador de volume , eu ia utilizar o display como mostrador , os botões para volume + e – , o problema é que teria que ter uma saida que variasse a tensão de 0V a 5V , pois iria usar o tda8199 para controlar o audio , sei que vc é fera e sabe como fazer . abraço e muito sucesso

    1. 0

      Olá Liliano!
      Não sei se usar o Asm do Metron facilitaria. Acho que seria melhor fazer um projeto novo, especifico para isto. O que você quer, que eu entendi, é usar um botão para aumentar o volume e outro para reduzir, sendo apresentado no display de 2 digitos (1 digito), o valor do volume ( de 0 a 99 em 2 digitos???? De 0 a 9, em 1 digito ????). A saida seria um possível sinal PWM, de 0 até 5 volts, mas que teria que ser bem tratada para não atrapalhar o funcionamento do ci TDA8199. Ou opcionalmente, pode se usar uma rede 2RC para gerar as escalas de tensão, já não precisando tratar esta saida. O valor precisaria ser salvo em EEprom ao desligar??? Onde seria usado este controle de volume, visto que a maioria dos equipamentos comerciais já vem com controles de volume digitais (com raras excessões)?
      Cláudio

  6. 0

    ola amigo , sobre este projeto do metronomo , montei o circuito no proteus mas o 3 displays ficam acesos 888 , os botões não operam e o audio não sai , com a finalidade de ajudar as pessoas que forem montar gostaria de saber , sera que tem a ver com a frequencia do oscilador , a multiplexação ta funcionando certo ? , ou apenas um problema de simulação do proteus peço sua ajuda para rever o projeto pois tenho intenção de montar o circuito mas gosto de simular antes , obrigado e perdoe minhas perguntas como te disse sou leigo em programação mas bem pratico em montagens , gosto muito de desafios igual a vc e por isso estou procurando aprender assembler para te pertubar um pouco menos rrsrs , abraço .

    1. 0

      Olá Liliano!
      Eu fiz apenas a montagem em protoboard com componentes reais. Não uso proteus para desenvolvimento, porque tem circuitos que não consigo faze-lo funcionar. Para não perder tempo, vou na montagem física (mais divertido).
      Claudio

  7. 0

    oi claudio , em relação a porta serial do pc , está funcionando certo pois uso o ic-prog e funciona certinho .
    eu até procurei na internet um circuito simples para acender um led ( li em seu post do gravador de avr ) mas só achei o código fonte do programa , mas não consegui compilar ( só sei compilar .asm e .c ) . é muito complicado o atmega8 .
    mas na hora de gravar ,eu acho que o pony prog grava certo pois quando gravo sem o atmega ele dá erro e com ele não dá erro . to achando agora que é essas palavras de configurações ou estou travando esses atmegas que tenho sem saber .

    1. 0

      Ola Michael! Se você consegue ler o chip com o PonyProg é sinal que não está travado. Quando você programa um Hex no chip, o PonyProg confere no final, se houve erros de gravação. Se não houve mensagem de erro, é sinal que gravou bem. Quanto a palavra de configuração, a maioria dos arquivos Hex já vem definido corretamente a palavra de configuração de forma embutida, exceto se o autor pedir para configurar manualmente. Pode estar ocorrendo erro na montagem fisica . Tente comparar o esquema com a montagem a procura de erros.
      Claudio

  8. 0

    olá claudio , lembra que te perguntei sobre um circuito de joystick usb . achei alguns mas me interessei por este aqui :

    http://vusb.wikidot.com/project:mamepanel

    sendo que montei , gravei com o programador de atmega 8 que você postou e não funcionou .

    to achando que estou gravando errado , uma configuração do pony prog 2000, ou alguma ligação que ficou faltando , não sei mais o que fazer .

    tem como você dar uma olhada no circuito e me ajudar ??

    montei o circuito da pasta V-USB_Mame_Panel_Atmega8 .

    1. 0

      Olá Michael! Sugiro que primeiro voce confira se o gravador que voce fez está funcionando corretamente. Para isto, monte um circuito simples do tipo “acende um led em uma porta” (de preferencia, pegue um na internet) e tente envia para o chip. Se funcionar, passe a analizar o seu circuito ou seu software. Nos AVR, a maioria das vezes ocorre problemas com as palavras de configuracões, que são muitas. Se voce nunca usou nada ligado a serial do seu PC, verifique se não precisa de algum programa para liberar as portas para os programadores como IC-Prog,Winpic e Ponyprog ( o Windows impede o uso das portas por outros programas ).
      Cláudio

Comments are closed.