Go Down

Topic: Changing the Arduino Mega2560 Operating Voltage (Read 1 time) previous topic - next topic

sleija

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?

CrossRoads

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
Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

sleija

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

James C4S


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.
Capacitor Expert By Day, Enginerd by night.  ||  Personal Blog: www.baldengineer.com  || Electronics Tutorials for Beginners:  www.addohms.com

sleija

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.

retrolefty

#5
May 10, 2012, 06:18 am Last Edit: May 10, 2012, 06:20 am by retrolefty Reason: 1
Quote
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

sleija

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!

DVDdoug

Quote
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.

James C4S


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 write to anything.
Capacitor Expert By Day, Enginerd by night.  ||  Personal Blog: www.baldengineer.com  || Electronics Tutorials for Beginners:  www.addohms.com

sleija

#9
May 12, 2012, 12:14 am Last Edit: May 12, 2012, 12:21 am by sleija Reason: 1
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!

Go Up