Ejemplo n.º 1
0
int set_dac_volts(int chan, double voltage) {
    lsampl_t data;
    int retval;

    DAC_ERROR = FALSE;
    data = comedi_from_phys(voltage, da_range, maxdata_ao);
    retval = comedi_data_write(it, subdev_ao, chan, range_ao, aref_ao, data);
    if (retval < 0) {
        comedi_perror("comedi_data_write in set_dac_volts");
        DAC_ERROR = TRUE;
    }
    return retval;
}
Ejemplo n.º 2
0
/**
 * @brief Directly set the DAC voltage
 *
 * @param Volts
 */
void MainWindow::setCommandVoltage(double Volts)
    {
    if (Ini_CmdO==NULL) return;
    lsampl_t CurrentOutputValue=comedi_from_phys(Volts, Ini_CmdO->range,Ini_CmdO->maxdata);
    int ret=comedi_data_write(it, Ini_CmdO->subdevice, Ini_CmdO->Channel, Ini_CmdO->rangeN, 0, CurrentOutputValue);

    if (ret < 0)
       {
       //Message=(QString("comedi_data_write failed with cmd %1 (%2 V)\n").arg(CurrentOutputValue).arg(Volts));
       }
    else
       {
       //Message=(QString("Debug: command set cmd %1 (%2 V)\n").arg(CurrentOutputValue).arg(Volts));
       };
    }
Ejemplo n.º 3
0
void ComediAnalogOutputHardCal::write(double data)
{
        lsampl_t sample = comedi_from_phys(data*m_outputConversionFactor, m_dataRange, m_maxData);
        comedi_data_write(m_device, m_subdevice, m_channels[0], m_range, m_aref, sample);
}
Ejemplo n.º 4
0
/* -------------------------------------------------------------------- */
static long dsetWrite_devAoSyncComedi(aoRecord *pao) {
  CONTEXT *p_myContext; 
  COMEDIDEV_AO *p_myAnalogOutput;
  double myMinimumVoltage;
  double myMaximumVoltage;
  char p_myWarmstartFilename[BUFLEN];
  FILE *p_myFileHandle;


  dsetLog(3,__FILE__ "[%d] -> %s(%s)\n", __LINE__, __func__,pao->name);

  pao->pact=TRUE;

  p_myContext=(CONTEXT *)pao->dpvt;
  p_myAnalogOutput=p_myContext->p_analogOutput;
  myMaximumVoltage=p_myContext->maximumVoltage;
  myMinimumVoltage=p_myContext->minimumVoltage;

  if (pao->val>pao->drvh) pao->val=pao->drvh;
  if (pao->val<pao->drvl) pao->val=pao->drvl;

  umask(0000);
  sprintf(p_myWarmstartFilename, WARMSTART_FILE_PREFIX "/%s", pao->name);
  p_myFileHandle=fopen(p_myWarmstartFilename,"w");
  if (p_myFileHandle==NULL) {
    dsetLog(1, __FILE__ "[%d] Error: %s\n", __LINE__, pao->name);
    dsetLog(1, __FILE__ "[%d] Error: Couldn't open file >%s<\n",
		    __LINE__, p_myWarmstartFilename);
    sleep(SLEEPTIME_ERROR);
    return(ERROR);
  }
  fprintf(p_myFileHandle,"%lg",pao->val);
  fclose(p_myFileHandle);

  
  if (pao->drvh!=myMaximumVoltage || pao->drvl!=myMinimumVoltage) {
    p_myAnalogOutput->range=getOptimalOperatingRange(pao);
    p_myAnalogOutput->c_range=comedi_get_range(p_myAnalogOutput->device,
                                             p_myAnalogOutput->subdevice,
                                             p_myAnalogOutput->channel,
                                             p_myAnalogOutput->range);	
  }
    
  p_myAnalogOutput->data=comedi_from_phys(
			pao->val,
			p_myAnalogOutput->c_range,
			p_myAnalogOutput->maxdata);

  dsetLog(7, __FILE__ "[%d] Synchronous write of a single value\n", __LINE__);
 
  if( comedi_data_write(
			p_myAnalogOutput->device,
                        p_myAnalogOutput->subdevice,
                        p_myAnalogOutput->channel,
                        p_myAnalogOutput->range,
                        p_myAnalogOutput->aref,
                        p_myAnalogOutput->data) <= ERROR ) {
        comedi_perror(p_myAnalogOutput->p_deviceFilename);
        sleep(SLEEPTIME_ERROR);
        return(ERROR);
  }


  dsetLog(2,__FILE__ "[%d] %s -> %lg\n", __LINE__, pao->name, pao->val);

  pao->pact=FALSE;

  dsetLog(3, __FILE__ "[%d] <- %s\n", __LINE__, __func__ );

  /* CONVERT according to calibration settings */
  return(CONVERT);

}