SNES gamepad does not work using ControlBlock

Home Forums RetroPie Project GPIO Adapter, ControlBlock etc. SNES gamepad does not work using ControlBlock

RetroPie has a new website and forum. Please visit https://retropie.org.uk/ for the new site. The new forum is located at https://retropie.org.uk/forum/. This forum is left here as a read-only archive.

This topic contains 55 replies, has 10 voices, and was last updated by Profile photo of petrockblog petrockblog 1 year, 8 months ago.

Viewing 21 posts - 36 through 56 (of 56 total)
  • Author
    Posts
  • #97863
    Profile photo of petrockblog
    petrockblog
    Keymaster

    disregard my last two posts. reinstalled retropie and now it works fine! ha, what the hell.

    I am glad to hear that!
    Could you briefly describe what you did when you “reinstalled retropie”? I think that might help people here.

    #97869
    Profile photo of rich
    rich
    Participant

    Well, I’ve actually worked out what the issue was.

    Overclocking.

    My Pi 2 was overclocked to the Pi2 setting, which is what it should run at as default to take advantage of the higher specs. However, the controlblock does not function at all on this mode. If I revert back to the lowest option for overclocking (pi 1 spec), it works.

    Now the issue is that for some reason the controlblock works fine under that spec – but that entirely defeats the purpose of me buying the pi2 in the first place. SNES hardly runs at all and most games are unplayable without that extra speed.

    Now, as you increase the overclocking bit by bit it’s clear what the issue is – the controlblock seems to go into overdrive and registers random button presses. By the point of getting even close to the stock pi2 spec, the controlblock is inputting every button at complete random, choosing random games and rendering it unusable. By the point you get to pi2 spec, it’s basically got every input as ON.

    So that’s why. And that’s why I didn’t get it resolved until I restarted retropie from scratch – because of the overclocking settings, which didn’t even occur to me as a possible issue.

    So my question is this: is there any chance of a resolution for this? It’s a damn shame having a controlblock that I bought for my Pi2 that doesn’t work at all at any spec over than the lowest setting. I’ve had to revert back to using Bluetooth controllers which operate perfectly even at pi2 spec overclock.

    #97882
    Profile photo of petrockblog
    petrockblog
    Keymaster

    Thanks for that hint!

    I can reproduce this issue – interestingly, this “only” occurs with “snes” as “gamepadtype”. Gamepadtype “arcade”, e.g., works with the Pi2 overclocking settings. This seems to be a timing issue within the ControlBlock driver and I will try to find a fix for that!

    #97884
    Profile photo of rich
    rich
    Participant

    That would be great

    It would fix my problem as well as the others in this thread as its clearly the cause.

    Keep us updated as to when the update is out! Thanks!

    #97897
    Profile photo of guspaz
    guspaz
    Participant

    I was having the same problem (no matter what I did, NES controller didn’t respond). I saw the posts here today, switched the overclock from “pi2” (which is a mild overclock for the pi2, not the native clockspeed of the pi2) to “none” (which makes it run much slower), and the controller started working.

    Looking forward to the fix so that the driver works independent of clockspeed!

    #97934
    Profile photo of petrockblog
    petrockblog
    Keymaster

    All right – I have just pushed a fix for the issue regarding the broken polling of SNES controllers with “RPi2” overclocking settings: https://github.com/petrockblog/ControlBlockService/commit/05c2e34984a36c2855a571e6570cf48523d9e7be

    Polling of the SNES controllers works for all official (=raspi-config) overclocking modes now!

    To update the ControlBlock driver you need to follow these steps:

    cd ControlBlockService  # change to repository folder
    git pull  # update repository to latest version
    sudo make uninstallservice  # uninstall ControlBlock service
    sudo make uninstall  # uninstall ControlBlock binaries
    make  # re-compile ControlBlock driver
    sudo make install  # install ControlBlock driver
    sudo nano /etc/controlblockservice.cfg  # enable gamepad type "snes" with the text editor
    sudo make installservice  # install ControlBlock service
    #97935
    Profile photo of rich
    rich
    Participant

    I can confirm it now works. Awesome!

    Only issue is there is quite noticeable input lag – this is not present on the lower clocked settings or when using other controllers (bluetooth or usb).

    Any ideas?

    edit: hard gpu sync seems to have fixed it in FCEUMM at least!

    Fixes it in other emulators too, SNES runs beautifully.thanks!

    • This reply was modified 2 years ago by Profile photo of rich rich.
    • This reply was modified 2 years ago by Profile photo of rich rich.
    • This reply was modified 2 years ago by Profile photo of rich rich.
    #97951
    Profile photo of NoFlo
    NoFlo
    Participant

    As mentioned before, overclocking is not the problem in my (and OP’s?) case.
    Even with the new version, the controller is not working (showing “off” when disconnected, “on” when connected) on both controller ports. If set to arcade controller, all buttons are working correctly when connected to GND.
    Any other ideas?

    #98437
    Profile photo of rumbaldo
    rumbaldo
    Participant

    I’m struggling too

    Pi Model: 2 B
    RetroPie Version Used: 3.0.0 Beta 2
    Built From: SD Image
    USB Devices connected: Keyboard

    Guide used: http://blog.petrockblock.com/2014/12/29/controlblock-power-switch-and-io-for-the-raspberry-pi/#Using_SNES_Controllers_with_the_ControlBlock

    built the controlblock last night. Plugged it all in. emulationstation saying there are 2 controllers connected but the snes controllers are not responding at all.

    Tried to follow the steps provided for dotarj

    Here is a pic of my setup
    controlblock 2 snes

    i2c was next

    went into the ControlBlockService folder

    sudo make uninstallservice

    pi@retropie ~/ControlBlockService $ sudo i2cdetect -y 0
    Error: Could not open file <code>/dev/i2c-0' or</code>/dev/i2c/0': No such file or directory
    pi@retropie ~/ControlBlockService $ sudo i2cdetect -y 1
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          03 -- -- -- -- -- -- -- -- -- -- -- -- 
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    70: -- -- -- -- -- -- -- --  

    I tried a fresh image still having exactly the same issue.

    Do i need to swap GND and VCC?

    • This reply was modified 2 years ago by Profile photo of rumbaldo rumbaldo.
    • This reply was modified 2 years ago by Profile photo of rumbaldo rumbaldo.
    #98452
    Profile photo of petrockblog
    petrockblog
    Keymaster

    @rumbaldo: Looking at your wiring everything seems to be ok. GND and VCC do not need to be swapped. To be sure, I have updated the ControlBlock article and added a diagram that shows the pin out with which I have successfully connected the original SNES controller front with the ControlBlock. You can find the diagram at http://blog.petrockblock.com/2014/12/29/controlblock-power-switch-and-io-for-the-raspberry-pi/#Using_SNES_Controllers_with_the_ControlBlock.

    Maybe you have a short somewhere?

    Also it is important that only a single service uses the I2C port. Also, there were issues with overclocking. I have tested the bug fix as thoroughly as possible, but maybe there is still something wrong. You could try and set the overclocking setting back to “normal”. Also, you could check the functionality of the GPIO expanders by configuring the gamepad type as “arcade”, manually pulling each pin to GND and using the tool “jstest” to see the status changes of the virtual gamepads.

    #98507
    Profile photo of rich
    rich
    Participant

    Just another note: I just wired up another controlblock from scratch. Works fine.

    #99116
    Profile photo of sudobarn
    sudobarn
    Participant

    Hi guys,

    been having similar problems.

    At first I thought it was the overclocking, but nope, even at none there was no playing.

    Thought it was my wiring. Nope all fine. Did Jtest and that was all good.

    Then Florian put out the fix for overclocking. Still no joy.

    Figured therefore, it must be my soldering work, and that I had in some way (undetectable to me) damaged the board. So I bought a new one that comes pre-soldered as one unit. It arrived today.

    Wired the new one up, did a fresh install of V3.0 Beta2 for rpi2. Went through the steps to install the service, and… Still doesn’t work…(!!) The switch works, as does the LED. When the system is booted, two gamepads are recognised, but each gamepad will only detect one button press before it says “already allocated”.

    The only thing I can think now is that it might be my editing of the cfg file. Could anyone possibly throw up a moron-proof, keystroke-by-keystroke instruction?

    The ridiculous bit is that the machine I am building isn’t even for me, but for my best friend, as a surprise wedding present (on the 27th June).

    Any help would be awesome and hugely appreciated.

    SudoBarn

    #99538
    Profile photo of sudobarn
    sudobarn
    Participant

    Hi guys,

    still having trouble. Have done clean install of v2.6 and 3.0Beta2 for Rpi2.

    Running Rpi2 Model B

    USB devices: Keyboard

    Overclocking; None (just to be sure)

    Also, I have two control blocks. (1 I soldered myself, and another that came pre-soldered, just in case I messed up the soldering)

    With both 2.6 and 3.0 Beta 2, I do a clean install. Starup. Exit Emulation Station. Raspi-config. Expand File System. Restart.

    Then I go through the steps as per:

    http://blog.petrockblock.com/2014/12/29/controlblock-power-switch-and-io-for-the-raspberry-pi/

    Restart system.

    I then edit controlblockconfig.cfg in /etc/ (using “sudo nano /etc/controlblockconfig.cfg”)

    I edit as follows:
    ———————————-

    {
    (TAB) “input” : {
    (TAB)(TAB) “gamepadtype” : “snes”
    (TAB) },
    (TAB) “powerswitch” : {
    (TAB)(TAB) “activated” : true
    (TAB) }

    }

    ———————————–

    In both versions, the switch and LED work, but when starting up emulation station, at the opening controller configuration screen, it will either acknowledge the controlblockservice with 2 controllers, but when holding a button, it will only accept one button input, before saying already assigned.

    With both versions, I then follow the update fix instructions as above.

    Interestingly, when I get to the “sudo make uninstall” phase, an error pops up in the script:

    pi@retropie ~/ControlBlockService $ sudo make uninstall
    cd src/controlblock && make uninstall
    make[1]: Entering directory ‘/home/pi/ControlBlockService/src/controlblock’
    rm /usr/local/bin/../../build/controlblock
    rm: cannot remove ‘/usr/local/bin/../../build/controlblock’ : No such file or directory
    Makefile:51: recipe for target ‘uninstall’ failed
    make[1]: [uninstall] Error 1 (ignored)
    rm //etc/controlblockconfig.cfg
    make[1]: Leaving directory ‘home/pi/ControlBlockService/src/controlblock’

    I continue nonetheless:
    make
    sudo make install
    sudo nano /etc/controlblockservice.cfg

    **This brings up a blank file, which I fill in as above. I also do:

    sudo nano /etc/controlblockconfig.cfg

    and fill in as above (just to be sure) (is it /etc/controlblockservice.cfg or controlblockconfig.cfg or both?)

    Then I do “sudo make installservice”.

    I switch the machine off. (Power Switch still working). Switch it on again, but when I try to input, it recognises control block service, but will again only allow me 1 input before it’s ‘already taken’.

    I’m pretty sure my wiring is correct (see pictures). And there aren’t any detectable shorts.

    I’ve previously polled the ports using jstest and that all seemed fine.

    Anyone have any ideas?

    Attachments:
    #101478
    Profile photo of dotarj
    dotarj
    Participant

    Sorry for the delayed response. I’ve had some other things on my mind lately…

    I finally took the time to test the ControlBlock with the new ControlBlockService and it all seems to work now!

    Thanks for the fix Florian!

    #101518
    Profile photo of petrockblog
    petrockblog
    Keymaster

    Sorry for the delayed response. I’ve had some other things on my mind lately…

    I finally took the time to test the ControlBlock with the new ControlBlockService and it all seems to work now!

    Thanks for the fix Florian!

    Glad to hear that!

    #101537
    Profile photo of sudobarn
    sudobarn
    Participant

    Hi guys,

    Now works like a dream. Couple of tips –

    When I was having my troubles, I had two different pairs of third party replacement controllers for SNES, and was using ports I had ‘harvested’ from a ‘replacement controller ports circuit board’.

    In this respect I was a little unlucky, since all the afforementioned were ‘dodgy’. I replaced the SNES ports and acquired origional, official snes controllers, and presto! It works!!!

    So anyone having similar problems should probably do similarly. Well done Florian! 🙂

    #101606
    Profile photo of petrockblog
    petrockblog
    Keymaster

    @sudobarn: Also to you – very glad to hear that!

    #104753
    Profile photo of NoFlo
    NoFlo
    Participant

    Unfortunately, I am still unable to use my controllers. I have no idea what else I can try to solve the problem. In jstest all of my controller buttons are shown “off” with no controller connected and stay “on” after connecting. To isolate the problem I swapped the following parts:
    – power supply
    – raspberry pi (two different Pi 2 B)
    – controlblock (got a second one, pre-soldered, just in case…)
    – wiring of the controller
    – snes controller
    – micro sd card
    – installaton of retropie (both stable and beta release)
    – overclocking

    Any ideas? Anything I forgot to check? I am clueless… 🙁

    #105492
    Profile photo of chad
    chad
    Participant

    Hello,
    Hopefully you’re still monitoring this thread. After hooking up my new controlblock, my snes controllers weren’t being recognized, so I’ve made it to this thread to try and debug the problem. When I reached the step below, my output remained all dashes. What should my next step(s) be?

    Sorry, I did not think about this before. You need to disable the controlblockservice before this test. You can simply do this with these commands run from within the ControlBlockService folder:
    sudo make uninstallservice
    Does the output of sudo i2cdetect -y 1 look different then? If the GPIO expanders are recognized correctly, we will see a line
    20: 20 -- -- -- -- -- -- 27

    #105506
    Profile photo of chad
    chad
    Participant

    I found the problem. I had ordered a pre-soldered board to save some time (lol, THAT didn’t work!). Where one of the 8 pin terminal blocks was soldered, too much solder had been placed shorting out two pins from the header. I removed the excess solder, cleaned up the board, and now everything is working.

    #105742
    Profile photo of petrockblog
    petrockblog
    Keymaster

    omg, glad to hear that you figured it out!

    I will check the solder process to try to enhance it in the future.

Viewing 21 posts - 36 through 56 (of 56 total)

Forums are currently read only - please visit the new RetroPie forums at https://retropie.org.uk/forums/

Skip to toolbar