You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
871 B
44 lines
871 B
/*
|
|
* dac101c085.c
|
|
*
|
|
* Created on: 21 Jul 2019
|
|
* Author: maximilian
|
|
*/
|
|
|
|
#include "dac101c085.h"
|
|
|
|
static uint8_t i2c_initialized = 0;
|
|
|
|
void init(void)
|
|
{
|
|
if (!i2c_initialized) {
|
|
i2cInit(I2Cx_DAC);
|
|
i2c_initialized = 1;
|
|
}
|
|
}
|
|
|
|
void setDAC(uint16_t new_value)
|
|
{
|
|
uint8_t ub = (new_value >> 6) & 0x0F;
|
|
uint8_t lb = (new_value << 2) & 0xFF;
|
|
init();
|
|
i2cStartTransmission(I2Cx_DAC, I2C_Direction_Transmitter, DAC_ADDR);
|
|
i2cWrite(I2Cx_DAC, &ub, 1, STANDARD_I2C_TIMEOUT);
|
|
i2cWrite(I2Cx_DAC, &lb, 1, STANDARD_I2C_TIMEOUT);
|
|
i2cEndTransmission(I2Cx_DAC);
|
|
}
|
|
|
|
uint16_t readDAC(void)
|
|
{
|
|
uint16_t dac_val = 1;
|
|
init();
|
|
i2cStartTransmission(I2Cx_DAC, I2C_Direction_Receiver, DAC_ADDR);
|
|
i2cAckOn(I2Cx_DAC);
|
|
dac_val = i2cRead(I2Cx_DAC);
|
|
i2cAckOff(I2Cx_DAC);
|
|
dac_val = (dac_val<<8);
|
|
dac_val |= i2cRead(I2Cx_DAC);
|
|
i2cEndTransmission(I2Cx_DAC);
|
|
return dac_val>>2;
|
|
}
|
|
|
|
|