// Constructor GasSensor::GasSensor(char indexnumber, int pinnumber) { pin = pinnumber; #ifdef ARDUINO analogReadRes(16); analogReadAveraging(NUM_ANALOG_READS); // Check PIN voltage pinMode(pin, INPUT); #else millis_val=0; analog_val=0; #endif // Stop reading analog values to protect pin pinhigh=true; lval=0; quality=100; for (char i=0; i<QUALITY_HISTORY;i++) quality_history[i]=100; quality_history_pos=0; // Reset htmap mapresettime=MAP_RESET_TIME; for (uint8_t hum=0; hum<HT_MAP_COUNT_HUM; hum++) { for (uint8_t temp=0; temp<HT_MAP_COUNT_TEMP; temp++) { htmap_avg[hum][temp]=65535; htmap_max[hum][temp]=65535; } } }
uint16_t hwCPUVoltage() { analogReference(DEFAULT); analogReadResolution(12); analogReadAveraging(32); #if defined(__MK20DX128__) || defined(__MK20DX256__) // Teensy 3.0/3.1/3.2 return 1195 * 4096 / analogRead(39); #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) // Teensy 3.6 return 1195 * 4096 / analogRead(71); #elif defined(__MKL26Z64__) // Teensy LC // not supported return FUNCTION_NOT_SUPPORTED; #else // not supported return FUNCTION_NOT_SUPPORTED; #endif }
//////////////////////////////////////////////////////////////////////////////// // AUDIO //////////////////////////////////////////////////////////////////////////////// void audioInit() { pinMode(AUDIO_INPUT_PIN, INPUT); analogReadResolution(AUDIO_READ_RESOLUTION); analogReadAveraging(AUDIO_READ_AVERAGING); }
TeensyUnit::TeensyUnit(): Wire(0), FPWM_pin {FPWM_1_pin, FPWM_2_pin, FPWM_3_pin, FPWM_4_pin, FPWM_5_pin, FPWM_6_pin}, SPWM_pin {SPWM_1_pin, SPWM_2_pin, SPWM_3_pin, SPWM_4_pin, SPWM_5_pin, SPWM_6_pin}, Analog_pin {Analog_1_pin, Analog_2_pin, Analog_3_pin, Analog_4_pin, Analog_5_pin, Analog_6_pin}, sound0(*this, 0), sound1(*this, 1), sound2(*this, 2), sound3(*this, 3), sound4(*this, 4), sound5(*this, 5), sound{sound0, sound1, sound2, sound3, sound4, sound5} { //=============================================== //==== pin initialization ==== //=============================================== uint8_t num_ports = 0; uint8_t num_pins = 0; //--- Teensy On-Board --- pinMode(indicator_led_pin, OUTPUT); //--- Programming Pin --- pinMode(PGM_DO_pin, OUTPUT); //--- FPWM pins --- num_ports = sizeof(FPWM_pin)/sizeof(FPWM_pin[0]); for (uint8_t j = 0; j<num_ports; j++){ num_pins = sizeof(FPWM_pin[j])/sizeof(FPWM_pin[j][0]); for (uint8_t i = 0; i<num_pins; i++){ pinMode(FPWM_pin[j][i], OUTPUT); } } //--- Analogue pins --- num_ports = sizeof(Analog_pin)/sizeof(Analog_pin[0]); for (uint8_t j = 0; j<num_ports; j++){ num_pins = sizeof(Analog_pin[j])/sizeof(Analog_pin[j][0]); for (uint8_t i = 0; i<num_pins; i++){ pinMode(Analog_pin[j][i], INPUT); } } //--- Analogue settings --- analogReadResolution(12); analogReadAveraging(32); analogWriteResolution(8); analogWriteFrequency(0, 1600); analogWriteFrequency(1, 1600); analogWriteFrequency(2, 1600); //--- Slow PWM driver ---- spwm = PWMDriver(0x40); //--- Multiplexer pins --- num_pins = sizeof(I2C_MUL_ADR_pin)/sizeof(I2C_MUL_ADR_pin[0]); for (uint8_t i = 0; i<num_pins; i++){ pinMode(I2C_MUL_ADR_pin[i], OUTPUT); } //--- I2C initialization ---- Wire.begin(I2C_MASTER,0x00, I2C_PINS_18_19, I2C_PULLUP_EXT, I2C_RATE_400); }
void AudioInputAnalogStereo::init(uint8_t pin0, uint8_t pin1) { uint32_t i, sum0=0, sum1=0; //pinMode(32, OUTPUT); //pinMode(33, OUTPUT); // Configure the ADC and run at least one software-triggered // conversion. This completes the self calibration stuff and // leaves the ADC in a state that's mostly ready to use analogReadRes(16); analogReference(INTERNAL); // range 0 to 1.2 volts #if F_BUS == 96000000 || F_BUS == 48000000 || F_BUS == 24000000 analogReadAveraging(8); ADC1_SC3 = ADC_SC3_AVGE + ADC_SC3_AVGS(1); #else analogReadAveraging(4); ADC1_SC3 = ADC_SC3_AVGE + ADC_SC3_AVGS(0); #endif // Actually, do many normal reads, to start with a nice DC level for (i=0; i < 1024; i++) { sum0 += analogRead(pin0); sum1 += analogReadADC1(pin1); } for (i = 0; i < 16; i++) { left_dc_average_hist[i] = sum0 >> 10; right_dc_average_hist[i] = sum1 >> 10; } // set the programmable delay block to trigger the ADC at 44.1 kHz //if (!(SIM_SCGC6 & SIM_SCGC6_PDB) //|| (PDB0_SC & PDB_CONFIG) != PDB_CONFIG //|| PDB0_MOD != PDB_PERIOD //|| PDB0_IDLY != 1 //|| PDB0_CH0C1 != 0x0101) { SIM_SCGC6 |= SIM_SCGC6_PDB; PDB0_IDLY = 1; PDB0_MOD = PDB_PERIOD; PDB0_SC = PDB_CONFIG | PDB_SC_LDOK; PDB0_SC = PDB_CONFIG | PDB_SC_SWTRIG; PDB0_CH0C1 = 0x0101; PDB0_CH1C1 = 0x0101; //} // enable the ADC for hardware trigger and DMA ADC0_SC2 |= ADC_SC2_ADTRG | ADC_SC2_DMAEN; ADC1_SC2 |= ADC_SC2_ADTRG | ADC_SC2_DMAEN; // set up a DMA channel to store the ADC data dma0.begin(true); dma1.begin(true); // ADC0_RA = 0x4003B010 // ADC1_RA = 0x400BB010 dma0.TCD->SADDR = &ADC0_RA; dma0.TCD->SOFF = 0; dma0.TCD->ATTR = DMA_TCD_ATTR_SSIZE(1) | DMA_TCD_ATTR_DSIZE(1); dma0.TCD->NBYTES_MLNO = 2; dma0.TCD->SLAST = 0; dma0.TCD->DADDR = left_buffer; dma0.TCD->DOFF = 2; dma0.TCD->CITER_ELINKNO = sizeof(left_buffer) / 2; dma0.TCD->DLASTSGA = -sizeof(left_buffer); dma0.TCD->BITER_ELINKNO = sizeof(left_buffer) / 2; dma0.TCD->CSR = DMA_TCD_CSR_INTHALF | DMA_TCD_CSR_INTMAJOR; dma1.TCD->SADDR = &ADC1_RA; dma1.TCD->SOFF = 0; dma1.TCD->ATTR = DMA_TCD_ATTR_SSIZE(1) | DMA_TCD_ATTR_DSIZE(1); dma1.TCD->NBYTES_MLNO = 2; dma1.TCD->SLAST = 0; dma1.TCD->DADDR = right_buffer; dma1.TCD->DOFF = 2; dma1.TCD->CITER_ELINKNO = sizeof(right_buffer) / 2; dma1.TCD->DLASTSGA = -sizeof(right_buffer); dma1.TCD->BITER_ELINKNO = sizeof(right_buffer) / 2; dma1.TCD->CSR = DMA_TCD_CSR_INTHALF | DMA_TCD_CSR_INTMAJOR; dma0.triggerAtHardwareEvent(DMAMUX_SOURCE_ADC0); //dma1.triggerAtHardwareEvent(DMAMUX_SOURCE_ADC1); dma1.triggerAtTransfersOf(dma0); dma1.triggerAtCompletionOf(dma0); update_responsibility = update_setup(); dma0.enable(); dma1.enable(); dma0.attachInterrupt(isr0); dma1.attachInterrupt(isr1); }
void AudioInputAnalog::begin(unsigned int pin) { uint32_t i, sum=0; // pin must be 0 to 13 (for A0 to A13) // or 14 to 23 for digital pin numbers A0-A9 // or 34 to 37 corresponding to A10-A13 if (pin > 23 && !(pin >= 34 && pin <= 37)) return; //pinMode(2, OUTPUT); //pinMode(3, OUTPUT); //digitalWriteFast(3, HIGH); //delayMicroseconds(500); //digitalWriteFast(3, LOW); // Configure the ADC and run at least one software-triggered // conversion. This completes the self calibration stuff and // leaves the ADC in a state that's mostly ready to use analogReadRes(16); analogReference(INTERNAL); // range 0 to 1.2 volts //analogReference(DEFAULT); // range 0 to 3.3 volts analogReadAveraging(8); // Actually, do many normal reads, to start with a nice DC level for (i=0; i < 1024; i++) { sum += analogRead(pin); } dc_average = sum >> 10; // testing only, enable adc interrupt //ADC0_SC1A |= ADC_SC1_AIEN; //while ((ADC0_SC1A & ADC_SC1_COCO) == 0) ; // wait //NVIC_ENABLE_IRQ(IRQ_ADC0); // set the programmable delay block to trigger the ADC at 44.1 kHz SIM_SCGC6 |= SIM_SCGC6_PDB; PDB0_MOD = PDB_PERIOD; PDB0_SC = PDB_CONFIG | PDB_SC_LDOK; PDB0_SC = PDB_CONFIG | PDB_SC_SWTRIG; PDB0_CH0C1 = 0x0101; // enable the ADC for hardware trigger and DMA ADC0_SC2 |= ADC_SC2_ADTRG | ADC_SC2_DMAEN; // set up a DMA channel to store the ADC data SIM_SCGC7 |= SIM_SCGC7_DMA; SIM_SCGC6 |= SIM_SCGC6_DMAMUX; DMA_CR = 0; DMA_TCD2_SADDR = &ADC0_RA; DMA_TCD2_SOFF = 0; DMA_TCD2_ATTR = DMA_TCD_ATTR_SSIZE(1) | DMA_TCD_ATTR_DSIZE(1); DMA_TCD2_NBYTES_MLNO = 2; DMA_TCD2_SLAST = 0; DMA_TCD2_DADDR = analog_rx_buffer; DMA_TCD2_DOFF = 2; DMA_TCD2_CITER_ELINKNO = sizeof(analog_rx_buffer) / 2; DMA_TCD2_DLASTSGA = -sizeof(analog_rx_buffer); DMA_TCD2_BITER_ELINKNO = sizeof(analog_rx_buffer) / 2; DMA_TCD2_CSR = DMA_TCD_CSR_INTHALF | DMA_TCD_CSR_INTMAJOR; DMAMUX0_CHCFG2 = DMAMUX_DISABLE; DMAMUX0_CHCFG2 = DMAMUX_SOURCE_ADC0 | DMAMUX_ENABLE; update_responsibility = update_setup(); DMA_SERQ = 2; NVIC_ENABLE_IRQ(IRQ_DMA_CH2); }
void AudioInputAnalogStereo::init(uint8_t pin0, uint8_t pin1) { uint32_t tmp; //pinMode(32, OUTPUT); //pinMode(33, OUTPUT); // Configure the ADC and run at least one software-triggered // conversion. This completes the self calibration stuff and // leaves the ADC in a state that's mostly ready to use analogReadRes(16); analogReference(INTERNAL); // range 0 to 1.2 volts #if F_BUS == 96000000 || F_BUS == 48000000 || F_BUS == 24000000 analogReadAveraging(8); ADC1_SC3 = ADC_SC3_AVGE + ADC_SC3_AVGS(1); #else analogReadAveraging(4); ADC1_SC3 = ADC_SC3_AVGE + ADC_SC3_AVGS(0); #endif // Note for review: // Probably not useful to spin cycles here stabilizing // since DC blocking is similar to te external analog filters tmp = (uint16_t) analogRead(pin0); tmp = ( ((int32_t) tmp) << 14); hpf_x1[0] = tmp; // With constant DC level x1 would be x0 hpf_y1[0] = 0; // Output will settle here when stable tmp = (uint16_t) analogReadADC1(pin1); tmp = ( ((int32_t) tmp) << 14); hpf_x1[1] = tmp; // With constant DC level x1 would be x0 hpf_y1[1] = 0; // Output will settle here when stable // set the programmable delay block to trigger the ADC at 44.1 kHz //if (!(SIM_SCGC6 & SIM_SCGC6_PDB) //|| (PDB0_SC & PDB_CONFIG) != PDB_CONFIG //|| PDB0_MOD != PDB_PERIOD //|| PDB0_IDLY != 1 //|| PDB0_CH0C1 != 0x0101) { SIM_SCGC6 |= SIM_SCGC6_PDB; PDB0_IDLY = 1; PDB0_MOD = PDB_PERIOD; PDB0_SC = PDB_CONFIG | PDB_SC_LDOK; PDB0_SC = PDB_CONFIG | PDB_SC_SWTRIG; PDB0_CH0C1 = 0x0101; PDB0_CH1C1 = 0x0101; //} // enable the ADC for hardware trigger and DMA ADC0_SC2 |= ADC_SC2_ADTRG | ADC_SC2_DMAEN; ADC1_SC2 |= ADC_SC2_ADTRG | ADC_SC2_DMAEN; // set up a DMA channel to store the ADC data dma0.begin(true); dma1.begin(true); // ADC0_RA = 0x4003B010 // ADC1_RA = 0x400BB010 dma0.TCD->SADDR = &ADC0_RA; dma0.TCD->SOFF = 0; dma0.TCD->ATTR = DMA_TCD_ATTR_SSIZE(1) | DMA_TCD_ATTR_DSIZE(1); dma0.TCD->NBYTES_MLNO = 2; dma0.TCD->SLAST = 0; dma0.TCD->DADDR = left_buffer; dma0.TCD->DOFF = 2; dma0.TCD->CITER_ELINKNO = sizeof(left_buffer) / 2; dma0.TCD->DLASTSGA = -sizeof(left_buffer); dma0.TCD->BITER_ELINKNO = sizeof(left_buffer) / 2; dma0.TCD->CSR = DMA_TCD_CSR_INTHALF | DMA_TCD_CSR_INTMAJOR; dma1.TCD->SADDR = &ADC1_RA; dma1.TCD->SOFF = 0; dma1.TCD->ATTR = DMA_TCD_ATTR_SSIZE(1) | DMA_TCD_ATTR_DSIZE(1); dma1.TCD->NBYTES_MLNO = 2; dma1.TCD->SLAST = 0; dma1.TCD->DADDR = right_buffer; dma1.TCD->DOFF = 2; dma1.TCD->CITER_ELINKNO = sizeof(right_buffer) / 2; dma1.TCD->DLASTSGA = -sizeof(right_buffer); dma1.TCD->BITER_ELINKNO = sizeof(right_buffer) / 2; dma1.TCD->CSR = DMA_TCD_CSR_INTHALF | DMA_TCD_CSR_INTMAJOR; dma0.triggerAtHardwareEvent(DMAMUX_SOURCE_ADC0); //dma1.triggerAtHardwareEvent(DMAMUX_SOURCE_ADC1); dma1.triggerAtTransfersOf(dma0); dma1.triggerAtCompletionOf(dma0); update_responsibility = update_setup(); dma0.enable(); dma1.enable(); dma0.attachInterrupt(isr0); dma1.attachInterrupt(isr1); }