Introdução:
Esse é um projeto que me veio a mente há pouco mais de 1 ano e ficou engavetado por diversos motivos e desvios de percurso. Retomado o que eu não deveria ter parado, foram dados os passos da segunda etapa: Montar o protótipo em protoboard (a primeira parte foi de pesquisa e elaboração de objetivos):Eu poderia ter usado um protoboard maior e feito tudo em um só, mas quis usar o protoshield que eu fiz e, como não cabia tudo, usei mais dois bloquinhos de protoboard pra colocar o amplificador de áudio e o circuito de clock para o PSG. As fotos comentadas podem ser vistas neste álbum.
Mas, enfim, do que se trata isso? É basicamente um shield de Arduino para gerar áudio com o circuito integrado PSG (Programmable Sound Generator) AY-3-8912, típico de microcomputadores das décadas de 70 e 80, como MSX, ZX-Spectrum, ZX81, Apple II etc, e que pode ser usado para chiptune ou qualquer outra coisa que sua imaginação permitir.
Diversos projetos já foram feitos com esse intuito como o que está no site arduino.cc ou este do 986-Studio, entre diversos outros.
O mais promissor, mas que aparentemente morreu no parto, foi o MIDIarcAYde, que chegou a ter um shield completo com o PSG e conexão MIDI, mas não houve divulgação do código fonte, do esquemático do projeto, nem nada. Provavelmente foi um trabalho de conclusão de curso e ficou nisso mesmo. O vídeo linkado no blog do projeto, com a placa em funcionamento, é interessante.
Apesar de haverem poucas diferenças entre todos os projetos, tomei como base o desenvolvimento demonstrado no blog do DQ (partes um, dois, três, quatro e cinco), participante ativo do Garoa Hacker Clube (ele fez uma página no wiki do Garoa sobre o projeto dele).
Apesar de ser muito didático, o projeto do DQ peca, IMO, no mesmo ponto que os outros: Falta uma biblioteca de software pro acionamento do circuito / shield, que permita um uso menos técnico e mais criativo, com mais liberdade, pra quem efetivamente quer fazer música (o tal chiptune) com o circuito.
Software inicial:
A princípio, criar uma biblioteca (lib - de library) para facilitar o uso do PSG de forma semelhante a linguagem BASIC dos microcomputadores MSX, com funções equivalentes aos comandos SOUND e PLAY, este último, com os macro comandos de controle de notas, duração, volume etc.A partir desse ponto, criar biblioteca de ruídos pré definidos (tiro, motor etc), acessíveis a partir de uma função simples.
Com isso disponível, programadores menos experientes podem colocar suas músicas no Arduino com programação básica, sem precisar conhecer os meandros de funcionamento do PSG.
Expandindo a usabilidade:
E se o PSG puder tocar músicas armazenadas em um cartão SD, selecionadas num shield com botões e LCD?E se o PSG puder ser acessado a partir de uma conexão MIDI (como demonstrado no projeto MIDIarcAYde), pela USB (como fez o DQ), ou mesmo por TCP/IP, RS-485, I2C ou seja lá qual conexão estiver feita com o Arduino que hospeda o PSG shield?
E se mais de um Arduino, cada um com seu PSG shield, estiver tocando a mesma música, com mais canais de áudio e ruído, disponíveis simultaneamente?
Mas isso será assunto para as próximas publicações...
Parabens pelo trabalho, Falcon! Mas ainda acho que voce deveria usar o AY-3-8910 nao so pela facilidade de acha-lo, mas principalmente porque ele funciona como um excelente expansor de portas de I/O tambem...
ResponderExcluirLike Jack, meu caro Taba...
Excluir1. Muito obrigado pela parabenização;
2. Estou usando o AY-3-8912 porque é o que estava a mão. Na parte de software, não muda nada... E como ainda não projetei a placa do shield, essa opção ainda está em aberto;
3. Pra usar as GPIOs do AY-3-891x, preciso ter comunicação bidirecional com o uC e isso consome 10 terminais, dos quais, alguns tem outras funções importantes (comunicação, por exemplo).
A solução é usar um DEMUX 74595 e reduzir o uso de terminais do uC pra apenas 5, mas perder a comunicação bidirecional com o PSG, ficando apenas com a opção de escrever nos registros (e não poder ler os GPIOs dele).
Perco a função de 8 (AY-8912) ou 16 (AY-8910) entradas digitais, apesar de ainda poder usá-las como saídas, mas os 5 pinos liberados no uC fazem uma grande diferença num Arduino simples (Duemilanove, Uno, Severino etc).
De qualquer forma, vale um brainstorm extra... Talvez a serialização da entrada e o uso de mais um pino do uC.
Olá. Estou precisando de AY-3-8912, tem ideia onde posso comprar, preferencialmente pela internet. Obrigado.
ResponderExcluirEu compro componentes da China via eBay, mas a possibilidade de virem danificados ou remarcados é grande.
ExcluirBlz, encontrei um preço bom e no caso de problema o prejuízo não vai ser grande, então vou arriscar. Obrigado.
Excluir