Skip to main content
As.1
Visitor II
July 13, 2020
Question

How to write to the 12 data bits in mcp4821 DAC's register using 8bit data size Spi ?.

  • July 13, 2020
  • 3 replies
  • 1093 views

I'm using stm32 MCU to interface with mcp4821 D A C . The MCU's spi data size is set to 8 bit mode.The D A C has a 16 bit register and (Starting from 0) bit 12 to 15 are configuration bits and the remaining bits are data bits . My problem is ...how should I enter the full scale value by using 8 bit mode spi and how should I separate the data and store it in the first 8 bit register and the other in bit 9 to 12 . I'm new to MCUs and I'm just getting started with programming ... so could anyone please help me with this problem.

This topic has been closed for replies.

3 replies

Nikita91
Lead II
July 13, 2020

As the DAC a use a 16 bits register you should use a 16 bits word (uint16_t).

Put the DAC value in the lower bits and the command in the upper bits.

Then send the high byte then the low byte.

Something like this pseudo code:

uint16_t word ;
 
word = 0x800u ; // The dac value, mid range
word |= 0x3000u ; // Add the command bits
spiCs (0) ; // Set SPI CS low
spiSendByte (word >> 8) ; // Send high byte
spiSendByte (word & 0x00FFu) ; // Send low byte
spiCs (1) ; // Set SPI CS high

Tesla DeLorean
Guru
July 13, 2020

Which STM32, the range is quite extensive, with assorted functionality.

Perhaps as a pair of 6-bit transactions?​

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
S.Ma
Principal
July 13, 2020

maybe read 16 bit modifyand write. this way you know what is happening.