Go Down

Topic: DAC-ADC (Read 3322 times) previous topic - next topic


I just got an Arduino Due, and in testing the ADC and DAC functionality came across an issue I couldn't resolve.

I tested the ADC/DAC by connecting A0 and DAC0 together. I then set the output of the DAC0 in the loop between the values of 0 and 4095. Then I read A0 with analogRead. A funny thing happens with the read though. While I set the DAC to go between 0-4095, the values I read with the ADC range from 663-3400 (approximately 600 bits off either rail). I have generated an image showing this (http://i50.tinypic.com/2hcp8wx.png).

I could map to the acquired range to the desired range, but this doesn't really fix the issue. I'm hoping someone can help me understand why this is happening and offer a solution to reading values between 0 and 4095. When I probe VCC and GND with the ADC I read 4080 and 0 respectively.

My code is below:
Code: [Select]
const uint32_t DACPIN = DAC0;
const uint32_t ADCPIN = A0;

void setup( void ) {
  // Set up serial port
  Serial.begin( 115200 );
  // Set up ADC/DAC
  analogWriteResolution( 12 );
  analogReadResolution( 12 );
  pinMode( DACPIN, OUTPUT ); 

// Main loop
uint16_t val = 0;
void loop( void ) {
  val = (val+1) & 0x0FFF;
  // Write and read the values
  analogWrite( DACPIN, val );
  delay( 1 );
  const int adcVal = analogRead( ADCPIN );
  delay( 1 );
  Serial.print( "[" );
  Serial.print( val );
  Serial.print( "," );
  Serial.print( adcVal );
  Serial.print( "],\n" );


   This is a feature of the SAMX chip, the DAC does not output from 0 to 3.3v, it does offer 12 bit resolution, but in a narrower analog range.

   There is a previous post somewhere which will give your the range - or you could calculate it from your analog in readings which offer 12 bit resolution over the full 0 to 3.3v range.

   Finally - look after your DAC, a few of use have killed ours by accidentally drawing too much current.

Duane B


Read this
then watch this



Feb 20, 2014, 10:32 pm Last Edit: Feb 20, 2014, 10:35 pm by sun152 Reason: 1

I followed your code. And my Arduino due ADC reading from DAC pin is noisy and the difference is large. Please see the pic.
Is this normal?

Thank you.

Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131