/* ************************************************************************** Author: Markus Rosenstihl Created: June 2016 ****************************************************************************/ #include "machines/hardware.h" #include "core/core.h" #include "drivers/PTS-Synthesizer/PTS.h" #include "drivers/Tecmag-DAC20/DAC20.h" #include "drivers/dummy/dummy.h" #include "drivers/SpinCore-PulseBlaster24Bit/SpinCore-PulseBlaster24Bit.h" /** \defgroup mobilemachine Mobile NMR Spectrometer \ingroup machines Uses Spincore Pulseblaster 24 Bit and Dummy ADC PTS310 with cable driver with phase control and no synchronization board \li line 0 for gate \li line 1 for pulse \li llne 17 for trigger \li line 16 free (not using synchronization board) \par Starting the hardware This procedure should assure the correct initialisation of the hardware: \li Switch off main switches of SpinCore Pulseblaster and Computer (the main switch of the computer is at the rear) \li Switch on Computer and start Windows or linux @{ */ /** */ class pulseblaster_only_hardware: public hardware { PTS* my_pts; SpinCorePulseBlaster24Bit* my_pulseblaster; dummy* my_adc; DAC20* my_dac; public: pulseblaster_only_hardware() { ttlout trigger; trigger.id = 0; /* trigger on line 17 */ trigger.ttls = 1 << 22; my_adc = new dummy; /* device_id=0, clock=100MHz, sync_mask: Bit 16 */ my_pulseblaster = new SpinCorePulseBlaster24Bit(0, 1e8); my_pts = new PTS_latched(0); my_dac = new DAC20(1); my_dac->set_latch_bit(17); // 17 is default LE; DATA 18 and CLK 16 // publish devices the_pg = my_pulseblaster; the_adc = my_adc; the_fg = my_pts; list_dacs.push_back(my_dac); } virtual ~pulseblaster_only_hardware() { if (the_adc != NULL) delete the_adc; if (the_fg != NULL) delete the_fg; if (the_pg != NULL) delete the_pg; } }; /** \brief brings standard core together with the Mobile NMR hardware */ class pulseblaster_core: public core { std::string the_name; public: pulseblaster_core(const core_config& conf) : core(conf) { the_hardware = new pulseblaster_only_hardware(); the_name = "pulseblaster backend without ADC card"; } virtual const std::string& core_name() const { return the_name; } }; /** @} */ int main(int argc, const char** argv) { int return_result = 0; try { core_config my_conf(argv, argc); // setup input and output pulseblaster_core my_core(my_conf); // start core application my_core.run(); } catch (const DamarisException& e) { fprintf(stderr, "%s\n", e.what()); return_result = 1; } return return_result; }