collapse

* Posts Recentes

Alguém arranja motores? por almamater
[11 de Dezembro de 2024, 16:07]


Sistema a LASER que será também capaz de matar moscas por jm_araujo
[11 de Dezembro de 2024, 12:35]


Nevadent - Não carrega por almamater
[22 de Novembro de 2024, 21:36]


Classmate Leap T304 não liga por almamater
[19 de Novembro de 2024, 07:13]


+ LASERs por dropes
[18 de Novembro de 2024, 21:50]


Dúvida com fonte de alimentação comutada por filjoa
[28 de Outubro de 2024, 21:57]


Motoserra Stihl 120C por dropes
[26 de Outubro de 2024, 19:01]


Shelly em jeito de watchdog por SerraCabo
[24 de Outubro de 2024, 19:24]


Meu novo robô por josecarlos
[06 de Outubro de 2024, 13:33]


Sirene NOVA maluca por dropes
[01 de Outubro de 2024, 18:26]

Autor Tópico: Emulador NES em ESP32  (Lida 98940 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.250
Re: Emulador NES em ESP32
« Responder #15 em: 13 de Março de 2024, 21:19 »
Revisão 1:
- Fonte da "bateria" idêntica ao restante texto
- Em modo DEMO, o score mantem-se sempre visível do último jogo
- Adicionada bibilioteca "Adafruit_BusIO" em falta



Este fórum tem andado meio parado... ou melhor, mais parado que o habitual :P

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.250
Re: Emulador NES em ESP32
« Responder #16 em: 10 de Abril de 2024, 15:30 »
Com o não sou pessoa de desistir facilmente, e o C tem sido desafiante, estou a tratar de criar um clone do famoso ODROID-GO



Existe até uma página relacionada com este tipo de consola, a 1ª versão foi esta do Odroid-go:
https://www.hardkernel.com/shop/odroid-go/
Esquema (não existe layout da pcb disponível):
https://github.com/hardkernel/ODROID-GO/blob/master/Documents/ODROID-GO_REV0.1_20180518.pdf

Entretanto surgiram outras no site, para emular consolas mais avançadas, maior poder de processamento, memória, wi-fi, câmera, comandos xpto, etc...

Vamos RETRO, mantive os IOs exactamente como na consola original, facilita bastante a gravação de imagens pré-compiladas, sem ter de alterar a configuração no código e voltar a compilar.
Também tentei manter as medidas exteriores:



Display 320x240 (ILI9341) : https://pt.aliexpress.com/item/1005006470481683.html
ESP32-WROVER-E 16MB : https://pt.aliexpress.com/item/1005002186594347.html

obs:
Vou aproveitar o suporte SD, mas ainda não sei se é SD normal ou micro, isso altera o layout da pcb... vamos ver
O som sai do ESP32 via 2 DACs, parece-me familiar, porque não via I2S ?! ;D

obs2:
Encontra-se no Ali consolas emuladoras por 10 ou menos, mas não é a mesma coisa  :)

ps: estive a ver melhor o código e o som é via PWM... bolas, assim não vai funcionar, tenho de ver melhor isso


« Última modificação: 10 de Abril de 2024, 20:58 por dropes »

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.250
Re: Emulador NES em ESP32
« Responder #17 em: 19 de Abril de 2024, 15:31 »
Depois de procurar detalhes deste LCD.
Vi alguns vídeos e detalhes da orientação, assim como do controlador.

Não iria realizar uma PCB, para depois ter de rectificar tudo, devido a um lapso parvo.



Ao inicio não dava sinal, dei conta que o RESET do ESP32 tinha um nome diferente no esquema do restante RESET (SD, LCD e Switch).
Depois de uma ponte, iniciava bem, mas dava erro ao ler o cartão SD, então coloquei 6 pull-ups para remediar.
Continuou a dar erro, depois gravei um teste de leitura, enviando o resultado via porta série. Estava a funcionar bem.
Tenho dúvidas se o micro-SD não era compatível com a bibliotaca do ODROID-GO, 1GB deveria dar.

Em desespero, soldei um suporte SD normal (como se pode ver pela foto), e aí 5 estrelas, tudo direitinho.  ;D

Vou fazer nova PCB (assim que testar o restante circuito), e rodar o display 180º... por sorte vou ter de soldar novo suporte SD ao LCD, o original removi de forma +- destrutiva, para não danificar o display.
Assim, o cartão SD já pode ser inserido por cima.

