Example #1
0
void TLC5940_SetGS_And_GS_PWM(void) {
    uint8_t firstCycleFlag = 0;

    if (outputState(VPRG_PORT, VPRG_PIN)) {
        setLow(VPRG_PORT, VPRG_PIN);
        firstCycleFlag = 1;
    }

    uint16_t GSCLK_Counter = 0;
    uint8_t Data_Counter = 0;

    setLow(BLANK_PORT, BLANK_PIN);
    for (;;) {
        if (GSCLK_Counter > 4095) {
            setHigh(BLANK_PORT, BLANK_PIN);
            pulse(XLAT_PORT, XLAT_PIN);
            if (firstCycleFlag) {
                pulse(SCLK_PORT, SCLK_PIN);
                firstCycleFlag = 0;
            }
            break;
        } else {
            if (!(Data_Counter > TLC5940_N * 192 - 1)) {
                if (gsData[Data_Counter])
                    setHigh(SIN_PORT, SIN_PIN);
                else
                    setLow(SIN_PORT, SIN_PIN);
                pulse(SCLK_PORT, SCLK_PIN);
                Data_Counter++;
            }
        }
        pulse(GSCLK_PORT, GSCLK_PIN);
        GSCLK_Counter++;
    }
}
Example #2
0
void TLC5940_Init(void) {
	setOutput(GSCLK_DDR, GSCLK_PIN);
	setOutput(SCLK_DDR, SCLK_PIN);
	setOutput(DCPRG_DDR, DCPRG_PIN);
	setOutput(VPRG_DDR, VPRG_PIN);
	setOutput(XLAT_DDR, XLAT_PIN);
	setOutput(BLANK_DDR, BLANK_PIN);
	setOutput(SIN_DDR, SIN_PIN);
	
	setLow(GSCLK_DDR, GSCLK_PIN);
	setLow(SCLK_PORT, SCLK_PIN);
	setLow(DCPRG_PORT, DCPRG_PIN);
	setHigh(VPRG_PORT, VPRG_PIN);
	setLow(XLAT_PORT, XLAT_PIN);
	setHigh(BLANK_PORT, BLANK_PIN);

	// CTC with OCR0A as TOP
	TCCR0A = (1 << WGM01);
	// clk_io/1024 (From prescaler)
	TCCR0B = ((1 << CS02) | (1 << CS00));
	// Generate an interrupt every 4096 clock cycles
	OCR0A = 3;
	// Enable Timer/Counter0 Compare Match A interrupt
	TIMSK0 |= (1 << OCIE0A);
}
Example #3
0
int PS2Emu::devRead(unsigned char *ret) {
    unsigned char data = 0x00;
    unsigned char p = 0x01;

    // wait for the host to release the clock
    while (digitalRead(dat) == HIGH);
    while (digitalRead(clk) == LOW);

    // read start bit
    delayMicroseconds(cell/2);
    setLow(clk);
    delayMicroseconds(cell);
    setHigh(clk);
    delayMicroseconds(cell/2);

    // read data bits
    for (int i=0; i<8; i++) {
        if (digitalRead(dat) == HIGH) {
            data = data | (1 << i);
            p = p ^ 1;
        }
        delayMicroseconds(cell/2);
        setLow(clk);
        delayMicroseconds(cell);
        setHigh(clk);
        delayMicroseconds(cell/2);
    }

    // read parity bit
    if (digitalRead(dat) != p) {
        return PARITY;
    }
    delayMicroseconds(cell/2);
    setLow(clk);
    delayMicroseconds(cell);
    setHigh(clk);
    delayMicroseconds(cell/2);

    // send 'ack' bit
    setLow(dat);
    delayMicroseconds(cell/2);
    setLow(clk);
    delayMicroseconds(cell);
    setHigh(clk);
    setHigh(dat);

    // the Arduino has large pull-up resistors so give the data line
    // some time to release
    delayMicroseconds(100);

    *ret = data;
    return SUCCESS;
}
Example #4
0
void loop(void)
{
	setHigh(LED);
	delayMs(500);
	setLow(LED);
	delayMs(500);
}
Example #5
0
void TLC5940_Init(void) {
    setOutput(GSCLK_DDR, GSCLK_PIN);
    setOutput(SCLK_DDR, SCLK_PIN);
    setOutput(DCPRG_DDR, DCPRG_PIN);
    setOutput(VPRG_DDR, VPRG_PIN);
    setOutput(XLAT_DDR, XLAT_PIN);
    setOutput(BLANK_DDR, BLANK_PIN);
    setOutput(SIN_DDR, SIN_PIN);

    setLow(GSCLK_PORT, GSCLK_PIN);
    setLow(SCLK_PORT, SCLK_PIN);
    setLow(DCPRG_PORT, DCPRG_PIN);
    setHigh(VPRG_PORT, VPRG_PIN);
    setLow(XLAT_PORT, XLAT_PIN);
    setHigh(BLANK_PORT, BLANK_PIN);
}
btSIter *btSetFullRangeIter(btSIter *iter, bt *btr, bool asc, cswc_t *w) {
	cswc_t W; // used in setHigh()
	if (!btr->root || !btr->numkeys)                      return NULL;
	if (!w) w = &W;
	ai_obj *aL = &w->wf.alow, *aH = &w->wf.ahigh;
	if (!assignMinKey(btr, aL) || !assignMaxKey(btr, aH)) return NULL;
	btk_t btk;
	bool med;
	uint32 ksize;
	SETITER8R(iter, btr, asc, iter_leaf, iter_leaf_rev, iter_node, iter_node_rev);
	siter->scan = 1;
	setHigh(siter, asc ? aH : aL, btr->s.ktype);
	char *bkey  = createBTKey(asc ? aL : aH,
							  &med, &ksize, btr, &btk); //DEST 030
	if (!bkey)                                            goto frangeiter_err;
	bt_n *x  = NULL;
	int i = -1;
	uchar *stream = setIter(btr, bkey, siter, asc ? aL : aH, &x, &i, asc);
	destroyBTKey(bkey, med);                             /* DESTROYED 030 */
	if (!stream && siter->missed)                         return siter;//IILMISS
	if (!streamToBTEntry(stream, siter, x, i))            goto frangeiter_err;
	if (btr->dirty_left) siter->missed = 1; // FULL means 100% FULL
	return siter;

frangeiter_err:
	btReleaseRangeIterator(siter);
	return NULL;
}
/** Main program entry point. This routine configures the hardware required by the application, then
 *  enters a loop to run the application tasks in sequence.
 */
