CONTROL_V – COMO CONTROLAR O VOLUME DE SOM USANDO UM PIC 16F628A E TDA8199

Trabalha-se sonorizando ambientes para festas e casamentos? Cansado de não conseguir operar corretamente o controle remoto por infravermelho? Porque não usar um via RF? Como? ….

A idéia é fazer uso de um controle remoto comercial (chaveirinho) que use o ci Ht6p20b , mais um receptor comercial para 433Mhz, e um microcontrolador PIC 16f628a para gerar uma tensão por PWM de 0 a 5 volts. Esta tensão será então, a tensão de controle de volume do ci Tda8199 (potenciomêtro digital estéreo). Veja o esquema abaixo:

Começando pela fonte de alimentação, que deriva sua energia de uma fonte externa de 15 volts, depois reduzida para 12volts, pelo regulador 7812. Esta tensão servirá para alimentar o circuito integrado Tda8199. Outro ci regulador de tensão é usado, agora para reduzir para 5 volts (7805), para a alimentação do microcontrolador e displays. Nos pinos 15 e 18 do Pic, foram colocados botões para ‘aumentar o volume’ (Up), ‘abaixar o volume’ (Down) e ‘mutar o som’ (Mute). Note que o ‘Mute’ liga os dois botões através de dois diodos 1N4148.
O botão ‘learn’ é usado para gravar controles remotos na memória eeprom do Pic. Se apertado por mais de 10 segundos provocará o apagamento total de todos os controles gravados. Para gravar um controle, aperte um dos botões do controle e mantenha apertado, apertando brevemente o botão ‘learn’. O led deverá piscar indicando o aprendizado. No apagamento, o led piscará varias vezes e nehum controle funcionará depois, devendo ser ‘reaprendidos’.
O receptor de 433Mhz (ou outra frequência escolhida, desde que os controles sejam da mesma frequência) é do tipo comercial, facilmente encontrado nas lojas da Internet e de varios modelos e formatos. Foi colocado um pequeno indutor na entrada da alimentação do receptor, para eliminar interferências geradas pela multiplexação dos displays.
Quanto ao display, foi usado na montagem experimental, os de catodo comum, no caso o modelo APLUS BT-N40KRI-LC4.75, reaproveitado da ‘sucata’ preciosa. Caso queira usar modelos com ânodo comum, altere a opção do arquivo asm, comentando #define catodo_comum e descomente #define ânodo_comum. No programa Asm, ao encontrar a definição escolhida, ocorrerá ou não a inversão de valores a serem apresentados. Isto se consegue por usar a instrução ‘XORLW OXFF’, que inverte todos os bits de um registrador.
A saída da tensão PWM é feita no pino 9 do PIC. Usamos os recursos interno do Pic, que conta com o módulo CCP (CAPTURE,COMPARE E PWM). Definimos a frequência pela carga do registrador PR2, e o tempo ‘ligado’ em CCP1L. De acôrdo com o valor da carga de CCP1L, teremos um valor de tensão de saída. O TIMER2 é usado para orquestrar os tempos. Quando a contagem atinge o valor do registrador PR2, a saída PWM (pino 9) é setada. Ao chegar ao valor de CCP1L irá zerar a saída.
Daí, até chegar ao valor de PR2 ficará desligada. Temos então, uma onda com tempos ‘ON’ e ‘OFF’, gerando a tensão PWM.
A maior dificuldade na operação deste sistema não está no módulo CCP, mas em controlar as funções de UP, DOWN e MUTE usando a transmissão recebida do controle remoto. Foi usado vários contadores (x0,x1) para determinar o fim de uma transmissão, já que o Ht6p20b não tem bit na sua transmissão que nos informe isto. Igualmente, para função de ‘ajuste rápido’, também foi usado um contador auxiliar(Z3), que após sua carga chegar a ‘zero’, habilita o incremento por um valor maior no contador ‘CONTH’. Este valor de incremento pode ser alterado na variável ‘V_INCR_RAP’, sendo 0x05 (incrementa de 5 em 5). Já a variável ‘VTEMP_AJ_RAP’ ajusta quantos números serão incrementados/decrementados antes de entrar a função de ajuste rápido. Quando se aperta ‘MUTE’, aparecerá no display três traços (‘—‘), ocorrendo um ‘retenção’, e não se pode incrementar ou decrementar o volume de som até que ‘MUTE’ seja apertado de novo. Para funcionar corretamente em modo ‘MUTE’, foram usados flags de ‘trava’ (F_A1 e F_A2), que bloqueiam as cargas de salvamento pré mute e retorno pós mute. A frequência de trabalho com oscilador interno do PIC é de 4Mhz, ou seja, realiza uma instrução em 1 us (pois a frequência é dividida por 4). Parece rápido, mas usando-se multiplexação de display, isto é ‘lento’. Se usarmos um timer com interrupção a cada 50 us (usado na rotina de recepção), mau ele sairía da interrupção e logo entraria de novo. Por isso, optei em fazer a multiplexação dos displays por intercalar a subrotina ‘CALL MULTIPLEXA’ em pontos estratégicos, ao invés de usar interrupção por timer, garantindo a boa visibilidade e não comprometendo a boa recepção dos sinais Ht6p20b. Sobre a rotina de recepção, ja foi amplamente comentada no artigo ‘RECEPTOR GENÉRICO COM PIC‘. Confesso que a ‘aparência do código’ parece um pouco confusa a primeira vista, com tantos contadores e travas agindo. Mas, funciona na prática.

