Go Down

Topic: Arduino UNO: Using Analog Input as Digital In/Out (Read 16358 times) previous topic - next topic

ghiblipg

Any things I should watch out when using Analog pins as Digital In/Out.
I understand this is possible and allowed according to Arduino website learning.
However, is that any item I should watch out in my design or application?

fungus

You don't have to worry.

The only that's special about them is that the Arduino board puts an 'A' next to them on the PCB.

(And they can be routed to the ADC if you want...)
No, I don't answer questions sent in private messages (but I do accept thank-you notes...)

mmoscz

Analog Pins not have PULL-UP resistors, so, pinmode(A0, OUTPUT_PULLUP) not will have effect.
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

Krodal

Are you sure ?
In my opinion the analog inputs do also have the internal pull-up resistors.

retrolefty

#4
Feb 10, 2013, 06:23 pm Last Edit: Feb 10, 2013, 06:26 pm by retrolefty Reason: 1

Analog Pins not have PULL-UP resistors, so, pinmode(A0, OUTPUT_PULLUP) not will have effect.



That is not correct. Run the example sketch ReadAnalogVoltage sketch without anything wired to the A0 pin. Then add the mode and pull-up commands shown below in the setup function and run again. I think you will see the effect of the pull-up resistor being enabled.

And besides pinmode(A0, OUTPUT_PULLUP) would not be a valid command, pinMode(A0, INPUT_PULLUP) would be.

Lefty

Code: [Select]

/*
 ReadAnalogVoltage
 Reads an analog input on pin 0, converts it to voltage, and prints the result to the serial monitor.
 Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.

This example code is in the public domain.
*/

// the setup routine runs once when you press reset:
void setup() {
 // initialize serial communication at 9600 bits per second:
 Serial.begin(9600);
 pinMode(14,INPUT);   // set pin to input mode
 digitalWrite(14,HIGH); // enable internal pull-up resistor
  // or pinMode(A0, INPUT_PULLUP);
}

// the loop routine runs over and over again forever:
void loop() {
 // read the input on analog pin 0:
 int sensorValue = analogRead(A0);
 // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
 float voltage = sensorValue * (5.0 / 1023.0);
 // print out the value you read:
 Serial.println(voltage);
}

mmoscz


Are you sure ?
In my opinion the analog inputs do also have the internal pull-up resistors.


You are right, Analog Pins have PULL-UP resistors too.

from http://arduino.cc/en/Tutorial/DigitalPins

Quote

Digital Pins

The pins on the Arduino can be configured as either inputs or outputs. This document explains the functioning of the pins in those modes. While the title of this document refers to digital pins, it is important to note that vast majority of Arduino (Atmega) analog pins, may be configured, and used, in exactly the same manner as digital pins.


Sorry my mistake.
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

AlfaOmega

#6
May 10, 2018, 08:55 pm Last Edit: May 10, 2018, 09:01 pm by AlfaOmega
Yes, 'analog' pins can indeed be accessed as digital, just name them by their 'digital' designations.
Then they have to be declared as ordinary digital pins and on input INPUT_PULLUP does work.

const int buttonPin = 17;
pinMode(buttonPin, INPUT_PULLUP);

A0 => 14
A2 => 15
A3 => 16
and so on...

I was searching for this question myself for a while and it was not easy to find a definite answer.

DrAzzy

pinMode(A0,INPUT_PULLUP)
is perfectly fine too.

One.thing to watch out for - the atmega328p in its smd version as used on the nano/pro mini/etc has two analog only inputs, A6, and A7. These can only be used as analog inputs. Afaik, this is the only part in the whole avr product line with weird analog only pins
ATtiny core for 841+1634+828 and x313/x4/x5/x61/x7/x8 series Board Manager:
http://drazzy.com/package_drazzy.com_index.json
ATtiny breakouts (some assembled), mosfets and awesome prototyping board in my store http://tindie.com/stores/DrAzzy

Go Up