segunda-feira, 10 de março de 2014

PSG Arduino Shield - Parte 1

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...

5 comentários:

  1. 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...

    ResponderExcluir
    Respostas
    1. Like Jack, meu caro Taba...

      1. 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.

      Excluir
  2. Olá. Estou precisando de AY-3-8912, tem ideia onde posso comprar, preferencialmente pela internet. Obrigado.

    ResponderExcluir
    Respostas
    1. Eu compro componentes da China via eBay, mas a possibilidade de virem danificados ou remarcados é grande.

      Excluir
    2. Blz, encontrei um preço bom e no caso de problema o prejuízo não vai ser grande, então vou arriscar. Obrigado.

      Excluir