DAC8811: DAC8811EVM - DAC8811 Transition when changing DAC

Part Number: DAC8811

Tool/software:

Hello everyone,

I am using a DAC8811 on a DAC8811EVM board, I could not get the USB - FTDI to do SPI correctly so am now using an Arduino for MISO, CLK & CS bit bashing the control lines.
I am trying to use DAC8811 in an MDAC configuration, VREF is supplied from a signal generator 10kHz and I adjust the amplitude by setting the DAC value.

The issue I am seeing is when programming the DAC the transition is not as expected, I was expecting:
"On the 16th rising edge of the serial clock, the last data bit is clocked in and the programmed function is executed."

I am continuously switching between DAC codes 0100 0000 (64) to 1111 1111 (255)

Yellow = CS
Green = VDAC Output (DAC8811EVM J1) raw output from DAC before filter
Red = CLK

Am I doing something wrong or is the correct operation of the DAC8811?


I am using digital WriteFast.h for bit-bashing faster // github.com/.../digitalWriteFast

#include <TCA9555.h>
#include <digitalWriteFast.h>
//#include <TimerOne.h>

//    FILE: TCA9555_digitalWrite.ino
//  AUTHOR: Rob Tillaart
// PURPOSE: test TCA9555 library
//     URL: https://github.com/RobTillaart/TCA9555

// Speed #include <digitalWriteFast.h>
// For a 16 MHz Uno digitalWrite() is speed up from 5.8 µs to 125 ns,
// able to generate a 4 MHz signal instead of 86 kHz. More info in: /NOTES/NOTES.md
// https://github.com/ArminJo/digitalWriteFast

//#include "TCA9555.h"
const byte numChars = 32;
char receivedChars[numChars];   // an array to store the received data
boolean newData = false;

TCA9555 TCA(0x20); //Hex address


void setup()
{
pinMode(0, OUTPUT); // CLK
pinMode(1, OUTPUT); // MOSI
pinMode(2, OUTPUT); // CS

delay(1000); //seems if not here the Serial doesnt get init and misses outputs to serial.
Serial.begin(115200);
}



void loop()
{
// Lets Bash!
  //Serial.print("Lets Bash!");
//int array[] = {0,0,0,0,0,0,0,0};

  delay(2);

  digitalWriteFast(1,0); //delayMicroseconds(5);; // Data Low
  digitalWriteFast(2,1); delayMicroseconds(5);; // CS High
  digitalWriteFast(2,0); delayMicroseconds(1);; // CS Low

    /*for (int i = 0; i < 16; i++) // 16 Clocks
    {
    //digitalWriteFast(array[i],1);       // Pattern 
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 
    //Serial.print(array[i]);
    }*/
    // 0100 0000
    digitalWriteFast(1,0); //delayNanoseconds(1);; // Data Low1
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High2
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    
    digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High3
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    
    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High4
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High5
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High6
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 
    
    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High7
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 
    
    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High8
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 


    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High1
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 


    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data Low
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    
    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High3
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    
    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High4
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High5
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High6
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 
    
    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High7
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 
    
    //digitalWriteFast(1,0); //delayNanoseconds(1);; // Data High8
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

  digitalWriteFast(2,1); //delayMicroseconds(5);; // CS High
  delay(2);

  digitalWriteFast(1,0); //delayMicroseconds(5);; // Data Low

  digitalWriteFast(2,0); //delayMicroseconds(5);; // CS Low

    /*for (int i = 0; i < 16; i++) // 16 Clocks
    {
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 
    //Serial.print(".");
    }*/
    // 1111 1111
    digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High1
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 


    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High2
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    
    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High3
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    
    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High4
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High5
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High6
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 
    
    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High7
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 
    
    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High8
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 


    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High1
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 


    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High2
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    
    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High3
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    
    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High4
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High5
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High6
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 
    
    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High7
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 
    
    //digitalWriteFast(1,1); //delayNanoseconds(1);; // Data High8
    digitalWriteFast(0,1); //delayMicroseconds(1);; 
    digitalWriteFast(0,0); //delayMicroseconds(1);; 

  digitalWriteFast(1,0); //delayMicroseconds(5);; // Data Low
  digitalWriteFast(2,1); //delayMicroseconds(5);; // CS High


}



