Cleaned it up here it is
#define RESET 8
#define RDY 9
#define MZ 5
#define BUSY 6
#define LDAC 7
#define MOSI 12
#define MISO 11
#define SS 10
#define SCLK 13
#define TCSB 4
#define PD 3
#define DGND 2
#include <SPI.h>
#include <avr/io.h>
byte SensorData;
String binnum;
byte wordnum;
byte address;
unsigned int Wdata;
String DataString;
uint32_t DACOut_val;
int a, n;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
void setup() {
Serial.begin(57600);
pinMode(RDY , INPUT);
pinMode(MISO , INPUT);
pinMode(MOSI , OUTPUT);
pinMode(RESET , OUTPUT);
pinMode(MZ , OUTPUT);
pinMode(BUSY , INPUT);
pinMode(LDAC , INPUT);
pinMode(TCSB , OUTPUT);
pinMode(PD , OUTPUT);
pinMode(SCLK , OUTPUT);
pinMode(SS , OUTPUT);
pinMode(DGND , OUTPUT);
digitalWrite(SS, HIGH);
digitalWrite(RESET, HIGH);
digitalWrite(SS, HIGH);
delay(10);
digitalWrite(SS, LOW);
SPI.begin();
SPI.beginTransaction(SPISettings(16000000, MSBFIRST, SPI_MODE1));
SPCR |= (1 << MSTR); // Set as Master
SPCR |= (1 << SPR0) | (1 << SPR1); // divided clock by 128
SPCR |= (1 << SPE); // Enable SPI
digitalWrite(RESET, HIGH); // Set high for normal operation
digitalWrite(MZ, LOW); // Set output Voltage to midscale
digitalWrite(TCSB, LOW); // Set low for Straight Binary format or high for Two's Complement
digitalWrite(PD, LOW); // Set low for normal operation or high for Power Down mode
digitalWrite(DGND, LOW); // Set low for digital ground
// General Configuration Write Register (0x4)
digitalWrite(SS, LOW); // Set Slave Select LOW to begin data transfer
SPI.transfer(0b01000111); // Write first data byte
SPI.transfer(0b10000000); // Write second data byte
SPI.transfer(0b00000000); // Write third data byte
digitalWrite(SS, HIGH); // Set Slave Select HIGH to end data transfer
// GAIN Write Register (0x3)
digitalWrite(SS, LOW); // Set Slave Select LOW to begin data transfer
SPI.transfer(0b00111111); // Write first data byte
SPI.transfer(0b11111111); // Write second data byte
SPI.transfer(0b11111100); // Write third data byte
digitalWrite(SS, HIGH); // Set Slave Select HIGH to end data transfer
// OFFSET Register Write in Two's Complement (0x2)
digitalWrite(SS, LOW); // Set Slave Select LOW to begin data transfer
SPI.transfer(0b00100000); // Write first data byte
SPI.transfer(0b00000000); // Write second data byte
SPI.transfer(0b00000000); // Write third data byte
digitalWrite(SS, HIGH); // Set Slave Select HIGH to end data transfer
// Straight Binary DIN Write Register (TCSB = 0) (0x1)
digitalWrite(SS, LOW); // Set Slave Select LOW to begin data transfer
SPI.transfer(0b00010000); // Write first data byte
SPI.transfer(0b00000000); // Write second data byte
SPI.transfer(0b00000000); // Write third data byte
digitalWrite(SS, HIGH); // Set Slave Select HIGH to end data transfer
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
void loop() {
while (1) {
address = (0b0001); // Write Register Address
address = address * 16;
SensorData = n;
n++;
if (n > 255) {
n = 0;
}
DACOut_val = map(SensorData, 0, 255, 0, 0x3FFFC); // Convert 8 bit to 18 bit
byte First4bits = DACOut_val & 245760; // Grab first 4 bits
byte Second8bits = DACOut_val & 16320; // Grab the following 8 bits
byte Third6bits = DACOut_val & 63; // Grab the last 6 bits
Serial.print("DAC Out "); Serial.print(DACOut_val, BIN);
Serial.print(",First4bits,"); Serial.print(First4bits, BIN);
Serial.print(",Second8bits,"); Serial.print(Second8bits, BIN);
Serial.print(",Third6bits,"); Serial.print(Third6bits, BIN);
Serial.print(",n,"); Serial.println(n);
byte FirstPart = highByte(DACOut_val >> 2);
byte nib = FirstPart; //the byte to split
byte niblow = nib & 15; //bitwise AND of nib and 0000 1111
byte nibhigh = nib & 240; //bitwise AND of nib and 1111 0000
byte FirstByte = (address | nibhigh);
byte SecondPart = highByte(DACOut_val >> 2);
byte ThirdPart = lowByte(DACOut_val);
byte Data1 = FirstByte;
byte Data2 = SecondPart;
byte Data3 = ThirdPart;
digitalWrite(SS, LOW); // Set Slave Select LOW to begin data transfer
SPI.transfer(Data1); // Write first data byte
SPI.transfer(Data2); // Write second data byte
SPI.transfer(Data3); // Write third data byte
digitalWrite(SS, HIGH); // Set Slave Select HIGH to end data transfer
}
}