DFO mod (Dual Frequency Oscillator) for Neo Geo MVS (and more?)

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Max_Power wrote:

      Does anyone know if someone sells any more of these ?

      I was able to get one from a fellow member but I need 2 to 3 more.

      It made the output fps almost 60 and I was hearing a buzzing noise from my TV previously.

      i've just got one of these clock generators:

      configured it to output default 24mhz on clk0, 24.305909760 mhz on clk1:

      C Source Code

      1. #include <Wire.h>
      2. #include <Adafruit_SI5351.h>
      3. Adafruit_SI5351 clockgen = Adafruit_SI5351();
      4. /**************************************************************************/
      5. /*
      6. Arduino setup function (automatically called at startup)
      7. */
      8. /**************************************************************************/
      9. void setup(void)
      10. {
      11. Serial.begin(9600);
      12. Serial.println("Si5351 Clockgen Test"); Serial.println("");
      13. /* Initialise the sensor */
      14. if (clockgen.begin() != ERROR_NONE)
      15. {
      16. /* There was a problem detecting the IC ... check your connections */
      17. Serial.print("Ooops, no Si5351 detected ... Check your wiring or I2C ADDR!");
      18. while(1);
      19. }
      20. Serial.println("OK!");
      21. /* INTEGER ONLY MODE --> most accurate output */
      22. /* Setup PLLA to integer only mode @ 900MHz (must be 600..900MHz) */
      23. /* Set Multisynth 0 to 112.5MHz using integer only mode (div by 4/6/8) */
      24. /* 25MHz * 36 = 900 MHz, then 900 MHz / 8 = 112.5 MHz */
      25. Serial.println("Set PLLA to 768MHz");
      26. clockgen.setupPLL(SI5351_PLL_A, 30, 18, 25);
      27. Serial.println("Set Output #0 to 24MHz");
      28. clockgen.setupMultisynth(0, SI5351_PLL_A, 32, 0, 1);
      29. clockgen.setupRdiv(0, SI5351_R_DIV_1);
      30. /* FRACTIONAL MODE --> More flexible but introduce clock jitter */
      31. /* Setup PLLB to fractional mode @616.66667MHz (XTAL * 24 + 2/3) */
      32. /* Setup Multisynth 1 to 13.55311MHz (PLLB/45.5) */
      33. Serial.println("Set PLLB to 729.1772MHz");
      34. clockgen.setupPLL(SI5351_PLL_B, 29, 10443, 62500);
      35. Serial.println("Set Output #1 to 24.305906MHz");
      36. clockgen.setupMultisynth(1, SI5351_PLL_B, 30, 0, 1);
      37. clockgen.setupRdiv(1, SI5351_R_DIV_1);
      38. /* Multisynth 2 is not yet used and won't be enabled, but can be */
      39. /* Use PLLB @ 616.66667MHz, then divide by 900 -> 685.185 KHz */
      40. /* then divide by 64 for 10.706 KHz */
      41. /* configured using either PLL in either integer or fractional mode */
      42. Serial.println("Set Output #2 to 10.706 KHz");
      43. clockgen.setupMultisynth(2, SI5351_PLL_B, 900, 0, 1);
      44. clockgen.setupRdiv(2, SI5351_R_DIV_64);
      45. /* Enable the clocks */
      46. clockgen.enableOutputs(true);
      47. }
      48. /**************************************************************************/
      49. /*
      50. Arduino loop function, called once 'setup' is complete (your own code
      51. should go here)
      52. */
      53. /**************************************************************************/
      54. void loop(void)
      55. {
      56. }
      Display All

      will test it when i get home.
    • someitalian123 wrote:

      nam9 wrote:

      mmmonkey wrote:

      I see it's possible to use a Raspberry Pi as a programmer so will try that first.
      Interesting! Link?I have a Hex file I built a while back.. It may work, but I didn't test it as the DFO i sourced came pre-programmed...

      Has anyone been able to test this hex file to verify functionality?
      I am now able to verify that this hex file does indeed work. I programmed a 5v DFO purchased from otakus-store.net using a Raspberry Pi Zero W. If anyone is planning to program using a raspberry pi just be sure to uncomment the appropriate lines in the /boot/config.txt file first.
    • I did the mod on my consolized MVS MV-1C a few days ago. I had the DFO boards for a long time, but have only now been able to install them.

      The MV-1C uses 3.3V for the crystal oscillators. I don't know how it is with other MVS boards, but with the MV-1C I measured 3.3V and that is also the information from mirco. So I took the 3.3V version of the DFO.
      Two clock frequencies are programmed on the DFO.
      If you pull S0 to low (or don't connect at all, it pulls itself to low), you get the modified frequency with 24.3059MHz, which results in a refresh rate of 59.94Hz.
      If, for whatever reason, you want to have the original clock frequency again, you can pull S0 to high (possibly with a switch who needs it (aight, hight means + 3.3V not + 5V !!)). Then you get the original 24.00MHz and the original refresh rate of 59.18Hz.

      I have attached the file that I flashed onto the DFO here. It has been tested and works. I also have a picture of my installation. You get the 3.3V directly from the voltage converter nearby.
      • 20191215_194512.jpg

        282.43 kB, 807×605, viewed 53 times
      • 20191215_194639.jpg

        172.69 kB, 807×605, viewed 18 times
    • So I saw someone using a 4pin Crystal which gives a 59.98 signal instead of the dual. Any cons to doing this? Is 59.98 less accurate than 59.94? What about the MV-1C? The person claims the crystal needs +5 but someone else on here says the 1c uses 3.3? Would I just be better off using the DFO if I'm never going to use PAL spec and only through an OSSC?

      The post was edited 1 time, last by FakeNoose ().

    • @FakeNoose the reason for altering the refresh rate is to increase compatibility with modern displays that aren’t as forgiving as CRTs.
      59.1856Hz is just too far off spec for some TVs to sync with (there are other issues as well, but ‘no sync’ is quite a showstopper.
      59.94Hz is NTSC standard for reasons (Wikipedia).
      59.94->59.98->60Hz shouldn’t make a difference.

      As for crystals, you could measure the input voltage to check...
    • New

      nam9 wrote:

      Nice find @lufeig Let us know how you get on!
      after some months I decided to investigate more on the adafruit clock generator.

      I found out that it does not work standalone, it always needs a controller. duh!

      so I put an arduino nano that I had lying around and the clock generator on a breadboard, and ta-da: bingo!

      first question that comes to mind: why all that instead of a simple and elegant dfo?

      because living in brazil, it would be too expensive and too slow to import a dfo. producing one here would be very expensive as well.

      not to mention the extra fun in researching, learning and making it happen.

      link to the wiring

      Display Spoiler
      #include <Wire.h>
      #include <Adafruit_SI5351.h>

      Adafruit_SI5351 clockgen = Adafruit_SI5351();

      Arduino setup function (automatically called at startup)
      void setup(void)
      Serial.println("Si5351 Clockgen Test"); Serial.println("");
      /* Initialise the sensor */
      if (clockgen.begin() != ERROR_NONE)
      /* There was a problem detecting the IC ... check your connections */
      Serial.print("Ooops, no Si5351 detected ... Check your wiring or I2C ADDR!");

      /* FRACTIONAL MODE --> More flexible but introduce clock jitter */
      /* Setup PLLA to fractional mode @729.177MHz (XTAL * 29 + 4177/25000) */
      /* Setup Multisynth 1 to 24.3059MHz (PLLA/30) */
      Serial.println("Set PLLA to 729.177MHz");
      clockgen.setupPLL(SI5351_PLL_A, 29, 4177, 25000);
      Serial.println("Set Output #1 to 24.3059MHz");
      clockgen.setupMultisynth(1, SI5351_PLL_A, 30, 0, 1);
      /* Enable the clocks */

      Arduino loop function, called once 'setup' is complete (your own code
      should go here)
      void loop(void)