main() { // Disable JTAG (on RA0 and RA1 ) mJTAGPortEnable( DEBUG_JTAGPORT_OFF ); // Configure the device for maximum performance but do not change the PBDIV // Given the options, this function will change the flash wait states, RAM // wait state and enable prefetch cache but will not change the PBDIV. // The PBDIV value is already set via the pragma FPBDIV option above.. SYSTEMConfig(GetSystemClock(), SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); initializeUART(); initializeADC(); initializeLCD(); initializeRPG(); /* Initialize SD card */ setup_SDSPI(); SD_setStart(); /* Fill tempBuffer[] with int 0 to 63 * Write it to the current block. * Empty tempBuffer[] to all 0. * Read from the current block to make sure that it returns the right value. */ fillTempBuffer(); testSDReadWrite(tempBuffer); curr_read_block = curr_block; ConfigTimer1(); // Enable Timer1 for second counts configureInterrupts(); // T2CON = 0x8030; // TMR1 on, prescale 1:256 PB mPORTASetPinsDigitalOut( LED_MASK ); // LEDs = output mPORTDSetPinsDigitalIn( PB_MASK_D ); // PBs on D = input curr_state = READY; // enable interrupts INTEnableInterrupts(); int i = 0; while( 1 ) { if (getPrintToUARTFlag() == 1){ LCDMenuControl(); //mPORTAToggleBits( LED_MASK ); convertAndPrintIntegerToString("i => ", i++); convertAndPrintIntegerToString("timeElapse => ", timeElapsed); convertAndPrintIntegerToString("timeElapsedLEDSample => ", timeElapsedLEDSample); convertAndPrintIntegerToString("timeElapsedLEDTurnedOff => ", timeElapsedLEDTurnedOff); convertAndPrintIntegerToString("sampleLEDNow => ", sampleLEDNow); convertAndPrintIntegerToString(" ADC Value => ", getChannel5Value()); printShadowDetect(); printLightLevel(); drawLightDetectedBar(); controlPowerRelay(); switch(curr_state) { case READY : WriteString("State => READY "); break; case SLEEP : WriteString("State => SLEEP "); break; case HIBERNATE : WriteString("State => HIBERNATE"); break; case BUSY : WriteString("State => BUSY "); break; } WriteString("\r"); setPrintToUARTFlag(0); } if (NEW_BYTE_RECEIVED == 1){ curr_state = READY; NEW_BYTE_RECEIVED = 0; //mPORTAToggleBits( LED_MASK ); char tempArray[] = "g"; tempArray[0] = characterByteReceived; WriteString(tempArray); if(curr_state = HIBERNATE) { addByteToBuffer(characterByteReceived); } else { PutCharacter(characterByteReceived); } } if(bufferIndex == 512) { SDWriteBlock(currBlock); currBlock++; bufferIndex = 0; } if((curr_state == READY) && (timeElapsed >= SLEEP_TIMEOUT) && (timeElapsed < HIBERNATE_TIMEOUT)) { curr_state = SLEEP; } else if((curr_state == SLEEP) && (timeElapsed >= HIBERNATE_TIMEOUT)) { curr_state = HIBERNATE; timeElapsed = 0; } if (transmitDataFromSDCard == 1) { transmitDataFromSDCard = 0; forwardDataToPrinter(); } } // main (while) loop return 0; } // main
int main (void) { double batteryLevel; heaterOn = 0; //Power on device, check internal battery powerManagerInit(); // initialise power manager + turn power on powerOffHeater(); clock_init(); initializeADC(); initializeLedHandler(); RGBOff(); RGBShowColor(Blue); batteryLevel = readInternalBattery(); //if(batteryLevel < 3.3) //{ //RGBShowColor(Red); //_delay_ms(500); //RGBOff(); //_delay_ms(500); //RGBShowColor(Red); //_delay_ms(500); // ////powerOff(); // //return 0; //} Config32KHzRTC(); //Todo: RTC ook echt om de 1ms en niet wat die nu doet... initializeRTC(); InitializeDebug(); initializeBluetooth(); /* DHT11 enable */ PORTB.DIRSET = SEN1_EN; PORTB.OUTSET = SEN1_EN; /* Sen 2 */ PORTB.DIRSET = SEN2_EN; PORTB.OUTSET = SEN2_EN; /* USB status */ PORTC.DIRCLR = USB_STAT; //initializePWM(); stdout = &mystdout; /* onze eigen stdout gebruiken (usart) */ sei(); /* Interrupts enablen */ PMIC.CTRL |= (PMIC_HILVLEN_bm | PMIC_LOLVLEN_bm); /* Hi en Lo lvl interrupts */ /* BT config */ PORTC.DIRCLR = BT_STAT; PORTC.DIRSET = BT_KEY; PORTC.OUTCLR = BT_KEY; PORTC.DIRSET = BT_EN; PORTC.OUTSET = BT_EN; PORTB.DIRSET = HY_EN; //PORTB.OUTSET = HY_EN; bluetoothRename("snuffelneusWit"); //usartE0_sendstring("AT+NAMEsnuffelneus6.0"); _delay_ms(2000); while(1) { } }
int main(void) { uint8_t auxDetectInputState = 0; // Deal with watchdog first thing MCUSR = 0; // Clear reset status wdt_enable(WDTO_1S); // Initialize ports // Pin Assignments for PORTA/DDRA // PA0 - Auxilliary occupancy input (inverted) // PA1 - Not used // PA2 - Not used // PA3 - Occupancy transistor enable // PA4 - N/A (doesn't exist) // PA5 - N/A (doesn't exist) // PA6 - N/A (doesn't exist) // PA7 - N/A (doesn't exist) DDRA = 0b00001110; PORTA = 0b00000001; // Pin Assignments for PORTB/DDRB // PB0 - Not used // PB1 - Not used // PB2 - Not used // PB3 - MOSI (in,pulled up) // PB4 - MISO (in) // PB5 - SCK (in) // PB6 - Not used // PB7 - Not used DDRB = 0b11000111; PORTB = 0b00111000; // Pin Assignments for PORTC/DDRC // PC0 - Analog - Detector 0 current sense // PC1 - Analog - Detector 0 set point // PC2 - Not used // PC3 - Not used // PC4 - Not used // PC5 - Not used // PC6 - N/A (/RESET pin) // PC7 - Not used DDRC = 0b11111100; PORTC = 0b00000000; // Pin Assignments for PORTD/DDRD // PD0 - Not used // PD1 - Not used // PD2 - Not used // PD3 - Occupancy Detect LED (red, out) // PD4 - Aux onboard LED (amber, out) // PD5 - N/A (doesn't exist) // PD6 - N/A (doesn't exist) // PD7 - N/A (doesn't exist) DDRD = 0b00011111; PORTD = 0b00000000; setOccupancyOff(); setOccupancyLEDOff(); setAuxLEDOff(); initialize10HzTimer(); initializeADC(); initializeDelays(); sei(); while(1) { wdt_reset(); // If all the analog inputs have been read, the flag will be set and we // can then process the analog detector inputs if (eventFlags & EVENT_DO_BD_READ) { // Do all the analog magic processDetector(); // Read the auxilliary occupancy input // It's inverted, so flip the bit around so that auxDetectInputState is // positive logic debounceInputs(&auxDetectInputState, ((~PINA) & 0x01)); if (detectorStatus || auxDetectInputState) setOccupancyOn(); else setOccupancyOff(); // Clear the flag and start the next chain of conversions eventFlags &= ~(EVENT_DO_BD_READ); } if (EVENT_DO_ADC_RUN == (eventFlags & (EVENT_DO_ADC_RUN | EVENT_DO_BD_READ))) { // If the ISR tells us it's time to run the ADC again and we've handled the last read, // start the ADC again ADCSRA |= _BV(ADSC); } // This should provide roughly a 1Hz blink rate // It provides a nice proof of life that the ADC is actually doing its thing and is alive. if (eventFlags & EVENT_1HZ_BLINK) { setAuxLEDOff(); if (detectorStatus) setOccupancyLEDOn(); else if (auxDetectInputState) setOccupancyLEDOff(); else setOccupancyLEDOff(); } else { setAuxLEDOn(); if (detectorStatus) setOccupancyLEDOn(); else if (auxDetectInputState) setOccupancyLEDOn(); else setOccupancyLEDOff(); } } }
void main () { int rc; unsigned long next_wake_utt; unsigned long delta_wake_utt; vBSP430platformInitialize_ni(); (void)iBSP430consoleInitialize(); cprintf("\n\nadc demo, " __DATE__ " " __TIME__ "\n"); delta_wake_utt = 2 * ulBSP430uptimeConversionFrequency_Hz(); rc = initializeADC(); cprintf("%s initialized, returned %d, ADC cal at %p, REF cal at %p\n", #if defined(__MSP430_HAS_ADC10__) "ADC10" #elif defined(__MSP430_HAS_ADC10_A__) "ADC10_A" #elif defined(__MSP430_HAS_ADC10_B__) "ADC10_B" #elif defined(__MSP430_HAS_ADC10_B4__) "ADC10_B (FR4xx)" #elif defined(__MSP430_HAS_ADC12__) "ADC12" #elif defined(__MSP430_HAS_ADC12_B__) "ADC12_B" #elif defined(__MSP430_HAS_ADC12_PLUS__) "ADC12_PLUS" #endif /* ADC */ , rc, cal_adc, cal_ref); #if HAVE_REF if (cal_ref) { cprintf("Reference factors:\n" "\t" REF_1pX_STR "V %u (0x%04x)\n" "\t2.0V %u (0x%04x)\n" "\t2.5V %u (0x%04x)\n", cal_ref->cal_adc_15vref_factor, cal_ref->cal_adc_15vref_factor, cal_ref->cal_adc_20vref_factor, cal_ref->cal_adc_20vref_factor, cal_ref->cal_adc_25vref_factor, cal_ref->cal_adc_25vref_factor); } #endif /* HAVE_REF */ if (cal_adc) { cprintf("ADC gain factor %d (0x%04x), offset %d\n", cal_adc->cal_adc_gain_factor, cal_adc->cal_adc_gain_factor, cal_adc->cal_adc_offset); cprintf("Temperature ranges:\n"); cprintf("\t" REF_1pX_STR "V T30 %u T85 %u\n", cal_adc->cal_adc_15t30, cal_adc->cal_adc_15t85); #if BSP430_TLV_IS_5XX cprintf("\t2.0V T30 %u T85 %u\n", cal_adc->cal_adc_20t30, cal_adc->cal_adc_20t85); #endif /* BSP430_TLV_IS_5XX */ cprintf("\t2.5V T30 %u T85 %u\n", cal_adc->cal_adc_25t30, cal_adc->cal_adc_25t85); } cprintf("Vmid channel %u, Temp channel %u" #ifdef INCH_AUX ", Aux channel %u" #endif /* INCH_AUX */ "\n", INCH_VMID / INCH_BASE, INCH_TEMP / INCH_BASE #ifdef INCH_AUX , INCH_AUX / INCH_BASE #endif /* INCH_AUX */ ); next_wake_utt = ulBSP430uptime_ni(); while (1) { char timestamp[BSP430_UPTIME_AS_TEXT_LENGTH]; static const int refv[] = { REF_1pX, REF_2p0, REF_2p5 }; static const char * const refv_str[] = { REF_1pX_STR, "2.0", "2.5" }; static const int const nrefv = sizeof(refv)/sizeof(*refv); static const int inch[] = { INCH_TEMP, INCH_VMID, #if defined(INCH_AUX) INCH_AUX, #endif /* INCH_AUX */ }; static const int const ninch = sizeof(inch)/sizeof(*inch); int valid = 0; sSample sample[sizeof(refv)/sizeof(*refv)][sizeof(inch)/sizeof(*inch)]; int ri; int ii; #define VALID(_ri,_ii) ((1 << (_ii)) << ((_ri) * nrefv)) #define ANY_VALID(_ri) (((1 << nrefv)-1) << ((_ri) * nrefv)) for (ri = 0; ri < nrefv; ++ri) { if (0 == setReferenceVoltage(refv[ri])) { for (ii = 0; ii < ninch; ++ii) { if (0 == getSample(sample[ri]+ii, refv[ri], inch[ii])) { valid |= VALID(ri, ii); } } } } cprintf("%s: valid %x", xBSP430uptimeAsText(ulBSP430uptime_ni(), timestamp), valid); for (ri = 0; ri < nrefv; ++ri) { if (valid & ANY_VALID(ri)) { cprintf("\n\t%sV: ", refv_str[ri]); for (ii = 0; ii < ninch; ++ii) { if (VALID(ri, ii) & valid) { if (INCH_TEMP == inch[ii]) { displayTemperature(sample[ri] + ii); } else if (INCH_VMID == inch[ii]) { displayVmid(sample[ri] + ii); } else { displayVoltage(sample[ri] + ii); } } } } } cputchar('\n'); next_wake_utt += delta_wake_utt; while (0 < lBSP430uptimeSleepUntil(next_wake_utt, LPM3_bits)) { /* nop */ } } }