Pocket Arcade Machine

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

(TBD)

Referències

Desenvolupament

Bateria, alimentació del conjunt

Adafruit PowerBoost 500 + Charger:

He comprat aquesta, però faltava comprar la bateria: Lithium Ion Polymer Battery - 3.7v 2500mAh

He comprat aquesta bateria a Aliexpress: 3.7V lithium polymer battery 457477 mobile power Tablet PC MID Dipper 2500MAH

Una altra possibilitat: Adafruit Mini Lipo w/Mini-B USB Jack - USB LiIon/LiPoly charger - v

En aquest video (https://www.youtube.com/watch?v=gzWDwpo_hFU) es veu com una bateria LiPo de 3.7V pot alimentar la RPi (sense necessitat del boost), però l'inconvenient és que en el pin de 3.3V només hi ha 2.6V.

He comprat el Adafruit PowerBoost 500 + Charger (https://learn.adafruit.com/adafruit-powerboost-500-plus-charger). Però a part d'això amb la bateria també venia una plaqueta que s'assembla al de la foto:

S'ha de soldar la bateria (Lithium Ion Polymer Battery - 3.7v 2500mAh) als terminals B- i B+. Amb el microUSB connecto el carregador del mòbil, i un LED fa pampallugues. Quan deixi de fer pampallugues és que la bateria està carregada. En els dos USB puc treure els 5V, i la diferència és que per un d'ells puc treure 1A, i per l'altra 2A (segons es dedueix de la foto, que tampoc és el model que jo tinc. De fet, el model que jo tinc no el trobo per enlloc).

hackejar el SNES controller

Audio: amplificador i altaveus

Mini Metal Speaker w/ Wires - 8 ohm 1W

Thin Plastic Speaker w/Wires - 8 ohm 0.25W

Adafruit Mono 2.5W Class D Audio Amplifier - PAM8302

Stereo 3.7W Class D Audio Amplifier - MAX98306

Utiltizar la PiTFT

Ha de ser possible, doncs algú altre ho ha fet: (a més, funciona a una velocitat correcta).

Jo vaig fer una prova de la PiTFT i SDL amb fbcp i framebuffer mirroring. La idea seria la mateixa.

Funciona, ara bé, va lent. Per tant el tema serà en treballar en la direcció de què no vagi lent. (també seria bo provar altres emuladors a part del mednafen per llençar la Gameboy).

PiTFT: Aconseguir la velocitat adequada amb els emuladors

L'emulador de la Gameboy (madnafen) funciona, però va lent.

script llencar_gameboy.sh

#!/bin/sh
fbcp &
...comanda que llença la rom de la gameboy...
killall fbcp

Un petit exemple d'enviar dades al framebuffer1:

$ cat /dev/urandom >/dev/fb1
Idees
=========
PiTFT amb els emuladors funciona, però va lent. Es tracta de millorar la rapidesa.

0.
in /boot/config.txt

disable_overscan=1
framebuffer_width=320
framebuffer_height=240

And, very important, do NOT plug in an HDMI monitor! The monitor will tell via EDID that it can't display such a low resolution, and the pi will set a resolution supported by the monitor. If no HDMI is connected, the output will go to CVBS, and the resolution can be set to whatever you want.

No millora res. La idea és ficar la meva pantalla primària a la mateixa resolució que la PiTFT, i d'aquesta manera ens estalviaríem càlculs.

També podria ser que el millor fos 240x320, doncs de fet la pantalla es rota 90 graus.

1. Es pot canviar el fps amb què treballa fbcp
https://github.com/notro/fbtft/wiki/Framebuffer-use

 Load drivers and fbcp

sudo modprobe fbtft dma
sudo modprobe fbtft_device name=tinylcd35 rotate=90 speed=48000000 fps=50

# Start fb copying process in the background
fbcp &

syslog output

$ tail /var/log/messages
Dec 15 17:38:07 raspberrypi fbcp[4836]: Primary display is 720 x 480
Dec 15 17:38:07 raspberrypi fbcp[4836]: Second display is 480 x 320 16bps

==========
2. 
*http://www.reddit.com/r/raspberry_pi/comments/2qt74s/just_got_a_pitft_for_my_model_b_retropie/
I found the part of the main.c file in the main fbcp folder before doing mkdir build and cmake .. . If you scroll down to find 25 * 1000 in brackets it modifies the rate at which the framebuffer copying occurs. It did change the framerate when I modified it, though it made it MORE choppy because I increased it. Also, when looking at videos of fbcp running RetroPie on other 2.something inch screens, it seems to run without noticeable lag. Why is that, do you think? https://www.youtube.com/watch?v=9SX3ekMBESs

EDIT: Check out the tutorial I made with full installation instructions (except how to run fbcp on startup and get controls running on PiGrrl, you'll have to do that yourself, sorry): https://forums.adafruit.com/viewtopic.php?f=45&t=57534&p=342515#p342515

Jo he fet la prova substituint el 25*1000 per 10*1000. I no es veu cap millora. Ara bé, potser el que havia de fer és augmentar el 25?

D'altra banda, com es demostra en el video, la cosa ha de funcionar.
==========
3. 
*http://forum.openframeworks.cc/t/pitft-adafruit-tft-touchscreen/15107/4

Si no es vol utilitzar fbcp, la idea seria integrar el codi que es comenta en el link dins el nostre codi, de manera que es copia el framebuffer primari (el que representa la pantalla principal) en el secundari (la pitft). Sembla ser que integrar aquest codi faria el codi molt més ràpid). Si sóc capaça d'integrar aquest codi en el meu frontend i en algun emulador, estaria molt bé.

També es comenta en el link anterior si és possible que el PiTFT sigui el framebuffer primari, i sembla ser que no es pot perquè PiTFT no està connectat a la GPU com ho fan hdmi i RCA. And openGL works on the GPU.

im not an expert but any screen that uses the gpio to connect with the rpi its going to use the framebuffer way. Only a hdmi or composite its going to work as you expected
============
4. http://www.raspberrypi.org/forums/viewtopic.php?f=67&t=58952
Aquí també hi ha un codi que es pot provar si es vol fer una aplicació que funcioni a la PiTFT i que no depengui de fbpc. Seria un bon exemple de programació per fer un exemple gràfic amb la PiTFT. 

Més explicacions:

1. Why does the PITFT not support OpenGL?

Because it's not directly interfaced to the video circuitry; it's a dumb framebuffer connected via the SPI bus on the GPIO header, and only runs so fast. GL requires a high speed interface between the GPU and display, which we don't have here.

If you're patient though, at some point the Raspberry Pi Foundation will release their own display that connects via the LVDS header. In theory anyway, they've talked about it. Perhaps if it's well-documented others can offer displays in other sizes and form-factors, but I have no idea if that aspect will be open and I'm really talking out my rear at this point.

És a dir, que la PiTFT funciona pel protocol SPI (i en teoria només fa servir els pins GPIO associats a aquest protocol). Per tant, no té res a veure amb la GPU ni amb Open GL.

Another alternative is to use either the HDMI or composite interfaces to connect a small external display, driven by the video circuitry and thus GL compatible. Before the PiTFT I'd seen some other emulation projects using such displays...the wiring isn't as tidy and the composite displays won't be razor-sharp due to interpolation...but there you go.

Aquí ens recorden la diferència entre hdmi (digital) i RCA (analògi). Un display analògic sempre es veurà més borrós degut a la interpolació.

Also also, there are utilities that continually copy the main framebuffer (under GPU control) to the secondary buffer used by the PiTFT. The performance is really quite underwhelming though, and this is why we didn't use that approach for the Cupcade project.

Conclusió

Utilitzar fbcp introdueix sens dubte un delay, i per tant no és la millor opció (que és bàsicament la única en el cas d'utilitzar la PiTFT). Per a l'emulador de fednafen (gameboy) no he aconseguit una velocitat adequada. (compilant des de les fonts no he aconseguit fer-ho funcionar encara). Ara bé, sí que he aconseguit jugar a les roms de mame4all amb una velocatat adequada. 1942 i pacplus funcionen correctament. galaga es veu lent però és jugable. shinobi semblava jugable, però els salts són lents. En definitiva, es podria tenir una màquina basada en pitft amb bona part de les roms de mame4all. El script que he llençat per fer proves:

#!/bin/bash

fbcp &
sleep 1
/home/pi/mame4all/mame pacplus
killall fbcp

Alternatives a PiTFT

Compte! Un dels requisits és que la pantalla ha de funcionar a 5V. Ara bé, sembla ser que les pantalles TFT dels retrovisors del cotxe, que estan pensades per operar a 12V, es poden alimentar a 5V tal com s'explica aquí:

Estic cercant una pantalla ben petita. La solució fàcil és utiltizar pantalles amb entrada hdmi o RCA, que n'hi ha. Per ex:

la pantalla que es fa servir a http://www.xodustech.com/projects/raspberry-pi-gameboy-pocket:

Les solucions més econòmiques són les pantalles de retrovisor de cotxe amb entrada RCA (analògic, no dónen tan bona resolució com hdmi, però suficient.)

Finalment he comprat la següent pantalla TFT de 3,5:

En aquest post i video s'explica com fer el modding per connectar-ho a 5V:

La tècnica consisteix bàsicament en fer un pont del regulador de 12V-5V, que és el xip de 8 potes. Amb un multímetre s'ha d'identificar la pota per on surten els 5V.

Evidentment, també s'ha de tocar l'arxiu config.txt de la RPi per tal d'indicar que el senyal d'entrada és RCA (analògic, no pas HDMI).+

El xip que fa de regulador de tensió és el XL1509 voltage regulator:

el pin1 és l'entrada de 12V, el pin2 és la sortida de 5V, i els pins de l'altre costat (5,6,7,8) són tots ells el GND.

En el pdf es veu l'aplicació típica del circuit, i efectivament en la placa que tinc es pot identificar els components bàsics:

  • XL1509.png

creat per Joan Quintana Compte, febrer 2015