I am working on a project where I take over the control of a Nintendo 3DS Touch Screen. The touch screen is a 4 pin system.

I have it all wired up and working, however I cannot get the screen to simulate the click anywhere outside of the 1,1 coordinate.

I am using an Arduino Mega2560 which does NOT have a real DAC. I did try adding a simple low pass filter to the circuit but saw no difference. (low pass is 0.1uf capacitor with 100 ohm resistor).

I am using 2 PWM pins for X+ and Y+ input and 1 Analog pin for sensing Y+.

The documentation here: (https://github.com/dekuNukem/3xtDS/blob/master/overview.pdf) Code here: (https://github.com/dekuNukem/3xtDS/blob/master/tp3ds.cpp)

Page 7 of the documentation shows how the timing works. In the example they are using a Teensy 3.1 with real DAC "since the touch screen requires really fast response".

  • Is my issue not having a real DAC?
  • Maybe my low pass filter is wrong?

enter image description here

  • \$\begingroup\$ Circuit diagrams for your implementation? \$\endgroup\$ Sep 29, 2015 at 16:08
  • \$\begingroup\$ A 100 Ohm resistor on a 100nF capacitor as low pass? That is, in the scheme of AVR-PWM, not at all very low. 100 * 1 * 10^-7 = 1*10^-5 s => 100kHz, based on RC-time. Other than that, see @ScottSeidman 's request. \$\endgroup\$
    – Asmyldof
    Sep 29, 2015 at 16:10
  • \$\begingroup\$ Yes the issue is the touchscreen Y does require a DAC not a slow PWM, look at the scope shot in the article. Problem with filtering PWM is the settling time will be too slow to drive the touchscreen controller. \$\endgroup\$
    – MarkU
    Sep 29, 2015 at 19:04
  • \$\begingroup\$ I am new to electronics so please excuse my schematic as I am not yet able to draw diagrams with Eagle. Link to image below: drive.google.com/file/d/0B40GI33FTALtU3R2YXFqVkd1SWM/… Please let me know if this makes it clearer. \$\endgroup\$ Sep 29, 2015 at 19:18
  • \$\begingroup\$ If DAC is the issue, would this solve it? sparkfun.com/products/12918 \$\endgroup\$ Sep 29, 2015 at 22:29

1 Answer 1


It seems you have two problems. The first is that the low pass filter. The 1k resistor is out of place. The micro is able to charge the capacitor though the 100 ohm but when micro swings low it just discharges it though the 100 ohm faster then through the 1k to the level shifter.

The second problem is the level shifter. Unless it is a special linear kind they normally only do digital outputs. The low pass filter on the input to a digital level shifter is pointless and can cause problems with the level shifter. Try placing the low pass filter between the screen and level shifter.

  • \$\begingroup\$ The level shifter I am using is this one from Sparkfun. Based on the TXB0104. Is this still an issue? It seems to work fine for all the other things wired into it. (The 3ds analog joystick). sparkfun.com/products/11771 \$\endgroup\$ Sep 29, 2015 at 22:14
  • \$\begingroup\$ @MichaelVo The level shifter may definitely be a problem. With the bidirectional kind that you are using it's very hard to tell. What complicates the problem even more is that this level shifter is specifically a weak driver. \$\endgroup\$
    – vini_i
    Sep 30, 2015 at 10:00
  • \$\begingroup\$ I will try using a direct connection without a filter or level shifter and see what happens! \$\endgroup\$ Sep 30, 2015 at 18:09
  • \$\begingroup\$ Trying without the filter and without the level shifter made no difference. I think I need a true DAC. \$\endgroup\$ Oct 9, 2015 at 2:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.