44 const uint16_t tmp_ch_config[ 6 ] = { cc0, cc1, cc2, cc3, cc4, cc5 };
45 afe_ptr->open_dac_output( tmp_ch_config );
55 uint16_t default_dac_setting[ 6 ] = { 0x0000, 0x1000, 0x87FF, 0x0000, 0xE7FF, 0x0C00 };
63 default_dac_setting[ 0 ] |= 0x0002;
67 default_dac_setting[ 0 ] |= 0x6040;
71 default_dac_setting[ 0 ] |= 0x6061;
72 default_dac_setting[ 1 ] |= 0x1000;
76 default_dac_setting[ 0 ] |= 0x6061;
77 default_dac_setting[ 1 ] |= 0x1000;
81 default_dac_setting[ 0 ] |= 0x6000;
85 default_dac_setting[ 0 ] |= 0x7000;
89 if ( 0.0 < full_scale_range )
133 SPI.beginTransaction( SPISettings(
frequency, MSBFIRST, SPI_MODE1 ) );
134 digitalWrite( SS, LOW );
135 SPI.transfer( data, size );
136 delayMicroseconds( cd_delay );
137 digitalWrite( SS, HIGH );
199 static bool pga_enabled =
false;
200 constexpr double pow2_24 = (double)(1L << 24);
212 coeff = (20.00 * 2.50) / (12.5 * pow2_24);
215 coeff = (20.00 * 2.50) / ((cc[ 0 ] & 0x0100 ? 16.00 : 1.00) * pow2_24);
220 coeff = (20.00 * 2.50) / pow2_24;
225 coeff = (20.00 * 2.50) / ((cc[ 0 ] & 0x0100 ? 16.00 : 1.00) * pow2_24);
229 coeff = (20.00 * 2.50) / (3.7989 * pow2_24);
232 coeff = (20.00 * 2.50) / (2.50 * pow2_24);
239 coeff = (20.00 * 2.50) / (12.5 * pow2_24) + 1.50;
242 coeff = (20.00 * 2.50) / (12.5 * pow2_24) - 1.50;
248 coeff = (2.00 * 20.00 * 2.50) / (12.5 * pow2_24) - 1.50;
252 coeff = (40.00 * 20.00 * 2.50) / (12.5 * pow2_24);
258 if ( pga_on && !pga_enabled )
264 for (
auto i = 0; i < 3; i++ )
272 Serial.print(
"lc[ ");
274 Serial.print(
"] : ");
275 Serial.println(
ch_delay[ ch ], 10 );
306 constexpr double system_clock = 4608000.00;
308 constexpr static double data_rates[] = { 288000, 192000, 144000, 96000, 72000, 48000, 36000, 24000,
309 18000, 12000, 9000, 6000, 4500, 3000, 2250, 1125,
310 562.5, 400, 300, 200, 100, 60, 50, 30,
311 25, 20, 15, 10, 7.5, };
312 constexpr static uint16_t delays[] = { 0, 2, 4, 6, 8, 10, 12, 14,
313 16, 18, 20, 28, 38, 40, 42, 56,
314 64, 76, 90, 128, 154, 178, 204, 224,
316 1024, 1664, 3276, 7680, 19200, 23040, };
323 uint8_t adc_data_rate = (ch_config1 >> 3) & 0x001F;
324 uint8_t adc_sinc = (ch_config1 >> 0) & 0x0007;
325 uint8_t
ch_delay = (ch_config2 >> 10) & 0x003F;
326 bool adc_normal_setting = (ch_config2 >> 9) & 0x0001;
327 bool ch_chop = (ch_config2 >> 7) & 0x0001;
328 double base_freq = data_rates[ adc_data_rate ];
329 double delay_setting = ((double)delays[
ch_delay ]) / system_clock;
334 delay_setting /= 2.00;
337 if ( (28 < adc_data_rate) || (4 < adc_sinc) || ((adc_data_rate < 12) && (adc_sinc)) )
340 if ( !adc_normal_setting )
341 base_freq /= (adc_sinc + 1);
347 Serial.print(
"adc_data_rate =" );
348 Serial.println( adc_data_rate );
349 Serial.print(
"base_freq = " );
350 Serial.println( base_freq );
351 Serial.print(
"delay_setting = " );
352 Serial.println( delay_setting, 10 );
353 Serial.print(
"channel delay = " );
354 Serial.println( (1 / base_freq) + delay_setting, 10 );
357 return (1 / base_freq) + delay_setting;
AFE_base(bool spi_addr, bool highspeed_variant, int nINT, int DRDY, int SYN, int nRESET, int DRDY_input, int SYNCDAC)
NAFE33352_Base(bool spi_addr, bool highspeed_variant, int nINT, int DRDY, int SYN, int nRESET, int DRDY_input, int SYNCDAC)
NAFE33352_UIOM(bool spi_addr=0, bool highspeed_variant=false, int nINT=7, int DRDY=4, int SYN=14, int nRESET=14, int DRDY_input=2, int SYNCDAC=14)
NAFE33352(bool spi_addr=0, bool highspeed_variant=false, int nINT=7, int DRDY=4, int SYN=14, int nRESET=14, int DRDY_input=2, int SYNCDAC=14)