Console Retrô com Raspberry Pi Zero

Agora que estou de férias, posso dedicar mais tempo aos projetos. Porém também é preciso se estressar com outra coisa, como video-games, por exemplo. Aqui tenho um Mega Drive e um SNES para jogatinas old-school. A prpósito, eu fiz um projeto em que reprogramo cartuchos de SNES, vale a pena conferir. Ambos os consoles são do período 16 bits, porém infelizmente eu nunca tive um NES, que é 8 bit.

No entanto, tinha um raspberry pi zero parado aqui e que é perfeito pra emular consoles antigos desde o NES até alguns mais recentes como o PSX.  Pesquisei um pouco sobre o assunto, depois decidi que as minhas intenções eram:

  • Vídeo e áudio analógicos. Eu nem tenho TV com HDMI, tá bom, eu sei que já é 2017 e tal, mas tipo, eu sou pobre. Poderia usar meu monitor LCD, porém CRTs são perfeitos para jogos antigos de qualquer forma.
  • USB fêmea do tipo A. Para conectar controles sem necessidade de cabos adaptadores adicionais.
  • Terminar o projeto o mais rápido possível, pra não perder o interesse haha. Consegui em uma tarde + parte da noite.

Montagem

Nada difícil. O seguinte esquema mostra a conexão dos componentes. Claro que se fosse usar a saída HDMI, nada disso seria necessário. Bom, a USB talvez, né? A porta USB e os conetores de video e áudio foram tirados da sucata mesmo.

Alguns dos componentes

Minha ideia inicial era fazer uma especie de “shield” que pudesse ser removido completamente do raspberry. Para isso eu utilizei um pedaço de placa perfurada (como sempre). Uma CNC faz muita falta nessa vida.

Conectores de video e áudio

Comecei soldando a saída de vídeo. Basta conectar o centro do conector ao pino TV no rapberry pi. Esse fio provavelmente deveria ser blindado, pois depois tipo um pouco de interferência(60Hz) no som que acho que é causado pelo sinal de vídeo.

Conector de vídeo soldado ao pino TV

Depois soldei um header pra conectar um conversor USB-Serial. Acessar o raspberry pela serial nesse caso se mostrou muito trabalhoso. Preferi depois utilizar um HUB USB e acessar o terminal pelo teclado mesmo.

Header para conexão serial

Aqui que começa a decepção. Queria utilizar um cabo USB para conectar o “shield” a USB do raspberry, assim poderia retirar facilmente o raspbery da placa. Infelizmente não achei nenhum cabo quebrado aqui e também não ia cortar um de propósito. Então acabei soldando a USB fêmea diretamente a placa, através dos test pads.

 

Porta USB soldada diretamente ao raspberry, infelizmente

Como o raspberry Pi não tem saída analógica de áudio, é preciso adicionar um filtro passa baixa ao circuito. Esse filtro retira a parte de alta frequência(50kHz) do sinal PWM, deixando as componentes do espectro audível (<20kHz).  Esse circuito é do post da Adafruit sobre áudio no pi zero.

Placa completa, com detalhe no filtro

O circuito do filtro é o seguinte:

Esquema do filtro passa baixa

No meu projeto só usei uma saída de áudio, porque a tv daqui só tem uma entrada(mono) de qualquer forma. Conectei a saída de áudio na minha placa ao pino 18.

Para que a saída de áudio funcione, é preciso ainda fazer uma pequena mudança na configuração do retropie. Isso é explicado mais abaixo em detalhe.

Download do Retropie

Baixei a versão para rapberry pi 0 ou 1. O processo de transferência para o cartão SD é o mesmo usado para o Raspbian ou outros SOs para o raspi. Há uma guia de instalação na página. Resumindo, basta extrair o arquivo que vem compactado e gravar no cartão SD com Win32 Disk Imager.

Download

Configuração de uma saída de  áudio analógica

O raspberry-pi não tem saída de áudio analógico por default. É preciso redirecionar o áudio para algumas  GPIOS com PWM.

O processo é extremamente simples. Primeiro conecte um teclado ao raspberry e abra o terminal do retropie pressionando F4.

Navegue até a pasta boot (cd /boot/). No meu teclado o “/” não estava funcionando, então usei:

cd ..
cd ..
cd boot

Abra o arquivo config.txt com privilégios de admin.

sudo nano config.txt

Adicione a seguinte linha ao fim do arquivo:

dtoverlay=pwm-2chan,pin=18,func=2,pin2=13,func2=4

Salve o arquivo pressionado Ctrl-X e Y para confirmar a atualização do arquivo.

Volte para a interface gráfica digitando

emulationstation

Reinicie o raspberry, agora o som já deve estar disponível nos pinos 13 e 18 .

Adicionando ROMs

O processo é explicado nessa página. Resumindo, é preciso criar uma pasta chamada retropie em um pendrive formato em FAT32, depois colocar esse pendrive no raspberry e esperar a luz parar de piscar. Se seu pen drive não tem um LED, boa sorte.

O retrpie cria várias pastas dentro da pasta retropie no pendrive. Feito isso basta colar suas ROMs na pasta do respectivo sistema, por exemplo, ROMs de NES na pasta ‘nes’. Conectar o pendrive ao retropie e esperar as ROMs serem copiadas.

Conclusão

Para algo que foi feito as pressas, até que fiquei surpreso. A coisa funciona quase que perfeitamente, há uma interferência quase imperceptível a 60Hz no som, porém é o que se ganha quando se faz um circuito com tanta preguiça como fiz esse. Tenho quase certeza que essa interferência é do sinal de vídeo, quando soldar um fio blindado faço um update aqui.

Super Mario Bros 3

Por enquanto é isso. Obrigado pela leitura.

Até um próximo post o/.

 

Robson Couto

Recentemente graduado Engenheiro Eletricista. Gosto de dedicar meu tempo a aprender sobre computadores, eletrônica, programação e engenharia reversa. Documento meus projetos no Dragão quando possível.

4 thoughts to “Console Retrô com Raspberry Pi Zero”

  1. Antes de qualquer coisa parabéns pela postagem. Encontrei sua página procurando uma solução pra áudio analógico com o rpi0. Estava quebrando a cabeça. Me salvou. E pelo visto há muito mais conteúdo de qualidade. Favoritado. Mais uma vez parabéns pela clareza no artigo.

  2. Boa tarde amigo, parabéns pela matéria! Vou comprar os componentes e fazer esse experimento em meu rpi zero.

    Eu tenho uma dúvida em relação ao RPI e talvez você saiba me responder!
    Gostaria de colocar mais uma entrada USB para dados (No caso gostaria de colocar mais um joystick).
    Você sabe se existe a possibilidade de colocar mais um USB na placa? Pois pesquisei em tudo que me foi possível e não encontrei nada em relação a isso sem utilizar um HUB

    Desde já agradeço

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *