Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Super SNES Deluxe
#1
OBS! Jag ansvarar EJ för någon typ av olycka eller skada som mina kretsar kan orsaka.

Då Okita frågade om mitt SNES insåg jag att jag inte har dokumenterat särskilt mycket av mitt SNES-bygge. Det är lika bra att ta sig i kragen och göra det innan jag glömt hur jag gjorde.
Jag kommer inte gå igenom placering av kort och kontakter i SNES-lådan för det kan bero på hur långa kablar man har och liknande.

Det som behövs är:
1x Raspberry Pi 2 eller 3 (helst 3)
1x SD-Kort 8GB+
1x 5V telefonladdare 2,5A+ eller annan stabil strömkälla med samma specifikationer
1x Kylfläns passande till Raspberry Pi (30x25mm är max som får plats)
1x Fläkt till kylflänsen (jag använde en 40x40mm)
1x IEC 60320-1 C8 sockel
   
1x IEC 60320-1 C7 till stickplugskabel
   
1x HDMI hona-hane kabel. Kort modell (Jag använde den som följde med Chromecast 1)

Powerstyrningskort:
2x 10k ohm motstånd
2x 6k8 ohm motstånd
1x 3k ohm motstånd
1x 470 ohm motstånd (endast vid användande av EE2-3NU)
2x diod typ 1n4148
1x småsignals npn-transistor typ rätt oviktigt
1x relä, jag använde NEC EE2-3NU
1x någon typ av prototypkretskort

470 ohm motståndet måste kanske bytas om man använder en annan typ av relä eller helt tas bort om man hittar ett 5V relä.

Resetknapp:
1x ~10k ohm motstånd

Egentligen inte så viktigt vilken storlek men 5k-50k nånstans brukar bli bra.

Handkontroller:
2x 18k ohm motstånd
2x 10k ohm motstånd
1x 220 ohm motstånd

Övrigt: 
Smältlim (köp en hink med smältlim! Tongue)
Kablar att löda ihop grejjerna med
Lego Duplo 

Här kan man höfta så det heter duga och ta det man har tillgång till. Legobiten svetsade jag fast i SNES-skalet med aceton bakom C8 sockeln så att legobiten håller emot när C7 kabeln trycks in.
Reply
#2
Powerstyrningskort:


OBS! Jag ansvarar EJ för någon typ av olycka eller skada som mina kretsar kan orsaka.


Då Raspberry Pi inte kan slå av sin egen ström och inte tycker om att få strömmen bruten under drift så behöver vi göra något åt det för att undvika ett korrupt sd-kort.
Efter lite pråbning med oscilloskopet hittade jag en pinne på raspin som går från hög till låg när kerneln stängs av. Denna kan vi använda som signal för att bryta strömmen. Det är pin 8 som sitter på GPIO-adressen 14.
Men vi behöver också säga till raspin när den skall börja stänga ner så då kom jag på den här lösningen.
   
Ignorera resetswitchen så länge.

Händelsekedjan ser ut så här:
Pow_switch, som är snesets huvudströmbrytare, slås på och den driver npn-transistorn som i sin tur drar igång reläet.
Sys_on skickar ut en signal till pinne 29 på raspin som läses av ett skript som kollar att switchen är på.
Inv_shutdown går till pinne 8 på raspin och pinne 8 är den som alltid är på så länge kerneln är igång. 
När vi slår av pow_switch kommer sys_on att gå låg och säga till skriptet att den skall starta shutdown.
Under denna tiden är inv_shutdown fortfarande hög och fortsätter dra transistorn tills kerneln är nerstängd då den går låg och slutar dra transistorn. Reläet stängs då av och vi har gjort en snäll shutdown.

Så alltså om någon av pow_switch och inv_shutdown är hög kommer strömmen till sneset vara på.

Dioden vid pow_switch hindrar inv_shutdown från att hålla sys_on hög.
Dioden vid reläet skyddar kretsen från backspänningar högre än ~5,7V som spolen i reläet kan generera när den slås av.

Reläet jag använde låg på 3V spolspänning vilket inte är idealt men jag hade inget annat. Då var jag tvungen att sätta ett 470 ohm motstånd i serie för att dra ner spänningen från 5V till 3V. 

OBS andra 3V-reläer kan behöva ett annat motstånd då spolresistansen kan variera mellan modeller.
 
Jag rekommenderar ett 5V relä för att slippa detta. Om ni har ett relä som kräver 5V spolspänning så byt ut 470 ohms motståndet till en ledare.

Detta kort kopplade jag ihop med en surfplatteladdare som jag slaktade. 
Pow_out lödde jag till raspin med lite grövre kablar för usbkablar är alldeles för veka och ger mycket spänningsfall.
   
(Detta är en raspi2 men det är lika på raspi3)
+5V till PP2 och jord till PP5. Det går att mata direkt till +5V i pinlisten men då hoppar man förbi alla säkerhetsfunktioner och säkringar så det rekommenderas inte.

Lösningen vart så här där det lilla kortet till höger är mitt och det till vänster är ur surfplatteladdaren.
   
220V till surfplatteladdaren togs från C8 sockeln som jag fäste i baksidan av sneset.

OBS! Jag ansvarar EJ för någon typ av olycka eller skada som mina kretsar kan orsaka.
Reply
#3
Resetknapp:


Resetknappen på sneset valde jag att använda för att avsluta spel. Skall det vara retro så måste man resa sig upp och gå fram till konsollen när det skall bytas spel annars blir det bara en till emulatorlåda i mängden anser jag.

   

Resetswitchen är inte så spännande utan har bara en pulldown resistor. Denna kan ha i princip vilket värde som helst men jag håller mig inom 5k-50k. 
3.3V och jord tas ur pinlisten på raspin.

Signalen skickas till pinne 11 på raspin som övervakas av samma skript som övervakar powerdelen.
När pinne 11 går hög, alltså när knappen trycks in, så skickas ett escape-tecken till emulatorn (eller det program som är i förgrunden) vilket avslutar spelet som körs och man kommer tillbaka till spelväljaren.

   
Reply
#4
Handkontroller:

Då jag inte vill göra åverkan på handkontrollerna så valde jag att modifiera ingångskortet i sneset i stället.

Då sneskontrollerna går på 5V men raspin bara kan ta 3,3V så finns det 2 val.

1: Köra på 3,3V och kolla om de funkar ändå. Många handkontrollers klarar detta alldeles utmärkt. Det är bara de äldre modellerna som kan ha svårt med detta.

2: Köra kontrollerna på 5V och använda spänningsdelare på utsignalen för att komma ner till 3.3V. Detta var metoden jag använde. Mest för att då blir sneset kompatibelt med alla handkontrollers.

Så här ser pinouten på ingångarna ut:

   

+5V, CLOCK, STROBE och GND delas mellan båda ingångarna, det är endast DATA som behöver vara separat.

Hur man löser detta får man bestämma själv. Antingen löder man loss kontakterna från ingångskortet och sätter kablar direkt på kontakterna eller så löder man in sig direkt på ingångskortet. 
Fördelen med att löda in sig på kortet är att man då även kan använda den röda orginal-power-LEDen.

Orginal-LEDen behöver ett 220 ohms motstånd för att överleva 5V.

   

(inom parantes den pinne jag använder)
  • +5V valfri pinne med 5V (pin2)
  • CLOCK GPIO10 pin19
  • LATCH GPIO11 pin23
  • DATA1 GPIO4 pin7
  • DATA2 GPIO7 pin26
  • GND valfri pinne med GND (pin6)

Löd även bort alla komponenter som satt på kortet innan för att undvika konstigheter.

Så här såg min lösning ut, inte snygg men funktionsduglig.
   
220 ohms motståndet lödde jag in längst ner i vänstra hörnet på baksidan där det fanns en plats för motstånd till LEDen, precis till vänster om den röda kabeln.
Reply
#5
Övrigt:

Så här såg baksidan ut på mitt bygge. Med HDMI- porten till vänster, C8-kontakten till höger och även en USB-kontakt som jag drog ut från raspin med en kort USB-förlängningskabel.
   

Insidan ser ut så här.
   

Nedan syns kopplingen till reset-knappen. Jag bakade in pulldownresistorn i smältlimmet. Jag fick även kapa av lite av plasten runt cartridgeslotten för annars gick lådan inte att stänga med raspin i. Ejectknappen satte jag fast med tejp för att den inte har fjädringsmekanismen kvar som tidigare höll den uppe.
   

Observera den fina blåa legobiten och den enorma mängden smältlim som håller fast de externa kontakterna. C8 kontakten lossnade flera gånger innan jag fick idén med den fastsvetsade legobiten.
Kylflänsen fäste jag med en gnutta snabblim i hörnen på processorn och en liten klick kylpasta i mitten. Fläkten fäste jag som sig bör med smältlim. Tongue
   
Observera att fläkten och kylflänsen verkligen behövs, den hjälper till mycket på raspi2 och är ett KRAV på raspi 3. Raspi 3's processor har en extremt liten kiselbricka, typ 2x1mm, så den har fruktansvärt svårt att föra bort värmen. Utan kylfläns kommer det att bli ostabilt och raspin kommer att klocka ner sig. Se hotspoten på processorkapseln på bilden nedan.
   
Reply
#6
Mjukvaran:
Mjukvaran som används är Retropie. Använd standardinstallationen och följ guiderna på siten.
Jag kommer inte gå jättedjupt in på mjukvaran för förutom det nedan så är installationen rätt vanilla och bättre hjälp kan fås i retropieforumet/wikin.

För att få kontrollerna att fungera skall kernelmodulen gamecon_gpio_rpi installeras. Det görs genom retropies setup-skript.
Efter den är installerad skall 2 filer editeras eller läggas till om de inte finns. Se till att raderna nedan finns i filerna.

/etc/modules
gamecon_gpio_rpi

/etc/modprobe.d/gamecon.conf
options gamecon_gpio_rpi map=0,0,1,1,0,0

Detta konfigurerar modulen till att funka med kontrollerna.

För powerstyrningen behöver vi skriptet som jag nämner tidigare.

.zip   powerandreset.zip (Size: 748 bytes / Downloads: 383)

Det använder Python så det kan behöva installeras om det inte redan finns.
Detta skript behöver startas från boot om powerswitchen skall fungera som den skall så starta den med crontab eller ett initscript.

Efter det skall det bara vara o kasta in rommar och köra!
Hittar ni något som är fel, inte funkar eller är otydligt så hojjta till!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)