int main(void)
{
	SetupHardware();
setOut(LED_PIN);
	puts_P(PSTR( "Still Image Host Demo running.\r\n" ));

//	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
	sei();

	uint32_t count = 0;
	for (;;)
	{
		Camera_Task();
		USB_USBTask();
		if(count++ >= 1000)
		{
			count = 0;
			if(isOut(LED_PIN) && !isHigh(LED_PIN))
			{
				setHigh(LED_PIN);
			}
			else
			{
				setLow(LED_PIN);
			}
		}
	}
}
btSIter *btGetXthIter(bt *btr, ai_obj *alow, ai_obj *ahigh, long oofst, bool asc) {
	ulong ofst = (ulong)oofst;                             //DEBUG_GET_XTH_ITER
	if (!btr->root || !btr->numkeys) return NULL;
	CR8ITER8R(btr, asc, iter_leaf, iter_leaf_rev, iter_node, iter_node_rev);
	setHigh(siter, asc ? ahigh : alow, btr->s.ktype);
	if (XthIterFind(siter, alow, ahigh, ofst, asc, btr)) siter->empty = 0;
	return siter;
}
Example #9
0
    NESNumber& NESNumber::operator *= (float k) {
        float result = this->toFloat() * k;
        NESNumber shadow = NESNumber::fromFloat(result);

        setHigh(shadow.getHigh());
        setLow(shadow.getLow());

        return *this;
    }