Esta PCB também não correu lá grande coisa, deveria ter usado acetatos sobrepostos. Ficou cheio de pontinhos  :P

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.250
Re: Emulador NES em ESP32
« Responder #18 em: 20 de Abril de 2024, 14:22 »
Eis uma configuração de um amp-op que desconhecia:


fonte: https://github.com/hardkernel/ODROID-GO/blob/master/Documents/ODROID-GO_REV0.1_20180518.pdf

O sinal PWM do IO26 tem entrada em IN+ no amp. até aqui tudo bem.

Entretanto a saída IO25 também tem o seu condensador 0.1 e resistência de 100k em série para este amp.
Mas neste caso a única função deste sinal é para o /SD pino 6 (/MUTE).
Tanto no código assim como no osciloscópio, este sinal é apenas digital, nunca PWM.

Dúvidas, mas qual o objectivo de se usar um sinal, como se fosse analógico, confunde-me?!   ???



Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.980
  • NERD!
Re: Emulador NES em ESP32
« Responder #19 em: 20 de Abril de 2024, 15:24 »
Se vires a datasheet desse amplificador classe D (não é um opamp), o in- é recomendado ligar com o condensador e resistência ao GND. Como tem o condensador tanto faz, desde que seja uma tensão estável. Talvez tenham ligado ao io25 porque dava mais jeito no routing?

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.494
Re: Emulador NES em ESP32
« Responder #20 em: 20 de Abril de 2024, 16:22 »
Tanto no código assim como no osciloscópio, este sinal é apenas digital, nunca PWM.

Sinal digital no osciloscopio? queres partilhar?
Será que é um PulseDensityModulation?

O resto do circuito é normal, um amplificador de audio.

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.250
Re: Emulador NES em ESP32
« Responder #21 em: 20 de Abril de 2024, 17:16 »
Se vires a datasheet desse amplificador classe D (não é um opamp), o in- é recomendado ligar com o condensador e resistência ao GND. Como tem o condensador tanto faz, desde que seja uma tensão estável. Talvez tenham ligado ao io25 porque dava mais jeito no routing?
Sim, parece ser classe D.
O IN- (Negative Differential Input) deveria ficar com metade da tensão da alimentação, ou ligado com um condensador ao GND, como exemplificado pela datasheet.
Não me parece que ligar a um sinal lógico ou a uma saída flutuante seja o mais correcto.

Tanto no código assim como no osciloscópio, este sinal é apenas digital, nunca PWM.

Sinal digital no osciloscopio? queres partilhar?
Será que é um PulseDensityModulation?

O resto do circuito é normal, um amplificador de audio.

Até que posso partilhar o sinal, mas é só 3V ou 0V quando em mute. Não é interessante  ;)
O único sinal PWM é apresentado em IO26.
Ao se ajustar o volume (via switch), IO25 mantém-se a 3V, mas quando o volume é mínimo, este sinal passa a 0V.

Conclusão, no seu funcionamento normal (com som), o terminal IN- está ligado a 3V (sinal lógico) através de um condensador e uma resistência.

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.980
  • NERD!
Re: Emulador NES em ESP32
« Responder #22 em: 21 de Abril de 2024, 09:05 »
Uma coisa que me estava a fazer confusão: o IO26 é DAC, e não PWM como indicado.Um sinal PWM ligado diretamente a um amplificador classe D sem um passa baixo primeiro não ia funcionar muito bem (been there, got the T-shirt).
A reproduzir som de consola antiga, com som rudimentar (bip-bop-bip) pode parecer PWM mas não é a mesma coisa, PWM para áudio tem de ter uma frequência fora da audição humana para não ser audível.

Tens uma explicação do circuito aqui: https://austinmorlan.com/posts/odroid_6/
« Última modificação: 21 de Abril de 2024, 09:10 por jm_araujo »

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.250
Re: Emulador NES em ESP32
« Responder #23 em: 21 de Abril de 2024, 11:55 »
Concordo totalmente, PWM tem de levar um filtro à saída.
Obrigado pela informação, estava mesmo convencido que o sinal era PWM.  :)

Segundo o código exemplo, está configurado para PWM 13b, o que corresponde a 5kHz no máximo.
Então o emulador processa o som de forma diferente dos exemplos...arg

Interessante este artigo, vou averiguar mais  ;)

"That means to use the amp we must not use IO25 as a DAC but instead as an always-high GPIO output. But that also then sets IN- high which is not what the amplifier datasheet recommends (it should be ground). We must then use the DAC that is connected to IO26 as our I2S output to be fed into IN+. This does not achieve the expected noise-elimination because IN- is not connected to ground. There is a constant soft fuzz of noise coming out of the speakers at all times."

