mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 18:17:59 +02:00
Dac (#67)
* dac WIP * dacs WIP * DACs are working with names * namechanges of vrfsh->vshaper, vrfshnpol->vshaperneg * pattern for MY3, configure MAC for MY3
This commit is contained in:

committed by
Dhanya Thattil

parent
16f7b42533
commit
5f94b5c246
@ -4,7 +4,6 @@
|
||||
|
||||
/**
|
||||
* Set Defines
|
||||
* @param dofst digital output offset
|
||||
* @param hardMaxV maximum hardware limit
|
||||
* @param driverfname driver file name
|
||||
*/
|
||||
|
43
slsDetectorServers/slsDetectorServer/include/LTC2620_Driver.h
Executable file
43
slsDetectorServers/slsDetectorServer/include/LTC2620_Driver.h
Executable file
@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
/**
|
||||
* Set Defines
|
||||
* @param hardMaxV maximum hardware limit
|
||||
* @param driverfname driver file name
|
||||
* @param numdacs number of dacs
|
||||
*/
|
||||
void LTC2620_D_SetDefines(int hardMaxV, char* driverfname, int numdacs);
|
||||
|
||||
|
||||
/**
|
||||
* Get max number of steps
|
||||
*/
|
||||
int LTC2620_D_GetMaxNumSteps();
|
||||
|
||||
/**
|
||||
* Convert voltage to dac units
|
||||
* @param voltage value in mv
|
||||
* @param dacval pointer to value converted to dac units
|
||||
* @returns FAIL when voltage outside limits, OK if conversion successful
|
||||
*/
|
||||
int LTC2620_D_VoltageToDac(int voltage, int* dacval);
|
||||
|
||||
/**
|
||||
* Convert dac units to voltage
|
||||
* @param dacval dac units
|
||||
* @param voltage pointer to value converted to mV
|
||||
* @returns FAIL when voltage outside limits, OK if conversion successful
|
||||
*/
|
||||
int LTC2620_D_DacToVoltage(int dacval, int* voltage);
|
||||
|
||||
/**
|
||||
* Set value
|
||||
* @param dacnum dac index
|
||||
* @param val value to set
|
||||
* @param mV 1 for mv, else 0
|
||||
* @param dacval pointer to dac value
|
||||
* @return OK or FAIL
|
||||
*/
|
||||
int LTC2620_D_SetDACValue(int dacnum, int val, int mV, int *dacval);
|
@ -51,8 +51,10 @@ int detectorTest(enum digitalTestMode arg);
|
||||
int64_t getDetectorId(enum idMode arg);
|
||||
u_int64_t getFirmwareVersion();
|
||||
u_int64_t getFirmwareAPIVersion();
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || defined(MYTHEN3D)
|
||||
u_int16_t getHardwareVersionNumber();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
u_int16_t getHardwareSerialNumber();
|
||||
#endif
|
||||
#ifdef JUNGFRAUD
|
||||
@ -83,7 +85,7 @@ int allocateRAM();
|
||||
void updateDataBytes();
|
||||
#endif
|
||||
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD)
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MYTHEN3D)
|
||||
int setDefaultDacs();
|
||||
#endif
|
||||
|
||||
@ -210,7 +212,7 @@ extern int AD9257_GetVrefVoltage(int mV); // AD9257.h
|
||||
extern int AD9257_SetVrefVoltage(int val, int mV); // AD9257.h
|
||||
#endif
|
||||
|
||||
#if (!defined(MYTHEN3D)) && (!defined(GOTTHARD2D))
|
||||
#if (!defined(GOTTHARD2D))
|
||||
void setDAC(enum DACINDEX ind, int val, int mV);
|
||||
int getDAC(enum DACINDEX ind, int mV);
|
||||
int getMaxDacSteps();
|
||||
|
90
slsDetectorServers/slsDetectorServer/src/LTC2620_Driver.c
Executable file
90
slsDetectorServers/slsDetectorServer/src/LTC2620_Driver.c
Executable file
@ -0,0 +1,90 @@
|
||||
#include "LTC2620_Driver.h"
|
||||
#include "clogger.h"
|
||||
#include "common.h"
|
||||
#include "sls_detector_defs.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/* LTC2620 DAC DEFINES */
|
||||
#define LTC2620_D_PWR_DOWN_VAL (-100)
|
||||
#define LTC2620_D_MAX_DAC_VAL (4095) // 12 bits
|
||||
#define LTC2620_D_MAX_STEPS (LTC2620_D_MAX_DAC_VAL + 1)
|
||||
|
||||
|
||||
// defines from the fpga
|
||||
int LTC2620_D_HardMaxVoltage = 0;
|
||||
char LTC2620_D_DriverFileName[MAX_STR_LENGTH];
|
||||
int LTC2620_D_NumDacs = 0;
|
||||
|
||||
void LTC2620_D_SetDefines(int hardMaxV, char* driverfname, int numdacs) {
|
||||
FILE_LOG(logINFOBLUE, ("Configuring DACs (LTC2620)\n"));
|
||||
LTC2620_D_HardMaxVoltage = hardMaxV;
|
||||
memset(LTC2620_D_DriverFileName, 0, MAX_STR_LENGTH);
|
||||
strcpy(LTC2620_D_DriverFileName, driverfname);
|
||||
LTC2620_D_NumDacs = numdacs;
|
||||
}
|
||||
|
||||
int LTC2620_D_GetMaxNumSteps() {
|
||||
return LTC2620_D_MAX_STEPS;
|
||||
}
|
||||
|
||||
int LTC2620_D_VoltageToDac(int voltage, int* dacval) {
|
||||
return ConvertToDifferentRange(0, LTC2620_D_HardMaxVoltage, 0, LTC2620_D_MAX_DAC_VAL,
|
||||
voltage, dacval);
|
||||
}
|
||||
|
||||
int LTC2620_D_DacToVoltage(int dacval, int* voltage) {
|
||||
return ConvertToDifferentRange( 0, LTC2620_D_MAX_DAC_VAL, 0, LTC2620_D_HardMaxVoltage,
|
||||
dacval, voltage);
|
||||
}
|
||||
|
||||
|
||||
int LTC2620_D_SetDACValue (int dacnum, int val, int mV, int* dacval) {
|
||||
FILE_LOG(logDEBUG1, ("dacnum:%d, val:%d, ismV:%d\n", dacnum, val, mV));
|
||||
// validate index
|
||||
if (dacnum < 0 || dacnum >= LTC2620_D_NumDacs) {
|
||||
FILE_LOG(logERROR, ("Dac index %d is out of bounds (0 to %d)\n", dacnum, LTC2620_D_NumDacs - 1));
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
// get
|
||||
if (val < 0 && val != LTC2620_D_PWR_DOWN_VAL)
|
||||
return FAIL;
|
||||
|
||||
// convert to dac or get mV value
|
||||
*dacval = val;
|
||||
int dacmV = val;
|
||||
int ret = OK;
|
||||
if (mV) {
|
||||
ret = LTC2620_D_VoltageToDac(val, dacval);
|
||||
} else if (val >= 0) {
|
||||
// do not convert power down dac val
|
||||
ret = LTC2620_D_DacToVoltage(val, &dacmV);
|
||||
}
|
||||
|
||||
// conversion out of bounds
|
||||
if (ret == FAIL) {
|
||||
FILE_LOG(logERROR, ("Setting Dac %d %s is out of bounds\n", dacnum, (mV ? "mV" : "dac units")));
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
// set
|
||||
if ( (*dacval >= 0) || (*dacval == LTC2620_D_PWR_DOWN_VAL)) {
|
||||
FILE_LOG(logINFO, ("Setting DAC %d: %d dac (%d mV)\n",dacnum, *dacval, dacmV));
|
||||
|
||||
char fname[MAX_STR_LENGTH];
|
||||
sprintf(fname, "%s%d", LTC2620_D_DriverFileName, dacnum);
|
||||
FILE_LOG(logDEBUG1, ("fname %s\n",fname));
|
||||
|
||||
//open file
|
||||
FILE* fd=fopen(fname,"w");
|
||||
if (fd==NULL) {
|
||||
FILE_LOG(logERROR, ("Could not open file %s for writing to set dac %d\n", fname, dacnum));
|
||||
return FAIL;
|
||||
}
|
||||
//convert to string, add 0 and write to file
|
||||
fprintf(fd, "%d\n", *dacval);
|
||||
fclose(fd);
|
||||
}
|
||||
return OK;
|
||||
}
|
@ -847,6 +847,55 @@ int set_dac(int file_des) {
|
||||
#elif MYTHEN3D
|
||||
case HIGH_VOLTAGE:
|
||||
break;
|
||||
case M_casSh: // in sls_detector_defs.h
|
||||
serverDacIndex = CASSH; // in mythen3 slsDetectorServer_defs.h
|
||||
break;
|
||||
case M_Vth2:
|
||||
serverDacIndex = VTH2;
|
||||
break;
|
||||
case SHAPER1:
|
||||
serverDacIndex = VRFSH;
|
||||
break;
|
||||
case SHAPER2:
|
||||
serverDacIndex = VRFSHNPOL;
|
||||
break;
|
||||
case M_vIpreOut:
|
||||
serverDacIndex = VIPREOUT;
|
||||
break;
|
||||
case M_Vth3:
|
||||
serverDacIndex = VTH3;
|
||||
break;
|
||||
case THRESHOLD:
|
||||
serverDacIndex = VTH1;
|
||||
break;
|
||||
case M_vIcin:
|
||||
serverDacIndex = VICIN;
|
||||
break;
|
||||
case M_cas:
|
||||
serverDacIndex = CAS;
|
||||
break;
|
||||
case PREAMP:
|
||||
serverDacIndex = VRF;
|
||||
break;
|
||||
case CALIBRATION_PULSE:
|
||||
serverDacIndex = VPH;
|
||||
break;
|
||||
case M_vIpre:
|
||||
serverDacIndex = VIPRE;
|
||||
break;
|
||||
case M_vIinSh:
|
||||
serverDacIndex = VIINSH;
|
||||
break;
|
||||
case M_VPL:
|
||||
serverDacIndex = VPL;
|
||||
break;
|
||||
case TRIMBIT_SIZE:
|
||||
serverDacIndex = VTRIM;
|
||||
break;
|
||||
case M_VdcSh:
|
||||
serverDacIndex = VDCSH;
|
||||
break;
|
||||
|
||||
|
||||
#endif
|
||||
default:
|
||||
@ -1017,9 +1066,7 @@ int set_dac(int file_des) {
|
||||
#ifdef GOTTHARD2D
|
||||
default:
|
||||
break;
|
||||
#elif MYTHEN3D
|
||||
default:
|
||||
break;
|
||||
|
||||
#else
|
||||
// dacs
|
||||
default:
|
||||
|
Reference in New Issue
Block a user