Example #10
0
// Set direction for Right Motor 0 forward, 1 backward
void setDirectionMotorR(uint8_t dir){

	if(dir){
		setLow(PORTD, BRIDGE_A4);
		TCCR1A &= ~(1 << 4); 
	}else{
		setHigh(PORTD, BRIDGE_A4);
		TCCR1A |= 1 << 4; 
	}
}
Example #11
0
int PS2Emu::hostWrite(unsigned char data) {
    unsigned char p = 0x01;

    // inhibit device transmission
    setLow(clk);
    delayMicroseconds(100);
    // send request to communicate with device
    setLow(dat);
    //delayMicroseconds(cell/2); // could be wrong
    setHigh(clk);

    // send data
    for (int i=0; i<8 ; i++) {
        while (digitalRead(clk) == HIGH);
        if (data & (1 << i)) {
            setHigh(dat);
            p = p ^ 1;
        } else {
            setLow(dat);
        }
        while (digitalRead(clk) == LOW);
    }

    // send parity bit
    while (digitalRead(clk) == HIGH);
    if (p) {
        setHigh(dat);
    } else {
        setLow(dat);
    }
    while (digitalRead(clk) == LOW);

    // send stop bit
    while (digitalRead(clk) == HIGH);
    setHigh(dat);
    while (digitalRead(clk) == LOW);

    // eat the 'ack' bit
    while (digitalRead(clk) == HIGH);
    while (digitalRead(clk) == LOW);

    return SUCCESS;
}
Example #12
0
void TLC5940_ClockInDC(void) {
    setHigh(DCPRG_PORT, DCPRG_PIN);
    setHigh(VPRG_PORT, VPRG_PIN);

    uint8_t Counter = 0;

    for (;;) {
        if (Counter > TLC5940_N * 96 - 1) {
            pulse(XLAT_PORT, XLAT_PIN);
            break;
        } else {
            if (dcData[Counter])
                setHigh(SIN_PORT, SIN_PIN);
            else
                setLow(SIN_PORT, SIN_PIN);
            pulse(SCLK_PORT, SCLK_PIN);
            Counter++;
        }
    }
}
Example #13
0
char battery_status()
{
  char stat = 0;
  setIn(CHARGE_STATUS_PIN);
  setHigh(CHARGE_STATUS_PIN);
  _delay_ms(10);
  if(!getPin(CHARGE_STATUS_PIN)) stat = 1;
  setLow(CHARGE_STATUS_PIN);
  _delay_ms(10);
  if(getPin(CHARGE_STATUS_PIN)) stat = 2;
  return stat;
}
btSIter *btGetFullXthIter(bt *btr, long oofst, bool asc, cswc_t *w, long lim) {
	ulong ofst = (ulong)oofst;
	cswc_t W; // used in setHigh()
	if (!btr->root || !btr->numkeys)                      return NULL;
	if (!w) w = &W;
	ai_obj *aL = &w->wf.alow, *aH = &w->wf.ahigh;
	if (!assignMinKey(btr, aL) || !assignMaxKey(btr, aH)) return NULL;
	CR8ITER8R(btr, asc, iter_leaf, iter_leaf_rev, iter_node, iter_node_rev);
	setHigh(siter, asc ? aH : aL, btr->s.ktype);
	if (btScionFind(siter, btr->root, ofst, btr, asc, w, lim)) siter->empty = 0;
	return siter;
}
Example #15
0
GPIO::GPIO(LPC1758_GPIO_Type gpioId) :
    mPortNum(gpioId >> __PNSB),
    mPinNum(gpioId & (0xFF >> (8 - __PNSB))) // Should result in (gpioId & 0x1F) if __PNSB is value of 5
{
    uint32_t gpioMemBases[] = { LPC_GPIO0_BASE, LPC_GPIO1_BASE, LPC_GPIO2_BASE, LPC_GPIO3_BASE, LPC_GPIO4_BASE};
    mpOurGpio = (LPC_GPIO_TypeDef*) gpioMemBases[mPortNum];

    // Select GPIO configuration
    volatile uint32_t *pinsel = &(LPC_PINCON->PINSEL0);
    pinsel += (2 * mPortNum);
    *pinsel &= ~(3 << (2*mPinNum));
}

/** @{ Simple functions*/
void GPIO::setAsInput(void)   {   mpOurGpio->FIODIR &= ~(1 << mPinNum);          }
void GPIO::setAsOutput(void)  {   mpOurGpio->FIODIR |= (1 << mPinNum);           }
bool GPIO::read(void) const   {   return !!(mpOurGpio->FIOPIN & (1 << mPinNum)); }
void GPIO::setHigh(void)      {   mpOurGpio->FIOSET = (1 << mPinNum);            }
void GPIO::setLow(void)       {   mpOurGpio->FIOCLR = (1 << mPinNum);            }
void GPIO::set(bool on)       {   (on) ? setHigh() : setLow();                   }
/** @} */

