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. Boa noite Sr Lario gostei muito desse projeto estou a montar ele mas gostaria de saber se tem como colocar ele no pic 16f84 pois tenho alguns aki gostaria de usa-los poderia migrar para esse, tenho outra pergunta tenho um projeto de teclado matricial com pic16f84 queria migra para o 16f628 ja que esta mas acessivel me ajudaria, mandaria o codigo pra vc ver se pode ser posivel, fico no aguardo.

    1. Olá Miudinho!
      Com respeito a primeira pergunta, não é possível migrar do 16f628a para o 16f84, pois este último é mais antigo e não dispõem de módulo PWM interno. Quanta a segunda pergunta, acredito que seja mais fácil migrar do 16f84 para o 16f628a no caso do teclado matricial. Bastaria trocar o include de INCLUDE “P16F84.INC” para INCLUDE “P16F628a.INC” e recompilar no Mplab-Ide, para obter o novo arquivo hex.

      Cláudio

Comments are closed.

Back To Top