// This is all Junk - Please Ignore!
  //Serial.begin(9600);
  //Serial.println(__FILE__); //This line prints the name of the current source file to the Serial Monitor. The __FILE__ macro is a predefined macro in C/C++ that contains the name of the file being compiled. This can be useful for debugging or tracking which file the code is coming from.
  //Serial.print("DAC8811EVM Control: ");  // Print Text
  //Serial.println(TCA9555_LIB_VERSION);    // Print Version
  //Serial.println();                       // New Line

  //Wire.begin(); // This command initializes the I2C (Inter-Integrated Circuit) bus, which allows the Arduino to communicate with I2C devices. It prepares the Wire library to send and receive data over this bus.
  //TCA.begin(); //This command initializes a TCA9548A I2C multiplexer, which allows you to connect multiple I2C devices that share the same address. The TCA object (typically an instance of a library for the TCA9548A) is set up so you can control which I2C channel is active.

  //Wire.setClock(50000); // This command sets the I2C bus clock speed to 50 kHz. The default I2C speed is typically 100 kHz, but some devices may require a lower speed for reliable communication. This command ensures that the I2C bus operates at the specified frequency.

  // Overall, this block of code initializes all 16 pins of the multiplexer as output pins and sets them to a low state. This is commonly done to ensure that the pins are in a known state before further operations.
  //delay(1000);

  
  //Serial.println("Set pinMode1 OUTPUT");
  //for (int i = 0; i < 16; i++)
  //{
  //  TCA.pinMode1(i, OUTPUT); // Inside the loop, this command sets the mode of each pin on the TCA9548A to OUTPUT. This means that the specified pin will be used to send signals rather than receive them.
  //  TCA.write1(i, LOW); // This command writes a LOW signal (0 volts) to the corresponding pin on the TCA9548A, effectively turning it off. Each pin will be set to a low state during each iteration of the loop.
  //}



  //int gain[31];
  //gain[0] = 0;    // Not used
  //gain[1] = 63488;    // Gain 1
  //gain[2] = 16;
  //gain[3] = 8;
  //gain[4] = 24;
  //gain[5] = 4;
  //gain[6] = 20;
  //gain[7] = 12;
  //gain[8] = 28;
  //gain[9] = 2;
  //gain[10] = 18;
  //gain[11] = 10;
  //gain[12] = 26;
  //gain[13] = 6;
  //gain[14] = 22;
  //gain[15] = 14; // 15
  //gain[16] = 1;  // 15
  //gain[17] = 30; // 16 Dont use
  //gain[18] = 17; // 16
  //gain[19] = 9;  // 17
  //gain[20] = 25; // 18
  //gain[21] = 5;  // 19 
  //gain[22] = 21; // 20
  //gain[23] = 13;
  //gain[24] = 29;
  //gain[25] = 3;
  //gain[26] = 19;
  //gain[27] = 11;
  //gain[28] = 27;
  //gain[29] = 7;
  //gain[30] = 23;

//int d = 10000;

//while(1)
//{


  //Serial.println("Gain 1 : all 0s");
  //TCA.write1(0, 0); 
  //TCA.write1(1, 0); 
  //TCA.write1(2, 0); 
  //TCA.write1(3, 0); 
  //TCA.write1(4, 0); 
  //TCA.write1(5, 0); 
  //TCA.write1(6, 0); 
  //TCA.write1(7, 0); 
  //TCA.write1(8, 0); 
  //TCA.write1(9, 0); 
  //TCA.write1(10, 0); 
  //TCA.write1(11, 0); 
  //TCA.write1(12, 0); 
  //TCA.write1(13, 0); 
  //TCA.write1(14, 0); 
  //TCA.write1(15, 0); 
  //TCA.write1(16, 0); 
  //wait();//delay(d);