void GPIO::enablePullUp()
{
    volatile uint32_t *pinmode = &(LPC_PINCON->PINMODE0);
    pinmode += (2 * mPortNum);
    *pinmode &= ~(3 << (2*mPinNum));
}
void GPIO::enablePullDown()
{
    volatile uint32_t *pinmode = &(LPC_PINCON->PINMODE0);
    pinmode += (2 * mPortNum);
    *pinmode |= (3 << (2*mPinNum));
}
void GPIO::disablePullUpPullDown()
{
    volatile uint32_t *pinmode = &(LPC_PINCON->PINMODE0);
    pinmode += (2 * mPortNum);
    *pinmode &= ~(3 << (2*mPinNum));
    *pinmode |=  (2 << (2*mPinNum));
}
void GPIO::enableOpenDrainMode(bool openDrain)
{
    volatile uint32_t *pinmode_od = &(LPC_PINCON->PINMODE_OD0);
    pinmode_od += mPortNum;
    if(openDrain) {
        *pinmode_od |= (1 << mPinNum);
    }
    else {
        *pinmode_od &= ~(1 << mPinNum);
    }
}
char hardware_flashlight(char on)
{
    setOut(LED_PIN);
    
    if(on)
    {
        setLow(LED_PIN);
        return 1;
    }
    
    setHigh(LED_PIN);
    return 0;
}
Example #17
0
int main(void) {
	TLC5940_Init();
	TLC5940_ClockInDC();
	setHigh(DDRC,PC3);
	setHigh(PORTC,PC3);
	
	// Enable Gndefined reference to `_delay_ms'lobal Interrupts
	sei();

	for (;;) {
		gsData[12*15]=1;
		_delay_ms(1000);
		gsData[12*12]=1;
		_delay_ms(1000);
		gsData[12*15]=0;
		_delay_ms(1000);
		gsData[12*12]=0;
		_delay_ms(1000);
//		gsData[12*14]=1;
//		_delay_ms(1000);
//		gsData[12*11]=1;
//		_delay_ms(1000);
//		gsData[12*14]=0;
//		_delay_ms(1000);
//		gsData[12*11]=0;
//		_delay_ms(1000);
//		gsData[12*13]=1;
//		_delay_ms(1000);
//		gsData[12*10]=1;
//		_delay_ms(1000);
//		gsData[12*13]=0;
//		_delay_ms(1000);
//		gsData[12*10]=0;
//		_delay_ms(1000);
	}
	
	return 0;
}
void hardware_init(void)
{
    setOut(POWER_HOLD_PIN); // Hold PWR on
    setLow(POWER_HOLD_PIN);

#ifdef POWER_AUX_PIN
    setOut(POWER_AUX_PIN); // Hold AUX PWR on
    setLow(POWER_AUX_PIN);
#endif

#ifdef USB_ENABLE_PIN
    setOut(USB_ENABLE_PIN); // Hold AUX PWR on
    setLow(USB_ENABLE_PIN);
#endif

    setOut(LED_PIN);  // Red Flashlight
    setHigh(LED_PIN); // off
    setOut(IR_PIN);  // IR Transmitter
    setHigh(IR_PIN); // off

    hardware_USB_Enable();

    hardware_USB_SetDeviceMode();
}
Example #19
0
bool HSV::load() {
	std::ifstream infile;

	char data[100];
	infile.open(DIRECTORY + name + FILE_EXTENSION);
	if (infile.is_open()) {
		infile >> data;
		infile.close();

		std::string content(data);
		std::vector<std::string> v = splitString(content, ';');
		setLow(std::stoi(v[0]), std::stoi(v[1]), std::stoi(v[2]));
		setHigh(std::stoi(v[3]), std::stoi(v[4]), std::stoi(v[5]));

		return true;
	} else {
        void
        TPinOpenDrain<WatchDog_T, Port_T, Bit_T>::powerUp(void)
        {
          // GPIOx Peripheral clock enable. Multiple calls are not harmful.
          RCC_APB2PeriphClockCmd((RCC_APB2Periph_GPIOA << GPIO_PortNo), ENABLE);

          GPIO_InitTypeDef GPIO_InitStructure;

          // Configure pin in output push/pull mode
          GPIO_InitStructure.GPIO_Pin = GPIO_BitMask;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
          GPIO_Init(GPIO_Address, &GPIO_InitStructure);

          // start pin as high
          setHigh();
        }
Example #21
0
void IR::high38(unsigned int time)
{
    uint16_t count = 0;
    
    cli();

    while (count <= time / (1000 / 38))
    {
        setLow(IR_PIN);
        _delay_us((1000 / 38 / 2));
        setHigh(IR_PIN);
        _delay_us((1000 / 38 / 2));
        count++;
    }
    
    sei();
}
Example #22
0
    bool IoGPIO::save(Image & image, JSON & data)
    {
        // ------------------------
        // Trigger the GPIO pin
        
        for(int i = 0; i < m_periods; i++)
        {
            // ---------------------------
            // Put pin high for some time
            
            setHigh();
            usleep(m_periodTime);
            setLow();
            usleep(m_periodTime);
        }

        return true;
    }
Example #23
0
void PlotLine::copy (PlotLine *d)
{
  d->getColor(color);
  
  setType(d->getType());
  
  d->getLabel(label);
  
  setScaleFlag(d->getScaleFlag());

  setColorFlag(d->getColorFlag());

  d->getData(data);

  d->getDateList(dateList);

  setHigh(d->getHigh());
  setLow(d->getLow());
}
Example #24
0
void hardware_off(void)
{
  if(battery_status() == 0)
  {
    // If USB is used, detach from the bus
    USB_Detach();

    // Disable all interrupts
    cli();

    // Shutdown
    setHigh(POWER_HOLD_PIN);

    for(;;);
  }
  else // Plugged in
  {
    // Charging screen //
    chargingScreen();
  }
}
btSIter *btSetRangeIter(btSIter * iter, bt *btr, ai_obj *alow, ai_obj *ahigh, bool asc) {
	if (!btr->root || !btr->numkeys)           return NULL;
	btk_t btk;
	bool med;
	uint32 ksize;           //bt_dumptree(btr, btr->ktype);
	SETITER8R(iter, btr, asc, iter_leaf, iter_leaf_rev, iter_node, iter_node_rev);
	setHigh(siter, asc ? ahigh : alow, btr->s.ktype);
	char    *bkey  = createBTKey(asc ? alow : ahigh,
								 &med, &ksize, btr, &btk); //D032
	if (!bkey)                                 goto rangeiter_err;
	bt_n *x  = NULL;
	int i = -1;
	uchar *stream = setIter(btr, bkey, siter, asc ? alow : ahigh, &x, &i, asc);
	destroyBTKey(bkey, med);                                /* DESTROYED 032 */
	if (!streamToBTEntry(stream, siter, x, i)) goto rangeiter_err;
	return siter;

rangeiter_err:
	btReleaseRangeIterator(siter);
	return NULL;
}
void hardware_off(void)
{
    hardware_flashlight(0);
    if(battery_status() == 0)
    {
        //if(timer.cableIsConnected())
        //{
        //    menu.message(STR("Error: Cable"));
        //}
        //else
        //{
            shutter_off();

            // Save the current time-lapse settings to nv-mem
            timer.saveCurrent();

            // If USB is used, detach from the bus
            USB_Detach();

            // Shutdown bluetooth
            bt.disconnect();
            bt.sleep();

            // Disable all interrupts
            cli();

            // Shutdown
            setHigh(POWER_HOLD_PIN);

            FOREVER;
        //}
    } 
    else // Plugged in
    {
        // Charging screen //
        clock.sleeping = 1;
        menu.spawn((void *) batteryStatus);
    }
}
Example #27
0
    bool IoGPIO::save(Image & image, JSON & data)
    {
        if(throttle.canExecute())
        {
            // ------------------------
            // Trigger the GPIO pin

            LINFO << "IoGPIO: triggering GPIO pin " + helper::to_string(m_pin);

            for(int i = 0; i < m_periods; i++)
            {
                // ---------------------------
                // Put pin high for some time

                setHigh();
                usleep(m_periodTime);
                setLow();
                usleep(m_periodTime);
            }
        }

        return true;
    }
Example #28
0
void lcdInit(const unsigned short int* param)
{
	rs = *param;
	param++;
	rw = *param;
	param++;
	en = *param;
	param++;
	pwr = *param;
	param++;
	ioStart = *param;
	
	pinMode(rs, OUTPUT);
	pinMode(rw, OUTPUT);
	pinMode(en, OUTPUT);
	pinMode(pwr, OUTPUT);
	pinMode(ioStart, OUTPUT);
	pinMode(ioStart + 1, OUTPUT);
	pinMode(ioStart + 2, OUTPUT);
	pinMode(ioStart + 3, OUTPUT);
	
	setHigh(pwr);
	
}
Example #29
0
int main() {
	uchar i;
	setHigh(DDRB, PORTB0); // make PB0 output port
	setHigh(PORTB, PORTB0); // indicate that the micro-controller is active
	
	// motor frequency timer
	TCCR1B |= 1 << CS12;
	
	// motor output pins
	setHigh(DDRD,PORTD4);
	setHigh(DDRD,PORTD5);
	setHigh(DDRD,PORTD6);
	setHigh(DDRD,PORTD7);

	wdt_enable(WDTO_1S); // enable 1s watchdog timer

	usbInit();
	
	usbDeviceDisconnect(); // enforce re-enumeration
	for(i = 0; i<250; i++) { // wait 500 ms
		wdt_reset(); // keep the watchdog happy
		_delay_ms(2);
	}
	usbDeviceConnect();
	
	sei(); // Enable interrupts after re-enumeration
	
	initMotor();
	
	while(1) {
		wdt_reset(); // keep the watchdog happy
		usbPoll();
		
		/*motor functions*/
		motor();
	}
	
	return 0;
}
Example #30
0
 NESNumber::NESNumber(const double& value) {
     NESNumber converted = NESNumber::fromDouble(value);
     setHigh(converted.getHigh());
     setLow(converted.getLow());
 }