5 volt logic to 1.8 volt?

Hello, I am going to be sending power to some contact points on a 3ds system of mine. The end goal is being able to control some buttons with an Arduino UNO.

Obviously, the UNO uses 5 volt logic. The 3ds, however, uses 1.8 volt logic.

Does anyone have any suggestions on the best way to safely send 1.8 volt logic from the UNO to the system?

My first thought was a voltage divider, but I'm unsure if this is stable and I'm concerned with heat?

Thank you!

(deleted)

Level shifter.
Typical modules are built using the BSS138 N-MOSFET (VGS(TH) max 1.5V so it should open enough for a 1.8V signal).

A voltage divider only works for the high to low voltage direction, and is one way.

wvmarle:
Level shifter.
Typical modules are built using the BSS138 N-MOSFET (VGS(TH) max 1.5V so it should open enough for a 1.8V signal).

A voltage divider only works for the high to low voltage direction, and is one way.

Thank you both for your responses and time, I appreciate it.

Since I’m only controlling if the power is on or off (to control the buttons, essentially) does it matter if it’s one way or not?

I was looking at
“4-channel I2C-safe Bi-directional Logic Level Converter - BSS138” if you Google it, do you think this would be sufficient?

This logic level converter is very handy, and what I use. Works in both directions.

Since I’m only controlling if the power is on or off (to control the buttons, essentially)

What buttons? How are they wired?

For accurate information, please describe your project accurately.

jremington:
This logic level converter is very handy, and what I use. Works in both directions.
What buttons? How are they wired?

For accurate information, please describe your project accurately.

I’m soldering directly onto the test pads of the 3ds. Running a wire directly from the test pads to a breadboard, is the end goal. Relatively simple logic. 0 voltage applied = button is pressed, 1.8 volts applied, unpressed.

Here’s a video of someone doing something similar, using an Arduino to control the buttons of the system. However, this version of the console uses 3.3 volt logic, rather than 1.8:

Thanks for the link, I’m going to take a look now :smiley:

Edit: That link looks perfect, and the guide looks awesome! Thank you!

If grounding the test pads on the device acts like "button pushed", then it is very likely that those test pads are pulled up to 1.8V internally.

In that case, you can use this open collector circuit (one for each button). Just about any NPN transistor will work and R1 could be higher, to 1Meg. There must be a common ground between the Arduino and the device.
button.png

button.png

That circuit should do indeed. When "pressed" there will be 0.3-0.5V over the transistor, normally enough for the LOW signal to be recognised. A MOSFET would be able to go even lower, pulling the test_pad very close to zero.

Do note it's inverting: a HIGH signal from the Arduino gives a LOW signal to Test_pad.

Thank you all for your help, very informative. I definitely have some NPN transistors laying around. Will check on a MOSFET. Will probably get started on the project within the next few days. Thank you again!

Start with an NPN. It most likely will do just fine. 2N2222 or BC547 or something like that, any small signal NPN will do. Just see what you have in your parts box.

Use a BSS138 if the NPN really doesn't go low enough (which would be quite surprising).

Okay, I think I got it.
I simulated it in tinkercad. As such, I threw in a power supply to simulate the 1.8v the 3ds button has when depressed, and breadboarded it to simulate how the button would react. Added in a multimeter to see what’s happening to the voltage of the button.

It goes from 0 to 1.8 depending on my code. I think this is done correctly, unless there’s any concerns/thoughts? Thank you to everyone for their help!

The minimum voltage over a BJT is about 0.3V. You don't get to see 0V output. Tinkercad is obviously using some idealised transistor.

Right, I assumed as such. I honestly think as long as it's below 1 volt it will be fine. It's most definitely in the "close enough" range. Thank you again.

From reading data sheets I don’t expect that will register as low.
Logic ICs and Arduino inputs typically say low level is <0.3Vcc and high level >0.5Vcc. Of course your specific input may be different, but this should be a good starting point for unknown logic signals. At 1.8V that would mean <0.56V for low, >0.9V for high.
Of course in your case the actual numbers are not known, but a typical VCE of 0.3V is quite certainly low (button pressed), while the 1V you mention can very well still be read as high (button not pressed).

Just wanted to write a quick update (sorry to bump this, I hope I'm not breaking any rules):

I did the soldering to the system last night, and bread-boarded everything up like in the simulation. Everything works as expected. I just wanted to say thank you again to everyone in this thread for their help. Was super helpful and I learned some things, which is always super valuable. Thank you again!

Glad to hear it worked, and thanks for reporting back!

Okay, ran into a small problem.

The d-pad and face buttons (A, B, X, Y) are fine, but I realized the logic is a little different for the analog stick.

This is measuring the test pad for the "x" coordinate of the analog stick (with my multi-meter): * When the stick is in the "dead zone" (aka not touched in any direction) it's at 1 volts When the stick is pressed right, it's at roughly 1.5 volts * When the stick is pressed left, it gets close to ground

The same goes for the y pad, but for up and down.

These two test pads are going to require some different hardware, yeah? Any harm in just applying voltage to them with a PWM pin?

These two test pads are going to require some different hardware, yeah?

To do what? The pads probably are not intended to be inputs, but rather as diagnostic outputs.

Any harm in just applying voltage to them with a PWM pin?

Yes, probably.

A PWM pin does not apply a defined voltage. It generates a series of rectangular pulses of variable duty cycle, with the peak voltage being about equal to the power supply voltage of the processor producing the PWM pulse train.

jremington: To do what? The pads probably are not intended to be inputs, but rather as diagnostic outputs. Yes, probably.

A PWM pin does not apply a defined voltage. It generates a series of rectangular pulses of variable duty cycle, with the peak voltage being about equal to the power supply voltage of the processor producing the PWM pulse train.

To be able to manipulate the voltage with the arduino, similar to what has been done with the directional buttons/face buttons. Just wasn't sure if there was some solution to be able to mimic that behavior with the arduino as well.

Right now, I'm able to control the d-pad and A, B, X and Y buttons by sending serial commands to the arduino. Ideally, I would like to be able to do the same with the analog stick of the system as well.

And gotcha, I won't try applying any voltages directly then.