Bem me parecia que algo não estava bem  ::)

Esta versão já não está a ser comerciada, entretanto é um bom princípio de aprendizagem.

V2 e 93 vias depois  :P



Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.250
Re: Emulador NES em ESP32
« Responder #24 em: 22 de Abril de 2024, 14:14 »
Desde já, peço desculpa pela qualidade das fotos, colocar as pontas enquanto seguro no telemóvel e tirar uma fotografia, é muito malabarismo.

Configuração osciloscópio para 200uS:


Sinal após amplificado:


Sinal com filtro passa baixo de 1ª ordem:


Circuito em causa (entrada e saída em paralelo):


Para consola, não exige som muito alto, este amplificador toma conta do recado, e o som tem uma qualidade aceitável.
Nas medições, observei uma frequência residual de 50kHZ, é incomodativo, e o filtro ajudou um pouco.

Este é composto por C30-R31-C31.

No inicio coloquei 100nF em C31, resultado na foto acima.
Entretanto abafava demasiado e acabei por trocar por um de 47nF.
Atenuação ficou em 23db para 50kHz aproximadamente.

Poderia ir para outro tipo de amplificador e desenhar um filtro de 2ªordem activo mais eficiente.

Estar tudo a funcionar, é gratificante  :)
« Última modificação: 22 de Abril de 2024, 18:30 por dropes »

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.250
Re: Emulador NES em ESP32
« Responder #25 em: 28 de Abril de 2024, 15:36 »




Gostei dos emuladores, funcionam perfeitamente e os botões são responsivos.
Permite também ajustar o brilho, volume de som, e entrar em modo sleep, sabe-se lá porquê.
A velocidade corresponde, sem perdas de frames.

Testei com sucesso, NES, GB, GBC, SMS e GG
Quase todos os jogos rolam bem, poucos bloqueiam ao iniciar.

Sim, Doom também funcionou aqui.
Parece que Duke Nukem 3D também, mas esse não testei.
Tyrian e Wolfenstein 3D, não consegui correr, devo estar a fazer algo mal...

Bem... funciona

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.945
    • GrcByte - Projectos
Re: Emulador NES em ESP32
« Responder #26 em: 28 de Abril de 2024, 17:34 »
 :D  uau ficou muito bom! Parabéns pelo projecto!!

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.250
Re: Emulador NES em ESP32
« Responder #27 em: 29 de Abril de 2024, 15:50 »
Obrigado  :)

Nova descoberta https://forum.odroid.com/viewtopic.php?t=37599

Retro-Go: suporta Genesis e TurboGrafx-16 (PC-Engine), agora sim, está completo  8)

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.980
  • NERD!
Re: Emulador NES em ESP32
« Responder #28 em: 29 de Abril de 2024, 18:12 »
Boa dica, dá-me vontade de fazer uma coisa dessas, como assim acho que tenho o hardware todo em stock...

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.250
Re: Emulador NES em ESP32
« Responder #29 em: 30 de Abril de 2024, 15:09 »
É um projecto interessante, que merece o tempo dispendido, já que a despesa é mínima (12 no meu caso, lcd + esp32)

Improvisei nos botões para os switchs, todos os 12 levaram espaçadores, sem folgas.
Careço de uma impressora 3D, a caixa foi realizada com 2 placas de acrílico 2mm, dobradas termicamente em forma de U.

O Esp32 deve ser de 16MB flash e 8MB PSRAM, a versão original do Odroid-go tem o micro ESP32-WROVER-B,
que se encontra obsoleto, estando presente a versão -E.

- 90% dos jogos correm bem em emulação, o som é por simulação dos chips, e é fantastico.
- Além das consolas de 8bits, não fica atrás nas de 16bits, "Megadrive / Genesis" e "Super Nintendo".
- Infelizmente fica complicado emular multiplos chips de SOM em 16bits, e arrasta um bocado (é opcional no menu).
- Todos os jogos permitem a gravação do estado actual deles (grava ficheiros em SD), muito bom para continuar sem ser do inicio.
- Correr Doom num micro de 5€ é fantástico, com todos os sons e movimentos fluidos.

Existem duas versões de firmware para o "hardware odroid-go", o próprio "odroid-go" e o "retro-go", que abrange as emulações da anterior e mais algumas, incluindo as de 16bits.

Se alguém estiver interessado, posso gerar um tutorial ao pormenor; as informações estão um bocado dispersas e não são nada intuitivas.
« Última modificação: 30 de Abril de 2024, 15:11 por dropes »