Example #1
0
/*
typedef struct bmcdata {
    double pv_voltage,cc_voltage, input_voltage, b1_voltage, b2_voltage, system_voltage,logic_voltage;
    double pv_current,cc_current,battery_current;
    struct didata datain;
    struct dodata dataout;
    int32_t utc;
}
 */
int get_data_sample(void) {
    int i;

    for (i = 0; i < 1; i++) { // several samples per reading
        bmc.pv_voltage = lp_filter(get_adc_volts(PVV_C), PVV_C, TRUE);
        bmc.cc_voltage = lp_filter(get_adc_volts(CCV_C), CCV_C, TRUE);
        //        bmc.input_voltage = lp_filter(get_adc_volts(INV_C), INV_C, TRUE);
        //        bmc.b1_voltage = lp_filter(get_adc_volts(B1V_C), B1V_C, TRUE);
        //        bmc.b2_voltage = lp_filter(get_adc_volts(B2V_C), B2V_C, TRUE);
        //        bmc.pv_current = lp_filter(get_adc_volts(PVC_C), PVC_C, TRUE);
        //        bmc.cc_current = lp_filter(get_adc_volts(CCC_C), CCC_C, TRUE);
        //        bmc.battery_current = lp_filter(get_adc_volts(BAC_C), BAC_C, TRUE);
    }
    //    bmc.system_voltage = get_adc_volts(SYV_C);
    //    bmc.logic_voltage = get_adc_volts(VD5_C);

    bmc.datain.D0 = get_dio_bit(8); // GPIO 0/2
    bmc.datain.D1 = get_dio_bit(9); // GPIO 1/3
    bmc.datain.D2 = get_dio_bit(0); // read output bit wpi 0
    bmc.datain.D3 = get_dio_bit(1); // read output bit wpi 1
    bmc.datain.D4 = get_dio_bit(12);
    bmc.datain.D5 = get_dio_bit(13);
    bmc.datain.D6 = get_dio_bit(15); // GPIO 14 
    bmc.datain.D7 = get_dio_bit(16); // GPIO 15 
    put_dio_bit(0, bmc.dataout.D0);
    put_dio_bit(1, bmc.dataout.D1);
    put_dio_bit(2, bmc.dataout.D2);
    put_dio_bit(3, bmc.dataout.D3);
    put_dio_bit(4, bmc.dataout.D4);
    put_dio_bit(5, bmc.dataout.D5);
    put_dio_bit(6, bmc.dataout.D6);
    put_dio_bit(7, bmc.dataout.D7);
}
Example #2
0
File: daq.c Project: nsaspook/mbmc
int get_data_sample(void)
{
	int i;
	static int pv_stable = 0, current_null_reset = FALSE, first_run = TRUE;

	if (HAVE_AI) {
		bmc.pv_voltage = lp_filter(get_adc_volts(PVV_C, TRUE, RANGE_10) * PVV_GAIN, PVV_C, TRUE); // read PV voltage on DIFF channels
		bmc.cm_voltage = lp_filter(get_adc_volts(CMV_C, FALSE, RANGE_5), CMV_C, TRUE); // back to SE channels
		bmc.cm_current = lp_filter(get_adc_volts(CMA_C, FALSE, RANGE_5), CMA_C, TRUE);
		if (bmc.pv_voltage < 0.0) bmc.pv_voltage = 0.0;
		if (bmc.cm_voltage < 0.0) bmc.cm_voltage = 0.0;
		if (bmc.cm_current < 0.0) bmc.cm_current = 0.0;

		if (first_run) {
			first_run = FALSE;
			bmc.cm_null = CMA_DEFAULT;
			get_adc_volts(PVV_NULL, TRUE, RANGE_10);
		}

		if (bmc.pv_voltage > 3.0) { // use the default current null if we have not reset the null
			if (!current_null_reset) bmc.cm_null = bmc.cm_voltage * CMA_NULL;
			pv_stable = 0;  // when voltage drops wait a bit until the null update
		} else {
			if (pv_stable++ > 64) current_null_reset = TRUE; // wait for readings to be stable
			if (current_null_reset) {
				if (bmc.cm_current > 2.0) bmc.cm_null = bmc.cm_current; // make sure we have something real
				current_null_reset = FALSE;
			}
		}
		bmc.cm_amps = lp_filter((bmc.cm_current - bmc.cm_null) / CMA_GAIN, CMC_C, TRUE);
		if (bmc.cm_amps < 0.0) bmc.cm_amps = 0.0;
	} else {
		return -1;
	}

	// FIXME
	if (HAVE_DIO) {
		bmc.datain.D0 = get_dio_bit(8);
		bmc.datain.D1 = get_dio_bit(9);
		bmc.datain.D2 = get_dio_bit(10);
		bmc.datain.D3 = get_dio_bit(11);
		bmc.datain.D4 = get_dio_bit(12);
		bmc.datain.D5 = get_dio_bit(13);
		bmc.datain.D6 = get_dio_bit(14);
		bmc.datain.D7 = get_dio_bit(15);
		put_dio_bit(0, bmc.dataout.D0);
		put_dio_bit(1, bmc.dataout.D1);
		put_dio_bit(2, bmc.dataout.D2);
		put_dio_bit(3, bmc.dataout.D3);
		put_dio_bit(4, bmc.dataout.D4);
		put_dio_bit(5, bmc.dataout.D5);
		put_dio_bit(6, bmc.dataout.D6);
		put_dio_bit(7, bmc.dataout.D7);
	} else {
		return -2;
	}
	return 0;
}
Example #3
0
int get_data_sample(void)
{
	int i;
	static int pv_stable = 0, first_run = TRUE, set_range;

	if (HAVE_AI) {
		if (bmc.pv_voltage < 0.5) {
			set_range = RANGE_0_512;
			gain_adj = ADGAIN2;
		} else {
			set_range = RANGE_2_048;
			gain_adj = ADGAIN1;
		}
		if (bmc.pv_voltage < 0.0) bmc.pv_voltage = 0.0;

		if (first_run) {
			if (pv_stable++ > PVV_NULL_TIME) first_run = FALSE;
			if (RAW_DATA) {
				if (pv_stable > PVV_NULL_TIME_RAW) first_run = FALSE;
			}
			bmc.pv_voltage_null = lp_filter(get_adc_volts(PVV_NULL, TRUE, set_range), PVV_NULL, FALSE);
			;
		} else {
			if (RAW_DATA_NOFIL) {
				bmc.pv_voltage = get_adc_volts(PVV_C, TRUE, set_range); // read PV voltage on DIFF channels, no filter
			} else {
				bmc.pv_voltage = lp_filter(get_adc_volts(PVV_C, TRUE, set_range), PVV_C, FALSE); // read PV voltage on DIFF channels
			}
		}
	} else {
		return -1;
	}

	// FIXME
	if (HAVE_DIO) {
		bmc.datain.D0 = get_dio_bit(8);
		bmc.datain.D1 = get_dio_bit(9);
		bmc.datain.D2 = get_dio_bit(10);
		bmc.datain.D3 = get_dio_bit(11);
		bmc.datain.D4 = get_dio_bit(12);
		bmc.datain.D5 = get_dio_bit(13);
		bmc.datain.D6 = get_dio_bit(14);
		bmc.datain.D7 = get_dio_bit(15);
		put_dio_bit(0, bmc.dataout.D0);
		put_dio_bit(1, bmc.dataout.D1);
		put_dio_bit(2, bmc.dataout.D2);
		put_dio_bit(3, bmc.dataout.D3);
		put_dio_bit(4, bmc.dataout.D4);
		put_dio_bit(5, bmc.dataout.D5);
		put_dio_bit(6, bmc.dataout.D6);
		put_dio_bit(7, bmc.dataout.D7);
	} else {
		return -2;
	}
	return 0;
}
Example #4
0
int main(int argc, char *argv[])
{
	int blink[3], flip[2] = {0, 0};
	int do_ao_only = FALSE;
	uint8_t i = 0;

	if (do_ao_only) {
		if (init_dac(0.0, 25.0, FALSE) < 0) {
			printf("Missing Analog AO subdevice\n");
			return -1;
		}
		while (TRUE) {
			set_dac_volts(1, ((double) sine_wave[i])*0.007);
			set_dac_volts(0, ((double) sine_wave[255 - i++])*0.007);
			usleep(10);
			//			printf("%d\n", i);
		}
	} else {

		if (init_daq(0.0, 25.0, FALSE) < 0) {
			printf("Missing Analog subdevice(s)\n");
			return -1;
		}
		if (init_dio() < 0) {
			printf("Missing Digital subdevice(s)\n");
			return -1;
		}
		set_dio_output(0);
		set_dio_output(1);
		set_dio_input(6);
		set_dio_input(7);
		put_dio_bit(0, 1);
		put_dio_bit(1, 1);
		blink[2] = 0;

		while (1) {

			get_data_sample();
			if (blink[2]++ >= 100) {
				printf("         \r");
				printf(" %2.3fV %2.3fV %2.3fV %2.3fV %2.3fV %2.3fV %2.3fV %u %u %u %u %u %u raw %x, %x",
					bmc.pv_voltage, bmc.cc_voltage, bmc.input_voltage, bmc.b1_voltage, bmc.b2_voltage, bmc.system_voltage, bmc.logic_voltage,
					bmc.datain.D0, bmc.datain.D1, bmc.datain.D2, bmc.datain.D3, bmc.datain.D6, bmc.datain.D7, bmc.adc_sample[0], bmc.adc_sample[1]);
				//        usleep(4990);
				blink[2] = 0;

				if ((bmc.datain.D0 == 0)) {
					if (((blink[0]++) % 150) == 0) {
						flip[0] = !flip[0];
					}
					printf(" Flip led 0 %x ", flip[0]);
					bmc.dataout.D0 = flip[0];
					set_dac_volts(0, bmc.cc_voltage);
				} else {
					set_dac_volts(0, 0.666);
					bmc.dataout.D0 = 0;
				}
				if ((bmc.datain.D1 == 0)) {
					if (((blink[1]++) % 150) == 0) {
						flip[1] = !flip[1];
					}
					printf(" Flip led 1 %x ", flip[1]);
					set_dac_volts(1, 0.333);
					bmc.dataout.D1 = flip[1];
				} else {
					set_dac_volts(1, 1.666);
					bmc.dataout.D1 = 0;
				}
			}
		}
	}
	return 0;
}