int R2R_pins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Pins connected to R-2R ladder
const float V_REF = 5.0; // Voltage reference for DAC
const int RESOLUTION = 256; // Number of output levels for DAC
// 2-9 are 0-7 pins, 10 is out
void setup() {
Serial.begin(9600); // Start serial communication
for (int i = 0; i < 8; i++) {
pinMode(R2R_pins[i], OUTPUT); // Set R-2R ladder pins as output
}
}
void loop() {
for (int i = 0; i < RESOLUTION; i++) {
setVoltage(i); // Set DAC output to current level
Serial.println(i * V_REF / (RESOLUTION - 1), 2);
// Print voltage to serial monitor
// Use serial monitor graph function to see the wave
delay(10); // Wait for some time before next level
}
}
void setVoltage(int level) {
for (int i = 0; i < 8; i++) {
if (level & (1 << i)) {
digitalWrite(R2R_pins[i], HIGH); // Set R-2R ladder bit to 1
} else {
digitalWrite(R2R_pins[i], LOW); // Set R-2R ladder bit to 0
}
}
}
// i*v_ref /resoulation - 1 == (0 to 255 iter)*5/(256-1)
// [,2 means round it to 2 decimal pont]