Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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();
		}
	}
}
Ejemplo n.º 4
0
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 */
    }
  }
}