Go Down

Topic: DAC-ADC (Read 3882 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