DAC

This module loads the DAC (Digital Analog Converter) interface. A digital to analog converter is a module to convert digital values into analog ones.

While builtin analogWrite simulates an analog value through the PWM peripheral, DAC output is a pure analog one. This means higher accuracy, specially with high speed signals.

Example:

import streams
import adc # for analogRead

import dac


def readInput():
    while True:
        print("reading A1: ",analogRead(A1))
        sleep(500)

streams.serial()
pinMode(A1,INPUT)
# read input in a separate thread
thread(readInput)

my_dac = dac.DAC(D8.DAC)
my_dac.start()

my_dac.write([100,200,900,800],1000,MILLIS,circular=True)

The DAC class

class DAC(pin)

Creates a DAC instance on pin pin (look at board pinmap to see which pins are enabled for using the DAC peripheral).

start()

DAC is started. It is necessary to start the driver before writing any value.

write(data, timestep, timeunit, circular=False)

data is output on selected pin.

data parameter can be:

  • a single integer value:

    my_dac.write(666)
    
  • a list of values to be output every timestep *timeunit*econds until the end of the list is reached and last value is kept on output:

    my_dac.write([555,666,777],500,MILLIS)
    # one sample every 500 MILLISeconds
    
  • a list of values to be output every timestep *timeunit*econds, restarting from the beginning as soon as the end of the list is reached, until write method is called again:

    my_dac.write([555,666,777],500,MILLIS,circular=True)
    
stop()

dac is stopped and low level configuration disabled.

lock()

Locks the driver. It is useful when the same dac object is used by multiple threads to avoid interferences.

unlock()

Unlocks the driver. It is useful when the same dac object is used by multiple threads to avoid interferences.

remap(values, lowflex=660, highflex=3415)

Some DAC chips have a limited voltage range (i.e. Sam3X by Atmel maps from ~3.3/6 V to ~3.3*(5/6) V) and remap given output values according to their operative ranges. This helper function allows the user to obtain the voltage value he would expect from a proportional DAC.

Given a value in values list, DAC output will respect the following formula:

output_voltage = board_voltage * (value/4096)

Each value in the list must be an integer between lowflex and highflex in order to avoid a TypeError exception.

lowflex and highflex default values are set to the correct values for Sam3X mcu.