/*
  Serial.println("Gain 1.5 - 100k");
  TCA.write1(0, 1); //100k
  TCA.write1(1, 0); 
  TCA.write1(2, 0); 
  TCA.write1(3, 0); 
  TCA.write1(4, 0);

  wait();//delay(d);

  Serial.println("Gain 2 - 50k");
  TCA.write1(0, 0); 
  TCA.write1(1, 1); //50k
  TCA.write1(2, 0); 
  TCA.write1(3, 0); 
  TCA.write1(4, 0); 
  wait();//delay(d);

  Serial.println("Gain 2.5 : 100||50");
  TCA.write1(0, 1); //100k
  TCA.write1(1, 1); //50k
  TCA.write1(2, 0); 
  TCA.write1(3, 0); 
  TCA.write1(4, 0); 
  wait();//delay(d);

  Serial.println("Gain 3.5 : 20k");
  TCA.write1(0, 0); 
  TCA.write1(1, 0); 
  TCA.write1(2, 1); //20k
  TCA.write1(3, 0); 
  TCA.write1(4, 0); 
  wait();//delay(d); 
  
  Serial.println("Gain 4.0 : 100||20");
  TCA.write1(0, 1); //100k
  TCA.write1(1, 0); 
  TCA.write1(2, 1); //20k
  TCA.write1(3, 0); 
  TCA.write1(4, 0); 
  wait();//delay(d); 

  Serial.println("Gain 4.5 : 50||20");
  TCA.write1(0, 0); 
  TCA.write1(1, 1); //50k
  TCA.write1(2, 1); //20k
  TCA.write1(3, 0); 
  TCA.write1(4, 0); 
  wait();//delay(d); 

  Serial.println("Gain 5.0 : 100||50||20");
  TCA.write1(0, 1); 
  TCA.write1(1, 1); 
  TCA.write1(2, 1); //20k
  TCA.write1(3, 0); 
  TCA.write1(4, 0); 
  wait();//delay(d); 

  Serial.println("Gain 6 : 10k");
  TCA.write1(0, 0); 
  TCA.write1(1, 0);
  TCA.write1(2, 0); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 0); 
  wait();//delay(d);

  Serial.println("Gain 6.5");
  TCA.write1(0, 1); 
  TCA.write1(1, 0);
  TCA.write1(2, 0); 
  TCA.write1(3, 1); //12.5k 
  TCA.write1(4, 0); 
  wait();//delay(d);

  Serial.println("Gain 7.0");
  TCA.write1(0, 0); 
  TCA.write1(1, 1);
  TCA.write1(2, 0); 
  TCA.write1(3, 1); //12.5k 
  TCA.write1(4, 0); 
  wait();//delay(d);
  
  Serial.println("Gain 7.5");
  TCA.write1(0, 1); 
  TCA.write1(1, 1);
  TCA.write1(2, 0); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 0); 
  wait();//delay(d);
  
  Serial.println("Gain 8.5");
  TCA.write1(0, 0); 
  TCA.write1(1, 0);
  TCA.write1(2, 1); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 0); 
  wait();//delay(d);

  Serial.println("Gain 9.0");
  TCA.write1(0, 1); 
  TCA.write1(1, 0);
  TCA.write1(2, 1); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 0); 
  wait();//delay(d);
  
  Serial.println("Gain 9.5");
  TCA.write1(0, 0); 
  TCA.write1(1, 1);
  TCA.write1(2, 1); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 0); 
  wait();//delay(d);

  Serial.println("Gain 10");
  TCA.write1(0, 1); 
  TCA.write1(1, 1);
  TCA.write1(2, 1); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 0); 
  wait();//delay(d);

  Serial.println("Gain 11");
  TCA.write1(0, 0); //100k
  TCA.write1(1, 0); //50k
  TCA.write1(2, 0); //20k
  TCA.write1(3, 0); //10k 
  TCA.write1(4, 1); //5k
  wait();//delay(d);

  Serial.println("Gain 11.5");
  TCA.write1(0, 1); //100k
  TCA.write1(1, 0); //50k
  TCA.write1(2, 0); //20k
  TCA.write1(3, 0); //10k 
  TCA.write1(4, 1); //5k
  wait();//delay(d);

  Serial.println("Gain 12");
  TCA.write1(0, 0); //100k
  TCA.write1(1, 1); //50k
  TCA.write1(2, 0); //20k
  TCA.write1(3, 0); //10k 
  TCA.write1(4, 1); //5k
  wait();//delay(d);

  Serial.println("Gain 12.5");
  TCA.write1(0, 1); //100k
  TCA.write1(1, 1); //50k
  TCA.write1(2, 0); //20k
  TCA.write1(3, 0); //10k 
  TCA.write1(4, 1); //5k
  wait();//delay(d);

  Serial.println("Gain 13.5");
  TCA.write1(0, 0); //100k
  TCA.write1(1, 0); //50k
  TCA.write1(2, 1); //20k
  TCA.write1(3, 0); //10k 
  TCA.write1(4, 1); //5k
  wait();//delay(d);

  Serial.println("Gain 14");
  TCA.write1(0, 1); //100k
  TCA.write1(1, 0); //50k
  TCA.write1(2, 1); //20k
  TCA.write1(3, 0); //10k 
  TCA.write1(4, 1); //5k
  wait();//delay(d);

  Serial.println("Gain 14.5");
  TCA.write1(0, 0); //100k
  TCA.write1(1, 1); //50k
  TCA.write1(2, 1); //20k
  TCA.write1(3, 0); //10k 
  TCA.write1(4, 1); //5k
  wait();//delay(d);

  Serial.println("Gain 15");
  TCA.write1(0, 1); //100k
  TCA.write1(1, 1); //50k
  TCA.write1(2, 1); //20k
  TCA.write1(3, 0); //10k 
  TCA.write1(4, 1); //5k
  wait();//delay(d);

  Serial.println("Gain 16");
  TCA.write1(0, 0); //100k
  TCA.write1(1, 0); //50k
  TCA.write1(2, 0); //20k
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 1); //5k
  wait();//delay(d);

  Serial.println("Gain 16.5");
  TCA.write1(0, 0); //100k
  TCA.write1(1, 0); //50k
  TCA.write1(2, 0); //20k
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 1); //5k
  wait();//delay(d);

  Serial.println("Gain 17");
  TCA.write1(0, 0); 
  TCA.write1(1, 1);
  TCA.write1(2, 0); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 1); 
  wait();//delay(d);

  Serial.println("Gain 17.5");
  TCA.write1(0, 1); 
  TCA.write1(1, 1);
  TCA.write1(2, 0); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 1); 
  wait();//delay(d);

  Serial.println("Gain 17.5");
  TCA.write1(0, 1); 
  TCA.write1(1, 1);
  TCA.write1(2, 0); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 1); 
  wait();//delay(d);
  
  Serial.println("Gain 18.5");
  TCA.write1(0, 1); 
  TCA.write1(1, 1);
  TCA.write1(2, 0); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 1); 
  wait();//delay(d);

  Serial.println("Gain 19");
  TCA.write1(0, 0); 
  TCA.write1(1, 0);
  TCA.write1(2, 1); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 1); 
  wait();//delay(d);

  Serial.println("Gain 19.5");
  TCA.write1(0, 0); 
  TCA.write1(1, 1);
  TCA.write1(2, 1); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 1); 
  wait();//delay(d);

  Serial.println("Gain 20");
  TCA.write1(0, 1); 
  TCA.write1(1, 1);
  TCA.write1(2, 1); 
  TCA.write1(3, 1); //10k 
  TCA.write1(4, 1); 
  wait();//delay(d);
*/
  
  /*Serial.println("Bit 5+9=1");
  TCA.write1(5, 1); 
  TCA.write1(6, 0);
  TCA.write1(7, 0); 
  TCA.write1(8, 0); //10k 
  TCA.write1(9, 1); 
  wait();//delay(d);


  Serial.println("Bit 6+9=1");
  TCA.write1(5, 0); 
  TCA.write1(6, 1);
  TCA.write1(7, 0); 
  TCA.write1(8, 0); //10k 
  TCA.write1(9, 0); 
  wait();//delay(d);

  Serial.println("Bit 7+9=1");
  TCA.write1(5, 0); 
  TCA.write1(6, 0);
  TCA.write1(7, 1); 
  TCA.write1(8, 0); //10k 
  TCA.write1(9, 1); 
  wait();//delay(d);

  Serial.println("Bit 8+9=1");
  TCA.write1(5, 0); 
  TCA.write1(6, 0);
  TCA.write1(7, 0); 
  TCA.write1(8, 1); //10k 
  TCA.write1(9, 1); 
  wait();//delay(d);

  Serial.println("Bit 9=1");
  TCA.write1(5, 0); 
  TCA.write1(6, 0);
  TCA.write1(7, 0); 
  TCA.write1(8, 0); //10k 
  TCA.write1(9, 1); 
  wait();//delay(d);

  Serial.println("Bit 5to9=1");
  TCA.write1(5, 1); 
  TCA.write1(6, 1);
  TCA.write1(7, 1); 
  TCA.write1(8, 1); //10k 
  TCA.write1(9, 1); 
  wait();//delay(d);


  }
}

void wait()
{
    static byte ndx = 0;
    char endMarker = '\n';
    char rc;
    
  while (Serial.available() == 0)
  {
    //nop
  }
Serial.read(); 

}

/*
  Serial.println("TEST write1(0)");
  for (int i = 0; i < 16; i++)
  {
    TCA.write1(0, i % 2);  //  alternating HIGH/LOW
    Serial.print(i % 2);    
    Serial.print('\t');     // Tab
    delay(250);
  }
  Serial.println();
  Serial.println();


  Serial.println("TEST write1(piin)");
  for (int pin = 0; pin < 16; pin++)
  {
    TCA.write1(pin, 1 - pin % 2);  //  alternating HIGH/LOW
    Serial.print(1 - pin % 2);
    Serial.print('\t');
  }
  Serial.println();
  Serial.println();


  Serial.println("TEST read back");
  for (int pin = 0; pin < 16; pin++)
  {
    int val = TCA.read1(pin);
    Serial.print(val);
    Serial.print('\t');
  }
  Serial.println();
  Serial.println("\ndone...");
}
*/




//  -- END OF FILE --