Segue o arquivo ASM:

CONTROL_V_ASM

Segue o arquivo HEX:

CONTROL_V_HEX

Adicionalmente, em 16/11/2016 foi postado esta versão com apenas 2 dígitos (de 0 a 99):

control_v_2dig

Obs.Este projeto é com finalidade didática, sujeito a ocorrência de ‘bug’s ainda não identificados. Cada hobista poderá altera-lo a vontade, segundo suas necessidades.

Até o próximo artigo!!!

Curiosidades:
Proteja a sua audição!!!
Teatro de Epidauro

Outros assuntos:
Como administrar bem seu dinheiro!
Como lidar com … as divídas!!!
Como sobreviver ao primeiro ano de casamento!!!
Como lidar com … os sogros?

14 comments on “CONTROL_V – COMO CONTROLAR O VOLUME DE SOM USANDO UM PIC 16F628A E TDA8199

  1. Olá Larios tudo bem. venho pedir uma ajuda sua. eu tenho uma bicicleta com som para propaganda e eu to tendo problemas com ela de queima de aparelhos e vi esse projeto seu controle com volume ae eu ti uma endeia queria saber ser poderia me ajudar com ela. sera bem legal e utia
    eu ficaria muito grato.

      1. Obrigado pelo retorno Cláudio. você poderia me passar seu email ficaria mais pratico. aqui sera mas complicado
        obrigado!

  2. olá lario voce tem algun projeto que usa o modulo trasmisor nrf24l01,este modulo é capaz de transmitir
    uma quantidade muito grande de sinal na ordem de 2MB
    sao nescessario 2 modulo configurados 1 para transmitir e outro para receber,mais eles precisam sempre de um arduino, será possivel enviar um sinal de audio com auxilio de um pic?esse modulo chegam a um alcance de até 1km em lugares livres de obstaculo, opera em 2,4GHz(wireless)
    e um sitema muito interessante para transmissao de dados.
    valeu agradeço desde já. 🙁

    1. Olá Morais! Não tenho nenhum circuito para este objetivo. Mas achei interessante para uma pesquisa.
      Obrigado
      Claudio

  3. ola amigo te dei uma descanço né , rssrs , mas só uma ideia um cara me falou de um circuito tipo em um pic uma mensagem gravada que é ouvida assim que acionar algum botão seria posivel isso alem disso o cara quer que pisque uns leds tb , pode ficar pro seu caderninho tão famoso rsrsrs , abraço e sucesso

    1. Olá Liliano! Este é um campo bem interessante no uso de microcontroladores. Eu até montei o ‘pic talker’ para fazer uns testes, mas os sons tem forte sotaque ‘inglês’ e com pobre qualidade. Não conheço outros programas que possam ser usados. Há a possibilidade de usar um ci gravador digital de voz e aciona-lo com o pic. Ou até mesmo um mp3, destes baratinhos , que leia uma mensagem(s) em um pen drive ou cartão de memória. Dai…. usar imaginação!!!
      Cláudio

      1. opa amigo Projeto muito bom , agora estive aqui com um amigo que trabaha com aquelas maquinas de som que ficam em bares , seria enteressante o uso deste controle de volume em estas maquinas o unico porem é que para baratear os custos seria melhor retirar o display e reduzir para o mciro 12F675 . pois assim alem de reduzir o tamanho da placa o custo fica bem menor , agora seria apenas modificar os includes do programa e mudar a estrutura para não acender o display ou apenas mudar os includes e retirar o display ja resolve ?

        1. Olá Liliano!
          Este programa foi feito na integra no próprio asm, sem o uso de ‘includes’ do tipo ‘arquivos_lcd’. No caso, terá que eliminar todas as menções a apresentação no mostrador (rotinas e equates relacionados) e trocar o ‘include’ do microcontrolador ‘ para o 12 f675. Também, terá que acertar as portas para trabalhar com a ‘gpio e trisio’, ao invés de ‘ trisa trisb, pota e portb’.
          Cláudio

          1. è verdade , os pic de menos bits a maioria tanto na linguagem ASM quanto em C é usado o comando trisio , ja para os de maior bits ja se usa trisa , trisbou porta , portb .
            então retirando a parte do display , de acrodo com que eu for retirando se pintar alguma duvida posso te passa aqui no anuncio para vc me ajudar ?

  4. amigo muito bom mesmo a respeito do outro circuito montei e funcionou direitinho na pratica , no proteus que não funcionou , agora este que vc fez ficou muito legal , a opção de usar tanto o controle quanto os botões , no caso do controle ficar com bateria fraca , obrigado amigo mesmo sem tempo pra fazer , queria eu não ter tempo mas o conhecimento que vc tem , em menos de 5 dias ja fez os dois projetos que te falei , só te peço não esqueça daquele projeto que te falei do chama garçom , coloque ele no seu caderno de projetos , e quando puder me fala ok , agora como faço pra te enviar algums projetos que eu tenho aqui mesmo sendo em mikroc .

Comments are closed.

Back To Top