terça-feira, outubro 29, 2013

Chip de Som AY-3-8910 / KC89C72 - Parte 2

Nesta segunda parte veremos um circuito básico para podermos fazer algumas experiências ligando um KC89C72 a um Arduino (ou outro microcontrolador).


O datasheet do AY-3-8910 apresenta todas as informações necessárias para colocá-lo para funcionar e interfaceá-lo a um microprocessador ou microcontrolador.

O primeiro ponto a observar é a alimentação, que deve ser de 5V. Nas nossas experiências vamos usar a saída de 5V do Arduino alimentá-lo.

O segundo ponto é o clock, que deve estar entre 1 e 2 MHz. Ao contrário do que estamos acostumados nos microcontroladores, não é possível conectar diretamente um cristal ou gerar este clock internamente. É necessário um circuito externo para gerar um sinal um sinal de clock com nível TTL (leia-se nível baixo próximo de 0 e nível alto próximo de 5V). Existem vários circuito que podem ser empregados. Minha ideia original era usar um oscilador de 2MHz a cristal, mas tive dificuldade em achar um cristal de 2MHz. Acabei optando por um oscilador RC (frequência definida por um resistor e um capacitor), que é menos preciso. Nos dois casos o circuito utiliza inversores; no meu circuito usei duas portas NAND (de um 74HC00) com entradas interligadas.

Como vimos na primeira parte, a interface é essencialmente paralela, com oito bits de dados. Para simplificar a interface com o microcontrolador usei um 74HC595 (conversor serial paralelo). Este CI (que já apareceu em outros projetos meus) recebe como entrada um bit de dados (Data), um clock para deslocar este bit para um registrador interno (Clock) e um sinal para colocar os valores deste registrador nos pinos de saída (Latch).

O AY-3-8910 possui ainda mais quatro sinais de controle. O sinal RESET é deixado aberto, pois possui um "pull-up" interno. Os sinais BDIR, BC1 e BC2 controlam a via de comunicação com o microcontrolador. Para o nosso uso podemos deixar BC2 fixo em "1". Com BDIR em 0, BC1 em 0 deixa os pinos de dados em alta impedância e BC1 em 1 comanda uma leitura de registrador (o que não podemos usar, pois os 595 não é bidirecional). Com BDR1 em 1, BC1 seleciona entre a escrita em um registrador (0) ou a seleção do endereço do registrador (1).

Neste circuito simples vamos usar apenas o canal A do KC89C72. Este sinal passa por um potenciômetro (para controlar o volume) e um amplificador antes de ir para um auto-falante. Minha ideia inicial era montar um amplificador com o LM386, mas preferi um circuito mais simples usando um transistor S8050 (específico para este tipo de aplicação).

O circuito final ficou o seguinte:


A foto no início do post é a minha tradicional montagem em placa padrão com fios wire-wrap soldados.


No próximo post vamos conectar esta placa a um Arduino e experimentar algumas operações básicas.

Nenhum comentário: