Changing the Arduino Mega2560 Operating Voltage

I am working on a project that requires me to read low voltages as a 1. I looked at the spec sheet for the ATmega2560 here and found that the Operating Voltage can range from "1.8 to 5.5". However, the Mega has it set to 5V. Is there any way to change this operating voltage? Or, due to the Arduino software, is it set in place?

Check the part number on your board, and the datasheet for that part number. I believe you will find it can only operate at 4.5+ volts.

http://www.atmel.com/Images/doc2549.pdf

ATmega2560/ATmega2561: • 0 - 16MHz @ 4.5V - 5.5V

ATmega640V/ATmega1280V/ATmega1281V: • 0 - 4MHz @ 1.8V - 5.5V, 0 - 8MHz @ 2.7V - 5.5V

– ATmega2560V/ATmega2561V: • 0 - 2MHz @ 1.8V - 5.5V, 0 - 8MHz @ 2.7V - 5.5V

– ATmega640/ATmega1280/ATmega1281: • 0 - 8MHz @ 2.7V - 5.5V, 0 - 16MHz @ 4.5V - 5.5V

Hm, so it's possible that the one I'm looking at is just a mixed bag from the 2560 and the 2560V?

sleija: I am working on a project that requires me to read low voltages as a 1.

Can you explain more about the project? Maybe there is a more sensible method than reducing VCC.

It's a low voltage flexible chip. We're testing it's viability in a high radiation environment. It usually only runs at 1.2V, but we have been able to run it successfully at 3.3V on the inputs and VDD with it only getting a little warm. However, even though my input to the chip is around 3.3V, the chip output drops to around 2.5-3.0V (It doesn't help that are scope doesn't have very great resolution). We're using the Arduino Mega2560 for a the microcontroller and the Adafruit datalogger shield to capture data.The only solutions I can think of is increasing the Vdd to the chip or lowering the Vdd for the controller (which doesn't sound like it will work). I don't want to increase Vdd to the chip because I don't want it to overheat. We're going to be sending it up in a sounding rocket for NASA's RockSAT program. And, they are very strict on regulations for what goes up. If we have a burning chip, it's a no go for us to fly.

I might have given more information than needed, but there's no being too careful with NASA.

I might have given more information than needed, but there's no being too careful with NASA.

Well in my opinion you certainly haven't yet defined the signal's properties well enough that you wish to use with your mega board.

So, the signal your 'device or chip' that you wish to wire the arduino. How many signals connect to the arduino? Are the signal(s) digital or analog. If digital what is a valid low range and valid high range. If analog values what are there voltage range values?

Whatever the signal(s) voltage ranges are there is always a way to scale, amplify, or condition the signals to make them compatible with standard arduino pins. But there needs to be a better information provided. Normally a device datasheet is the best way to communicate to others what you have and what needs have to be met.

Lefty

Hm, it seems the issue didn't lie with the voltage at all. For some reason, bitRead() is not working how it's supposed to. It will write to the registers fine, but won't read from them. Using digitalRead(), it works just fine. I guess this is a different issue completely.

Thanks anyway for the input!

bitRead() is not working how it's supposed to. It will write to the registers fine, but won't read from them. Using digitalRead(), it works just fine.

bitRead() and digitalRead() are totally different. ;) digitalRead() is an I/O function, and it reads the state of a hardware pin. bitRead() reads one bit from a software variable/value.

sleija: For some reason, bitRead() is not working how it's supposed to. It will write to the registers fine, but won't read from them.

In addition to Doug's statements, bitRead doesn't [u]write[/u] to anything.

I know that. I was using it to read the port registers. We're aiming for speed since a radiation hit can be hard to detect without a fast clock speed. So, I was using bitRead() to read from the pins instead of digitalRead(). But, I have tried on multiple pins and bitRead() does not seem to be working. Or, I am not using it correctly. That is probably more likely.

EDIT: I just found what I was doing wrong. I was accidentally accessing the wrong register. I won't forget that again!