Toll-Free Customer Support 24/7

SPI Code

// DAC module connections
sbit Chip_Select at PORTB0_bit;
sbit Chip_Select_Direction at DDB0_bit;
// End DAC module connections

unsigned int value;

void InitMain() {
DDA0_bit = 0; // Set PA0 pin as input
DDA1_bit = 0; // Set PA1 pin as input
Chip_Select = 1; // Deselect DAC
Chip_Select_Direction = 1; // Set CS# pin as Output
SPI1_Init(); // Initialize SPI1 module
}

// DAC increments (0..4095) --> output voltage (0..Vref)
void DAC_Output(unsigned int valueDAC) {
char temp;

Chip_Select = 0; // Select DAC chip

// Send High Byte
temp = (valueDAC >> 8) & 0x0F; // Store valueDAC[11..8] to temp[3..0]
temp |= 0x30; // Define DAC setting, see MCP4921 datasheet
SPI1_Write(temp); // Send high byte via SPI

// Send Low Byte
temp = valueDAC; // Store valueDAC[7..0] to temp[7..0]
SPI1_Write(temp); // Send low byte via SPI

Chip_Select = 1; // Deselect DAC chip
}

void main() {

InitMain(); // Perform main initialization

value = 2048; // When program starts, DAC gives
// the output in the mid-range

while (1) { // Endless loop

if ((PINA0_bit) && (value < 4095)) { // If PA0 button is pressed
value++; // increment value
}
else {
if ((PINA1_bit) && (value > 0)) { // If PA1 button is pressed
value--; // decrement value
}
}

DAC_Output(value); // Send value to DAC chip
Delay_ms(1); // Slow down key repeat pace
}
}

Back to top