Esempio n. 1
0
// h/w clock reader - initialise data pointers for ISR and start timers
// timer2 creates clock output for external reader
// timer4 reads data bit values
// period_us == clock for reader
// ticks == clock periods per bit
// bits == number of bits to read
// oneshot must be set if we are reading data in response to RWD, so no repeating stream
BOOL read_ASK_HW_clock(unsigned int period, unsigned int ticks, BYTE *data, unsigned int bits, unsigned int timeout_us, BOOL oneshot)
{
    unsigned long dwell, time;
    BYTE count;
    
    Manchester_Error= FALSE;

    // if we're manchester or bi-phase encoding, we want to clock twice as fast so we can read both halves of the bit
    if(RFIDlerConfig.Manchester || RFIDlerConfig.BiPhase)
    {
        ticks /= 2;
        HW_Bits= (unsigned long) bits * 2;
    }
    else
       HW_Bits= (unsigned long) bits;

    // point globals at data for ISR
    EMU_Data= data;

    memset(EMU_Data, '\0', bits);

    // stop USB interfering
    USBMaskInterrupts();

    // start clock if not already running
    if(!mGetLED_Clock() == mLED_ON)
    {
        InitHWReaderClock(OC_TOGGLE_PULSE, period / 2L, period, RWD_STATE_ACTIVE);

        // give reader time to wake up and settle
        Delay_us((RFIDlerConfig.FrameClock * RFIDlerConfig.RWD_Wake_Period) / 100);
    }

    // align ourselves to reader's bit period by waiting until the end of a pulse
    GetTimer_us(RESET);
    count= READER_DATA;
    while(count == READER_DATA)
        if(GetTimer_us(NO_RESET) > timeout_us)
            return FALSE;

    // convert to ticks
    period= CONVERT_TO_TICKS(period);

    // biphase cannot auto-align when it detects a half-bit error, so we must align
    // on a full bit before we start
    if(RFIDlerConfig.BiPhase && !oneshot)
    {
        dwell= period * ticks * 2;
        count= 0;
        while((time= get_reader_gap(timeout_us)))
        {
            if(!time || count == 255)
                return;
            else
                if(approx(time, dwell, 10))
                    break;
            ++count;
        }
    }

    // wait for half the bit period so we sample mid-tick, not just as bit is toggling
    dwell= ((period * ticks) / 2L);
    GetTimer_ticks(RESET);
    //DEBUG_PIN_2= HIGH;
    while(GetTimer_ticks(NO_RESET) < dwell)
            ;

    // reset timer for external timeouts
    GetTimer_us(RESET);

    //DEBUG_PIN_2= LOW;
    
    // re-start reader ISR to read this bit if required
    InitHWReaderISR(period * ticks - 1L, TRUE);

    return TRUE;
}
Esempio n. 2
0
/*延时nms函数*/
void Delay_ms(uint16_t xms)
{
	while(xms--) { Delay_us(1000); }
}
Esempio n. 3
0
static bool DHT_read(void)
{
    uint8_t laststate = 1;
    uint8_t counter = 0;
    uint8_t j = 0, i;
    SysTick_t currenttime;

    // Check if sensor was read less than two seconds ago and return early
    // to use last reading.
    currenttime = GetSystemTick();
    if (currenttime < _lastreadtime) {
        // ie there was a rollover
        _lastreadtime = 0;
    }
    if (!firstreading && ((currenttime - _lastreadtime) < 2000)) {
        return true; // return last correct measurement
        //delay(2000 - (currenttime - _lastreadtime));
    }
    firstreading = false;
    /*
      Serial.print("Currtime: "); Serial.print(currenttime);
      Serial.print(" Lasttime: "); Serial.print(_lastreadtime);
    */
    _lastreadtime = GetSystemTick();

    data[0] = data[1] = data[2] = data[3] = data[4] = 0;

    // pull the pin high and wait 250 milliseconds
    // DHT_pinMode(GPIO_Mode_IPU);
    // Delay_ms(250);

    // now pull it low for ~20 milliseconds
    DHT_pinMode(GPIO_Mode_Out_PP);
    GPIO_ResetBits(DHT11_PORT, DHT11_PIN);
    Delay_ms(20);

    __disable_irq();
    // GPIO_SetBits(DHT11_PORT, DHT11_PIN);
    // Delay_us(40);
    DHT_pinMode(GPIO_Mode_IPU);

    // uint8_t max_counter = 0, min_counter = 200;
    // read in timings
    for ( i = 0; i < MAXTIMINGS; i++) {
        counter = 0;
        while (GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN) == laststate) {
            counter++;
            Delay_us(3);
            if (counter == 255) {
                break;
            }
        }
        laststate = GPIO_ReadInputDataBit(DHT11_PORT, DHT11_PIN);

        if (counter == 255) break;

        // ignore first 3 transitions
        if ((i >= 4) && ((i & 1) == 0)) {
            // shove each bit into the storage bytes
            data[j / 8] <<= 1;
            if (counter > 8)
                data[j / 8] |= 1;
            j++;
            // if(counter > max_counter)
            //   max_counter = counter;
            // if(counter < min_counter)
            //   min_counter = counter;
        }

    }

    __enable_irq();
    // DBG_MSG("Counter: %d %d", min_counter, max_counter);

    /*
    Serial.println(j, DEC);
    Serial.print(data[0], HEX); Serial.print(", ");
    Serial.print(data[1], HEX); Serial.print(", ");
    Serial.print(data[2], HEX); Serial.print(", ");
    Serial.print(data[3], HEX); Serial.print(", ");
    Serial.print(data[4], HEX); Serial.print(" =? ");
    Serial.println(data[0] + data[1] + data[2] + data[3], HEX);
    */

    // check we read 40 bits and that the checksum matches
    if ((j >= 40) &&
            (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) ) {
        return true;
    }


    return false;

}
Esempio n. 4
0
// Reader clock ISR
// also process RWD commands while we toggle clock line
void __ISR(_OUTPUT_COMPARE_5_VECTOR, ipl6auto) reader_clock_tick (void)
{
    static unsigned int count= 0;
    static unsigned int bcount= 0;

    // Clear interrupt flag
    mOC5ClearIntFlag();
    
    mLED_Clock_On();

    // process RWD commands (if any)
    switch (RWD_State)
    {
        case RWD_STATE_INACTIVE:
        case RWD_STATE_ACTIVE:
            //DEBUG_PIN_4= !DEBUG_PIN_4;
            break;

        case RWD_STATE_GO_TO_SLEEP:
            //DEBUG_PIN_4= !DEBUG_PIN_4;
            //DEBUG_PIN_4= !DEBUG_PIN_4;
            // initial shutdown of coil to restart tag
            READER_CLOCK_ENABLE_OFF();
            COIL_OUT_LOW();
            // time small amounts with ticks, large with uS
            if(RWD_Sleep_Period > MAX_TIMER5_TICKS)
                Delay_us(CONVERT_TICKS_TO_US(RWD_Sleep_Period));
            else
            {
                WriteTimer5(0);
                while(GetTimer_ticks(NO_RESET) < RWD_Sleep_Period)
                    ;
            }
            count= 0;
            RWD_State= RWD_STATE_WAKING;
            // restart clock only if we have a wake period
            if(RWD_Wake_Period)
                READER_CLOCK_ENABLE_ON();
            break;

        case RWD_STATE_WAKING:
            //DEBUG_PIN_4= !DEBUG_PIN_4;
            // leave coil running for wakeup period
            if(count == RWD_Wake_Period)
            {
                count= 0;
                bcount = 0;
                if(*RWD_Command_ThisBit != '*')
                    RWD_State= RWD_STATE_START_SEND;
                else
                    RWD_State= RWD_STATE_ACTIVE;
            }
            else
                count++;
            break;

        case RWD_STATE_START_SEND:
            //DEBUG_PIN_4= !DEBUG_PIN_4;
            // send initial gap
            // stop modulation of coil and wait
            READER_CLOCK_ENABLE_OFF();
            COIL_OUT_LOW();
            count= 0;
            if(RWD_Barrier)
		RWD_State= RWD_STATE_SENDING_BARRIER_LOW;
            else
                RWD_State= RWD_STATE_SENDING_BIT_LOW;
            //DEBUG_PIN_4= !DEBUG_PIN_4;
            // restart clock
            //READER_CLOCK_ENABLE_ON();
            break;

        case RWD_STATE_SENDING_BIT_HIGH:
            //DEBUG_PIN_4= !DEBUG_PIN_4;
            // clock running for bit period, then wait for gap period
            if((*RWD_Command_ThisBit && count == RWD_One_Period) || (!*RWD_Command_ThisBit && count == RWD_Zero_Period))
            {                    
		count= 0;
                if(*RWD_Command_ThisBit == '*')
                    RWD_State= RWD_STATE_POST_WAIT;
		else if(RWD_Barrier && bcount == 7)
		    RWD_State= RWD_STATE_SENDING_BARRIER_LOW;
                else
                    RWD_State= RWD_STATE_SENDING_BIT_LOW;
		READER_CLOCK_ENABLE_OFF();
                COIL_OUT_LOW();
                bcount++;
                if(bcount == 8)
                   bcount = 0;
		          
            }
            else
                count++;
            break;

	case RWD_STATE_SENDING_BIT_LOW:

            if((*RWD_Command_ThisBit && count == RWD_One_Gap_Period) || (!*RWD_Command_ThisBit && count == RWD_Zero_Gap_Period))
            {
		
                ++RWD_Command_ThisBit;
                count= 0;

                RWD_State= RWD_STATE_SENDING_BIT_HIGH;
                // restart clock

               READER_CLOCK_ENABLE_ON();
            }
            else
                count++;
            break;

	case RWD_STATE_SENDING_BARRIER_HIGH:

            if(count == RWD_One_Barrier_Period){
                count= 0;
                RWD_State= RWD_STATE_SENDING_BIT_LOW;
		READER_CLOCK_ENABLE_OFF();
                COIL_OUT_LOW();
	    }else
                count++;
            break;

	case RWD_STATE_SENDING_BARRIER_LOW:

            if(count == RWD_Zero_Barrier_Period){
                count= 0;
                RWD_State= RWD_STATE_SENDING_BARRIER_HIGH;
		READER_CLOCK_ENABLE_ON();
	    }else
                count++;
            break;

        case RWD_STATE_POST_WAIT:
            //DEBUG_PIN_4= !DEBUG_PIN_4;
            // coil running for forced post-command wait period
            if(count == RWD_Post_Wait)
            {
                count= 0;
                RWD_State= RWD_STATE_ACTIVE;
            }
            else
                count++;
            break;

        default:
            break;
    }
}
void Delay_ms(int i){
	while(i--)
		Delay_us(1000);
}
void main()
{

    P0 = OFF;                           // Turn Off diodes on PORT0
    P1 = OFF;                           // Turn Off diodes on PORT1
    P2 = OFF;                           // Turn Off diodes on PORT2
    P3 = OFF;                           // Turn Off diodes on PORT3
    Delay_ms(ONE_SEC);

    while(1)
    {
        display_W();
        P2 = OFF;
        Delay_us(1000);
        display_E();
        P2 = OFF;
        Delay_us(1000);
        display_L();
        P2 = OFF;
        Delay_us(1000);
        display_C();
        P2 = OFF;
        Delay_us(1000);
        display_O();
        P2 = OFF;
        Delay_us(1000);
        display_M();
        P2 = OFF;
        Delay_us(1000);
        display_E();
        P2 = OFF;
        Delay_us(1000);
        display_T();
        P2 = OFF;
        Delay_us(1000);
        display_O();
        P2 = OFF;
        Delay_us(1000);
        display_T();
        P2 = OFF;
        Delay_us(1000);
        display_E();
        P2 = OFF;
        Delay_us(1000);
        display_C();
        P2 = OFF;
        Delay_us(1000);
        display_H();
        P2 = OFF;
        Delay_us(1000);
        display_N();
        P2 = OFF;
        Delay_us(1000);
        display_O();
        P2 = OFF;
        Delay_us(1000);
        display_B();
        P2 = OFF;
        Delay_us(1000);
        display_L();
        P2 = OFF;
        Delay_us(1000);
        display_A();
        P2 = OFF;
        Delay_us(1000);
        display_S();
        P2 = OFF;
        Delay_us(1000);
        display_T();
        P2 = OFF;
        Delay_us(1000);
        /*display_-();
        P2 = OFF;
        Delay_us(1000);
        display_2();
        P2 = OFF;
        Delay_us(1000);
        display_0();
        P2 = OFF;
        Delay_us(1();
        P2 = OFF;
        Delay_us(1000);
        display_3();
        P2 = OFF;
        Delay_us(1000);*/
    }
}
display_E()
{
    //--------------col-1--------------
    P2 = ON;                             // Turn ON diodes on PORT2
    Delay_us(U_SEC);
    P2 = OFF;                            // Turn Off diodes on PORT2
    //--------------col-2--------------
    P2_0_bit = ON;
    P2_3_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-3--------------
    P2_0_bit = ON;
    P2_3_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-4--------------
    P2_0_bit = ON;
    P2_3_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-5--------------
    P2_0_bit = ON;
    P2_3_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-6--------------
    P2_0_bit = ON;
    P2_3_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-7--------------
    P2_0_bit = ON;
    P2_3_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-8--------------
    P2_0_bit = ON;
    P2_3_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-9--------------
    P2_0_bit = ON;
    P2_3_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-10--------------
    P2_3_bit = OFF;
    P2_0_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-11--------------
    P2_0_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-12--------------
    P2_0_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-13--------------
    P2_0_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-14--------------
    P2_0_bit = ON;
    P2_1_bit = ON;
    P2_6_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    P2_0_bit = OFF;
    P2_1_bit = OFF;
    P2_6_bit = OFF;
    P2_7_bit = OFF;
    //---------------------------------
}
Esempio n. 8
0
static uint8_t lcd_read(uint8_t rs)
{
	uint8_t data;

#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
	if (rs)
		lcd_waitbusy();
	if (PrevCmdInvolvedAddressCounter)
	{
		Delay_us(5);
		PrevCmdInvolvedAddressCounter=0;
	}
#endif

	if (rs)
	{
		lcd_rs_port_high();                             // RS=1: Read Data
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
		PrevCmdInvolvedAddressCounter=1;
#endif
	}
	else lcd_rs_port_low();                           // RS=0: Read Busy Flag


	lcd_rw_port_high();                               // RW=1: Read Mode

#if LCD_BITS==4
	lcd_db7_ddr_low();                              // Configure Data Pins as Input
	lcd_db6_ddr_low();
	lcd_db5_ddr_low();
	lcd_db4_ddr_low();

	lcd_e_port_high();                              // Read High Nibble First
	Delay_ns(500);

	data=lcd_db4_pin_get() << 4 | lcd_db5_pin_get() << 5 |
		lcd_db6_pin_get() << 6 | lcd_db7_pin_get() << 7;

	lcd_e_port_low();
	Delay_ns(500);

	lcd_e_port_high();                              // Read Low Nibble
	Delay_ns(500);

	data|=lcd_db4_pin_get() << 0 | lcd_db5_pin_get() << 1 |
		lcd_db6_pin_get() << 2 | lcd_db7_pin_get() << 3;

	lcd_e_port_low();

	lcd_db7_ddr_high();                             // Configure Data Pins as Output
	lcd_db6_ddr_high();
	lcd_db5_ddr_high();
	lcd_db4_ddr_high();

	lcd_db7_port_high();                            // Pins High (Inactive)
	lcd_db6_port_high();
	lcd_db5_port_high();
	lcd_db4_port_high();
#else //using 8-Bit-Mode
	lcd_db7_ddr_low();                              // Configure Data Pins as Input
	lcd_db6_ddr_low();
	lcd_db5_ddr_low();
	lcd_db4_ddr_low();
	lcd_db3_ddr_low();
	lcd_db2_ddr_low();
	lcd_db1_ddr_low();
	lcd_db0_ddr_low();

	lcd_e_port_high();
	Delay_ns(500);

	data=lcd_db7_pin_get() << 7 | lcd_db6_pin_get() << 6 |
		lcd_db5_pin_get() << 5 | lcd_db4_pin_get() << 4 |
		lcd_db3_pin_get() << 3 | lcd_db2_pin_get() << 2 |
		lcd_db1_pin_get() << 1 | lcd_db0_pin_get();

	lcd_e_port_low();

	lcd_db7_ddr_high();                             // Configure Data Pins as Output
	lcd_db6_ddr_high();
	lcd_db5_ddr_high();
	lcd_db4_ddr_high();
	lcd_db3_ddr_high();
	lcd_db2_ddr_high();
	lcd_db1_ddr_high();
	lcd_db0_ddr_high();

	lcd_db7_port_high();                            // Pins High (Inactive)
	lcd_db6_port_high();
	lcd_db5_port_high();
	lcd_db4_port_high();
	lcd_db3_port_high();
	lcd_db2_port_high();
	lcd_db1_port_high();
	lcd_db0_port_high();
#endif

	lcd_rw_port_low();

#if (WAIT_MODE==0 || RW_LINE_IMPLEMENTED==0)
	if (rs)
		Delay_us(40);
	else Delay_us(1);
#endif
	return data;
}
Esempio n. 9
0
/*************************************************************************
  Low-level function to write byte to LCD controller
Input:    data   byte to write to LCD
rs     1: write data
0: write instruction
Returns:  none
 *************************************************************************/
static void lcd_write(uint8_t data,uint8_t rs)
{
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
	lcd_waitbusy();
	if (PrevCmdInvolvedAddressCounter)
	{
		Delay_us(5);
		PrevCmdInvolvedAddressCounter=0;
	}
#endif

	if (rs)
	{
		lcd_rs_port_high();                            // RS=1: Write Character
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
		PrevCmdInvolvedAddressCounter=1;
#endif
	}
	else
	{
		lcd_rs_port_low();                          // RS=0: Write Command
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
		PrevCmdInvolvedAddressCounter=0;
#endif
	}

#if LCD_BITS==4
	lcd_db7_port_set(data&_BV(7));                  //Output High Nibble
	lcd_db6_port_set(data&_BV(6));
	lcd_db5_port_set(data&_BV(5));
	lcd_db4_port_set(data&_BV(4));

	Delay_ns(100);
	lcd_e_port_high();

	Delay_ns(500);
	lcd_e_port_low();

	lcd_db7_port_set(data&_BV(3));                  //Output High Nibble
	lcd_db6_port_set(data&_BV(2));
	lcd_db5_port_set(data&_BV(1));
	lcd_db4_port_set(data&_BV(0));

	Delay_ns(100);
	lcd_e_port_high();

	Delay_ns(500);
	lcd_e_port_low();

	lcd_db7_port_high();                            // All Data Pins High (Inactive)
	lcd_db6_port_high();
	lcd_db5_port_high();
	lcd_db4_port_high();

#else //using 8-Bit_Mode
	lcd_db7_port_set(data&_BV(7));                  //Output High Nibble
	lcd_db6_port_set(data&_BV(6));
	lcd_db5_port_set(data&_BV(5));
	lcd_db4_port_set(data&_BV(4));
	lcd_db3_port_set(data&_BV(3));                  //Output High Nibble
	lcd_db2_port_set(data&_BV(2));
	lcd_db1_port_set(data&_BV(1));
	lcd_db0_port_set(data&_BV(0));

	Delay_ns(100);
	lcd_e_port_high();
	Delay_ns(500);
	lcd_e_port_low();

	lcd_db7_port_high();                            // All Data Pins High (Inactive)
	lcd_db6_port_high();
	lcd_db5_port_high();
	lcd_db4_port_high();
	lcd_db3_port_high();
	lcd_db2_port_high();
	lcd_db1_port_high();
	lcd_db0_port_high();
#endif

#if (WAIT_MODE==0 || RW_LINE_IMPLEMENTED==0)
	if (!rs && data<=((1<<LCD_CLR) | (1<<LCD_HOME))) // Is command clrscr or home?
		Delay_us(1640);
	else Delay_us(40);
#endif
}
Esempio n. 10
0
File: LCD.c Progetto: napzZztar/AVR
void main()
{
    int i;

    DDRA = 0xFF;
    DDRC = 0xFF;
    DDRD = 0xFF;

    Delay_us(2000);
    sendCommand(0x38) ;
    sendCommand(0x0C);
    sendCommand(0x01);
    Delay_us(2000) ;

    while(1)
    {
        ss(1);
        name();
        ONS;

        ss(11);
        HFS;

        ss(2);
        HFS;

        sendCommand(0x01);
        HFS;

        ss(11);
        dept();
        HFS;

        ss(10);
        ONS;

        ss(11);
        HFS;

        ss(2);
        sendCommand(0x01);
        HFS;

        name();
        HFS;

        ss(11);
        HFS;

        ss(0);
        ONS;

        sendCommand(0x01);
        ss(11);
        HFS;

        ss(9);
        dept();
        ONS;

        ss(11);
        HFS;

        ss(7);
        HFS;

        sendCommand(0x01);
        HFS;

        ss(11);
        name();
        HFS;

        ss(8);
        ONS;

        ss(11);
        HFS;

        ss(10);
        sendCommand(0x01);
        HFS;

        dept();
        HFS;

        ss(11);
        HFS;

        ss(1);
        ONS;

        sendCommand(0x01);
        ss(11);
        HFS;

    }
}
Esempio n. 11
0
void Init_SSD2805_SPI(void)
{
	
 	SPI_Init();
	Delay_ms(10);
	Set_RST(0);// ( rGPFDAT &= (~(1<<3))) ;
	Delay_ms(50);
	Set_RST(1);//  ( rGPFDAT |= (1<<3) ) ;
	Delay_ms(10);

	
	//void SPI_2825_WrCmd(U8)
	//void SPI_2825_WrReg(U8 c,U16 value)
	//Initial code 1: SSD2825 initialization
	//RGB interface configuration 
	SPI_2825_WrReg(0xb1,(LCD_HSPW<<8)|LCD_VSPW);	//Vertical sync and horizontal sync active period 
	SPI_2825_WrReg(0xb2,(LCD_HBPD<<8)|LCD_VBPD);	//Vertical and horizontal back porch period  
	SPI_2825_WrReg(0xb3,(LCD_HFPD<<8)|LCD_VFPD);	//Vertical and horizontal front porch period 
	SPI_2825_WrReg(0xb4, LCD_XSIZE_TFT);		//Horizontal active period 
	SPI_2825_WrReg(0xb5, LCD_YSIZE_TFT);		//Vertical active period
	//SPI_2825_WrReg(0xb6, 0x2007);				//Video mode and video pixel format 888
	SPI_2825_WrReg(0xb6, 0x2004);				//Video mode and video pixel format       565	
	//MIPI lane configuration
	//00 - 1 lane mode 
	//01 - 2 lane mode 
	//10 - 3 lane mode 
	//11 - 4 lane mode 
	SPI_2825_WrReg(0xde, 0x0001);				//MIPI lane select 
	//SPI_2825_WrReg(0xDD, (LCD_HFPD<<8)|LCD_VFPD);
	//SPI_2825_WrReg(0xd6, 0x0004);				//Color order and endianess	BGR
	SPI_2825_WrReg(0xd6, 0x0005);				//Color order and endianess	RGB
	SPI_2825_WrReg(0xb9, 0x0000);				//Disable PLL
	SPI_2825_WrReg(0xc4, 0x0001);				//BTA setting
	//CABC brightness setting 
	SPI_2825_WrReg(0xe9, 0xff2f);				//CABC control
	SPI_2825_WrReg(0xeb, 0x0100);				//CABC control
	//Communicate with LCD driver through MIPI 
	SPI_2825_WrReg(0xb7, 0x0342);				//DCS mode 0342
	SPI_2825_WrReg(0xb8, 0x0000);				//VC registe
	SPI_2825_WrReg(0xbc, 0x0000);				//Packet size 
	SPI_2825_WrCmd(0x11);					//LCD driver exit sleep mode
	Delay_ms(100);	
	SPI_2825_WrCmd(0x29);					//Set LCD driver display on 
//	PLL configuration 
	//SPI_2825_WrReg(0xba, 0x8334);				//PLL setting,8028 0x34--52*24/3=416M
	SPI_2825_WrReg(0xba, 0x8322);				//PLL setting,8028    0x27--39*24/3=312M
	
	SPI_2825_WrReg(0xbb, 0x0006);				//LP clock divider
	SPI_2825_WrReg(0xb9, 0x0001);				//PLL enable 
	SPI_2825_WrReg(0xb8, 0x0000);				//VC register 
//	SPI_2825_WrReg(0xb7, 0x030B);				//Generic mode, HS video mode
	
	Delay_ms(55);
	
	//Initial code 2: LCD driver initialization
	//MIPI lane and PLL configuration
	SPI_2825_WrReg(0xb9, 0x0001);				//PLL enable 
	SPI_2825_WrReg(0xb7, 0x0150);				//Generic mode, LP mode
	SPI_2825_WrReg(0xb8, 0x0000);				//VC register
	//Send command and data through MIPI 
	//------------------------------------------------------------------------------------------	
	//----------communicate with lcd driver through mipi----------------------------------------
	
	GP_COMMAD_PA(4);
	SPI_WriteData(0xBF);
	SPI_WriteData(0x91);
	SPI_WriteData(0x61);
	SPI_WriteData(0xF2); 

	GP_COMMAD_PA(3);
	SPI_WriteData(0xB3);
	SPI_WriteData(0x00);
	SPI_WriteData(0x77);

	GP_COMMAD_PA(3);
	SPI_WriteData(0xB4);
	SPI_WriteData(0x00);
	SPI_WriteData(0x77);

	GP_COMMAD_PA(7);
	SPI_WriteData(0xB8);
	SPI_WriteData(0x00);
	SPI_WriteData(0xA0);
	SPI_WriteData(0x01);
	SPI_WriteData(0x00);
	SPI_WriteData(0xA0);
	SPI_WriteData(0x01);

	GP_COMMAD_PA(4);
	SPI_WriteData(0xBA);
	SPI_WriteData(0x3E);
	SPI_WriteData(0x23);
	SPI_WriteData(0x00);


	GP_COMMAD_PA(2);
	SPI_WriteData(0xC3);
	SPI_WriteData(0x04);


	GP_COMMAD_PA(3);
	SPI_WriteData(0xC4);
	SPI_WriteData(0x30);
	SPI_WriteData(0x6A);

	GP_COMMAD_PA(39);
	SPI_WriteData(0xC8);
	SPI_WriteData(0x7E);
	SPI_WriteData(0x68);
	SPI_WriteData(0x57);
	SPI_WriteData(0x49);
	SPI_WriteData(0x43);
	SPI_WriteData(0x33);
	SPI_WriteData(0x35);
	SPI_WriteData(0x1C);
	SPI_WriteData(0x33);
	SPI_WriteData(0x2F);
	SPI_WriteData(0x2B);
	SPI_WriteData(0x43);
	SPI_WriteData(0x2C);
	SPI_WriteData(0x31);
	SPI_WriteData(0x20);
	SPI_WriteData(0x22);
	SPI_WriteData(0x1E);
	SPI_WriteData(0x1D);
	SPI_WriteData(0x03);
	SPI_WriteData(0x7E);
	SPI_WriteData(0x68);
	SPI_WriteData(0x57);
	SPI_WriteData(0x49);
	SPI_WriteData(0x43);
	SPI_WriteData(0x33);
	SPI_WriteData(0x35);
	SPI_WriteData(0x1C);
	SPI_WriteData(0x33);
	SPI_WriteData(0x2F);
	SPI_WriteData(0x2B);
	SPI_WriteData(0x43);
	SPI_WriteData(0x2C);
	SPI_WriteData(0x31);
	SPI_WriteData(0x20);
	SPI_WriteData(0x22);
	SPI_WriteData(0x1E);
	SPI_WriteData(0x1D);
	SPI_WriteData(0x03);

	GP_COMMAD_PA(10);
	SPI_WriteData(0xC7);
	SPI_WriteData(0x00);
	SPI_WriteData(0x01);
	SPI_WriteData(0x31);
	SPI_WriteData(0x05);
	SPI_WriteData(0x65);
	SPI_WriteData(0x2B);
	SPI_WriteData(0x12);
	SPI_WriteData(0xA5);
	SPI_WriteData(0xA5);

	GP_COMMAD_PA(17);
	SPI_WriteData(0xD4);
	SPI_WriteData(0x1E);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x17);
	SPI_WriteData(0x37);
	SPI_WriteData(0x06);
	SPI_WriteData(0x04);
	SPI_WriteData(0x0A);
	SPI_WriteData(0x08);
	SPI_WriteData(0x00);
	SPI_WriteData(0x02);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);

	GP_COMMAD_PA(17);
	SPI_WriteData(0xD5);
	SPI_WriteData(0x1E);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x17);
	SPI_WriteData(0x37);
	SPI_WriteData(0x07);
	SPI_WriteData(0x05);
	SPI_WriteData(0x0B);
	SPI_WriteData(0x09);
	SPI_WriteData(0x01);
	SPI_WriteData(0x03);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);

	GP_COMMAD_PA(17);
	SPI_WriteData(0xD6);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x13);
	SPI_WriteData(0x17);
	SPI_WriteData(0x17);
	SPI_WriteData(0x07);
	SPI_WriteData(0x09);
	SPI_WriteData(0x0B);
	SPI_WriteData(0x05);
	SPI_WriteData(0x03);
	SPI_WriteData(0x01);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);

	GP_COMMAD_PA(17);
	SPI_WriteData(0xD7);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1E);
	SPI_WriteData(0x17);
	SPI_WriteData(0x17);
	SPI_WriteData(0x06);
	SPI_WriteData(0x08);
	SPI_WriteData(0x0A);
	SPI_WriteData(0x04);
	SPI_WriteData(0x02);
	SPI_WriteData(0x00);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x1F);

	GP_COMMAD_PA(21);
	SPI_WriteData(0xD8);
	SPI_WriteData(0x20);
	SPI_WriteData(0x00);
	SPI_WriteData(0x00);
	SPI_WriteData(0x30);
	SPI_WriteData(0x03);
	SPI_WriteData(0x30);
	SPI_WriteData(0x01);
	SPI_WriteData(0x02);
	SPI_WriteData(0x00);
	SPI_WriteData(0x01);
	SPI_WriteData(0x02);
	SPI_WriteData(0x06);
	SPI_WriteData(0x70);
	SPI_WriteData(0x00);
	SPI_WriteData(0x00);
	SPI_WriteData(0x73);
	SPI_WriteData(0x07);
	SPI_WriteData(0x06);
	SPI_WriteData(0x70);
	SPI_WriteData(0x08);

	GP_COMMAD_PA(21);
	SPI_WriteData(0xD9);
	SPI_WriteData(0x00);
	SPI_WriteData(0x0A);
	SPI_WriteData(0x0A);
	SPI_WriteData(0x80);
	SPI_WriteData(0x00);
	SPI_WriteData(0x00);
	SPI_WriteData(0x06);
	SPI_WriteData(0x7B);
	SPI_WriteData(0x00);
	SPI_WriteData(0x80);
	SPI_WriteData(0x00);
	SPI_WriteData(0x33);
	SPI_WriteData(0x6A);
	SPI_WriteData(0x1F);
	SPI_WriteData(0x00);
	SPI_WriteData(0x00);
	SPI_WriteData(0x00);
	SPI_WriteData(0x03);
	SPI_WriteData(0x7B);

	GP_COMMAD_PA(2);
	SPI_WriteData(0x35);
	SPI_WriteData(0x00);

	GP_COMMAD_PA(2);
	SPI_WriteData(0x11);
	SPI_WriteData(0x00);   
	Delay_us(5);

	GP_COMMAD_PA(2);
	SPI_WriteData(0x29);
	SPI_WriteData(0x00);   
	Delay_us(1);
                  
	//------------------------------------------------------------------------------------------	
	 
	//Cmd code 3: Access video mode 
	//RGB interface configuration 
	SPI_2825_WrReg(0xb1,(LCD_HSPW<<8)|LCD_VSPW);	//Vertical sync and horizontal sync active period 
	SPI_2825_WrReg(0xb2,(LCD_HBPD<<8)|LCD_VBPD);	//Vertical and horizontal back porch period  
	SPI_2825_WrReg(0xb3,(LCD_HFPD<<8)|LCD_VFPD);	//Vertical and horizontal front porch period 
	SPI_2825_WrReg(0xb4, LCD_XSIZE_TFT);		//Horizontal active period 
	SPI_2825_WrReg(0xb5, LCD_YSIZE_TFT);		//Vertical active period
	//SPI_2825_WrReg(0xb6, 0x0007);		//2007		//Video mode and video pixel format 	888
	SPI_2825_WrReg(0xb6, 0x2004);		//2007		//Video mode and video pixel format 	565
	//MIPI lane configuration
	//00 - 1 lane mode 
	//01 - 2 lane mode 
	//10 - 3 lane mode 
	//11 - 4 lane mode
	SPI_2825_WrReg(0xde, 0x0001);				//MIPI lane select, 2chl
	SPI_2825_WrReg(0xd6, 0x0005);				//Color order and endianess
	SPI_2825_WrReg(0xb9, 0x0000);				//Disable PLL
	SPI_2825_WrReg(0xc4, 0x0001);				//BTA setting
	//CABC brightness setting 
	SPI_2825_WrReg(0xe9, 0xff2f);				//CABC control
	SPI_2825_WrReg(0xeb, 0x0100);				//CABC control
	
	Delay_ms(22);
	//PLL configuration
	//FR: bit15~14
	//00 每 62.5 < OUT f  < 125 
	//01 每 126 < OUT f  < 250 
	//10 每 251 < OUT f  < 500  
	//11 每 501 < OUT f  < 1000 
	
	//MS: bit12~8
	//Fpre = fin/MS
	
	//NS: bit7~0
	//Fout = Fpre*NS
	
	SPI_2825_WrReg(0xba, 0x8324);				//PLL setting,8028    
	SPI_2825_WrReg(0xbb, 0x0006);				//LP clock divider,煦けf/ㄗ1+1ㄘ,750MHZ/2 = 
	SPI_2825_WrReg(0xb9, 0x0001);				//PLL enable 
	SPI_2825_WrReg(0xb8, 0x0000);				//VC register 
	SPI_2825_WrReg(0xb7, 0x030B | 0x0020 );		//Generic mode, HS video mode	
}
Esempio n. 12
0
/**
  *********************************************************************************
  * @Function: UART5_ReceiveData;
  *
  * @Description:	从UART5接口接收1个字节数据
  *           
  * @Input:  none;	
  *
  * @Output: none;
  *          		
  * @Return: char       接收到的数据;
  *
  * @Note:   none;
  ***********************************************************************************
  */
char	UART5_ReceiveData( void )
{	
	Delay_us(20);
	return	USART_ReceiveData(UART5) ;
}
Esempio n. 13
0
BOOL hitag2_write_page(BYTE block, BYTE *data)
{
    BYTE command[11], tmp[37], tmp1[37], tmp2[37], tmphex[9];

    if(block > HITAG2_DATABLOCKS - 1)
        return FALSE;

    // create 10 bit command block: HITAG2_WRIE_PAGE + 3 bits address + invert(HITAG2_WRITE_PAGE + 3 bits address)
    memcpy(command, HITAG2_WRITE_PAGE, 2);
    inttobinstring(command + 2, (unsigned int) block, 3);
    invertbinstring(command + 5, command);
    command[10]= '\0';

    // encrypt command if in crypto mode
    if(CryptoActive)
        hitag2_binstring_crypt(tmp, command);
    else
        memcpy(tmp, command, 11);

    // convert data to binstring for send
    if(hextobinstring(tmp1, data) != 32)
        return FALSE;

    // send command with RX->TX delay and no reset
    if(!rwd_send(tmp, strlen(tmp), NO_RESET, BLOCK, RWD_STATE_WAKING, RFIDlerConfig.FrameClock, 0, RFIDlerConfig.RWD_Wait_Switch_RX_TX, RFIDlerConfig.RWD_Zero_Period, RFIDlerConfig.RWD_One_Period, RFIDlerConfig.RWD_Gap_Period, RFIDlerConfig.RWD_Wait_Switch_TX_RX))
        return FALSE;

    // skip 1/2 bit to synchronise manchester
    HW_Skip_Bits= 1;
    // get ACK - 10 bytes + sync
    if(read_ask_data(RFIDlerConfig.FrameClock, RFIDlerConfig.DataRate, tmp2, 15, RFIDlerConfig.Sync, RFIDlerConfig.SyncBits, RFIDlerConfig.Timeout, ONESHOT_READ, BINARY) == 15)
    {
        // check sync bits
        if (memcmp(tmp2, Hitag2Sync, 5) != 0)
            return FALSE;

        // decrypt
        if(CryptoActive)
            hitag2_binarray_crypt(tmp2 + 5, tmp2 + 5, 10);

        // check ACK - should be our original command echo'd back
        binarraytobinstring(tmp2 + 5, tmp2 + 5, 10);
        if(memcmp(command, tmp2 + 5, 10) != 0)
            return FALSE;
    }

    // encrypt data if in crypto mode
    if(CryptoActive)
        hitag2_binstring_crypt(tmp1, tmp1);

    // send data with RX->TX delay and no reset
    if(!rwd_send(tmp1, strlen(tmp1), NO_RESET, BLOCK, RWD_STATE_WAKING, RFIDlerConfig.FrameClock, 0, RFIDlerConfig.RWD_Wait_Switch_RX_TX, RFIDlerConfig.RWD_Zero_Period, RFIDlerConfig.RWD_One_Period, RFIDlerConfig.RWD_Gap_Period, RFIDlerConfig.RWD_Wait_Switch_TX_RX))
        return FALSE;

    // no ack, so read back and verify
    // delay for long enough to allow write plus RX->TX period
    Delay_us((HITAG2_WRITE_DELAY * RFIDlerConfig.FrameClock + RFIDlerConfig.RWD_Wait_Switch_RX_TX * RFIDlerConfig.FrameClock) / 100);
    if(!hitag2_read_page(tmp, block))
        return FALSE;
    if(memcmp(tmp, data, 8) != 0)
        return FALSE;

    return TRUE;
}
Esempio n. 14
0
BOOL tag_set(BYTE tag)
{
    // reset everything, then set what needs to be changed
    // most timings are in FCs unless otherwise specified
    // FrameClock itself is in us/100 (i.e. 800 is 8us == 125KHz)
    // Timeout is in us
    RFIDlerConfig.FrameClock= 0;
    RFIDlerConfig.BiPhase= FALSE;
    RFIDlerConfig.Manchester= FALSE;
    RFIDlerConfig.Invert= FALSE;
    RFIDlerConfig.Modulation= MOD_MODE_NONE;
    RFIDlerConfig.PotLow= 0;
    RFIDlerConfig.PotHigh= 0;
    RFIDlerConfig.DataRate= 0;
    RFIDlerConfig.DataRateSub0= 0;
    RFIDlerConfig.DataRateSub1= 0;
    RFIDlerConfig.DataBits= 0;
    RFIDlerConfig.TagType= tag;
    RFIDlerConfig.Repeat= 0;
    RFIDlerConfig.Timeout= 0L;
    RFIDlerConfig.Sync[0]= 0x00;
    RFIDlerConfig.Sync[1]= 0x00;
    RFIDlerConfig.Sync[2]= 0x00;
    RFIDlerConfig.Sync[3]= 0x00;
    RFIDlerConfig.SyncBits= 0;
    RFIDlerConfig.RWD_Gap_Period= 0;
    RFIDlerConfig.RWD_Sleep_Period= 0;
    RFIDlerConfig.RWD_Wake_Period= 0;
    RFIDlerConfig.RWD_Zero_Period= 0;
    RFIDlerConfig.RWD_One_Period= 0;
    RFIDlerConfig.RWD_Wait_Switch_RX_TX= 0;
    RFIDlerConfig.RWD_Wait_Switch_TX_RX= 0;

    switch(tag)
    {
        case TAG_TYPE_NONE:
            break;

        case TAG_TYPE_ASK_RAW:
            RFIDlerConfig.FrameClock= 800; // 125 KHz
            RFIDlerConfig.Modulation= MOD_MODE_ASK_OOK;
            RFIDlerConfig.PotHigh= 100;
            RFIDlerConfig.DataRate= 32;
            RFIDlerConfig.DataBits= RAW_TAGS_DATABITS;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.RWD_Wake_Period= 1000;
            break;

      case TAG_TYPE_AWID_26:
            //RFIDlerConfig.FrameClock= 765; // 130.7 KHz (134KHz breaks emulation)
            RFIDlerConfig.FrameClock= 800; // 125 KHz
            RFIDlerConfig.Modulation= MOD_MODE_FSK2;
            RFIDlerConfig.PotHigh=  110;
            RFIDlerConfig.DataRate= 50;
            RFIDlerConfig.DataRateSub0= 8;
            RFIDlerConfig.DataRateSub1= 10;
            RFIDlerConfig.DataBits= 96;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.Sync[0]= 0x01;
            RFIDlerConfig.Sync[1]= 0x1D;
            RFIDlerConfig.Sync[2]= 0x80;
            RFIDlerConfig.Sync[3]= 0x00;
            RFIDlerConfig.SyncBits= 18;
            RFIDlerConfig.RWD_Wake_Period= 1000;
            break;
              
        case TAG_TYPE_EM4X02:
        case TAG_TYPE_UNIQUE:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.Manchester= TRUE;
            RFIDlerConfig.Modulation= MOD_MODE_ASK_OOK;
            RFIDlerConfig.PotHigh= 150;
            RFIDlerConfig.DataRate= 64;
            RFIDlerConfig.DataBits= 64;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.Sync[0]= 0xFF;
            RFIDlerConfig.Sync[1]= 0xFF;
            RFIDlerConfig.Sync[2]= 0x00;
            RFIDlerConfig.Sync[3]= 0x00;
            RFIDlerConfig.SyncBits= 9;
            RFIDlerConfig.RWD_Wake_Period= 1000;
            break;

        // DEBUG: work in progress!
        case TAG_TYPE_EM4X05:
            RFIDlerConfig.FrameClock= 800; // 125 KHz
            RFIDlerConfig.Manchester= TRUE;
            RFIDlerConfig.Modulation= MOD_MODE_ASK_OOK;
            RFIDlerConfig.PotHigh= 130;
            RFIDlerConfig.DataRate= 64;
            RFIDlerConfig.DataBits= 53; // 45 bit OTA format + 8 bit preamble
            RFIDlerConfig.DataBlocks= EM4X05_DATABLOCKS;
            RFIDlerConfig.BlockSize= EM4X05_BLOCKSIZE;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.RWD_Wake_Period= 1000; // docco says max 3 ms, but round up a bit
            RFIDlerConfig.RWD_Gap_Period= 55; // First Field Stop
            RFIDlerConfig.RWD_Sleep_Period= 2000;
            RFIDlerConfig.RWD_Zero_Period= 16; // note that em4x05 uses it's own PWM scheme
            RFIDlerConfig.RWD_One_Period= 32; // see em.c for details
            RFIDlerConfig.RWD_Wait_Switch_TX_RX= 60; // doc says 544us, (9.34 + 1.38 ms when eeprom write), but tests are much shorter!
            RFIDlerConfig.RWD_Wait_Switch_RX_TX= 80; // docs say 544, so about 68 fcs
            break;

       case TAG_TYPE_FDXB:
            RFIDlerConfig.FrameClock= 745; // 134.2 KHz
            RFIDlerConfig.BiPhase= TRUE;
            RFIDlerConfig.Invert= TRUE;
            RFIDlerConfig.Modulation= MOD_MODE_ASK_OOK;
            RFIDlerConfig.PotHigh= 130;
            RFIDlerConfig.DataRate= 32;
            RFIDlerConfig.DataBits= 128;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.Sync[0]= 0x00;
            RFIDlerConfig.Sync[1]= 0x20;
            RFIDlerConfig.Sync[2]= 0x00;
            RFIDlerConfig.Sync[3]= 0x00;
            RFIDlerConfig.SyncBits= 11;
            RFIDlerConfig.RWD_Wake_Period= 1000;
            break;

       case TAG_TYPE_FSK1_RAW:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.Modulation= MOD_MODE_FSK1;
            RFIDlerConfig.PotHigh= POTHIGH_DEFAULT;
            RFIDlerConfig.DataRate= 50;
            RFIDlerConfig.DataRateSub0= 8;
            RFIDlerConfig.DataRateSub1= 5;
            RFIDlerConfig.DataBits= RAW_TAGS_DATABITS;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.RWD_Wake_Period= 1000;
            break;

       case TAG_TYPE_FSK2_RAW:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.Modulation= MOD_MODE_FSK2;
            RFIDlerConfig.PotHigh= 90;
            RFIDlerConfig.DataRate= 50;
            RFIDlerConfig.DataRateSub0= 8;
            RFIDlerConfig.DataRateSub1= 10;
            RFIDlerConfig.DataBits= RAW_TAGS_DATABITS;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.RWD_Wake_Period= 1000;
            break;
                  
        case TAG_TYPE_HID_26:
            //RFIDlerConfig.FrameClock= 765; // 130.7 KHz (134KHz breaks emulation)
            RFIDlerConfig.FrameClock= 800; // 125 KHz
            RFIDlerConfig.Modulation= MOD_MODE_FSK2;
            RFIDlerConfig.PotHigh=  110;
            RFIDlerConfig.DataRate= 50;
            RFIDlerConfig.DataRateSub0= 8;
            RFIDlerConfig.DataRateSub1= 10;
            RFIDlerConfig.DataBits= 96;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.Sync[0]= 0x1D;
            RFIDlerConfig.Sync[1]= 0x55;
            RFIDlerConfig.Sync[2]= 0x00;
            RFIDlerConfig.Sync[3]= 0x00;
            RFIDlerConfig.SyncBits= 16;
            RFIDlerConfig.RWD_Wake_Period= 1000;
            break;

        case TAG_TYPE_HITAG1:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.Manchester= TRUE;
            RFIDlerConfig.Modulation= MOD_MODE_ASK_OOK;
            RFIDlerConfig.PotHigh= 170;
            RFIDlerConfig.DataRate= 32;
            RFIDlerConfig.DataBits= 33; //
            RFIDlerConfig.DataBlocks= HITAG1_DATABLOCKS;
            RFIDlerConfig.BlockSize= HITAG1_BLOCKSIZE;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.RWD_Gap_Period= 4; // 4 - 10
            RFIDlerConfig.RWD_Sleep_Period= 2000;
            RFIDlerConfig.RWD_Wake_Period= 500; // documentations says ~3ms, so round up a bit
            RFIDlerConfig.RWD_Zero_Period= 18; // 18 - 22
            RFIDlerConfig.RWD_One_Period= 26; // 26 - 32
            RFIDlerConfig.RWD_Wait_Switch_TX_RX= 180; // docs say 204, so stop a little earlier so we catch leading edge
            RFIDlerConfig.RWD_Wait_Switch_RX_TX= 120; // docs say 96, so give it a bit longer t0 be safe!
            RFIDlerConfig.SyncBits= 0;
            RFIDlerConfig.Sync[0]= 0x00;
            RFIDlerConfig.Sync[0]= 0x00;
            RFIDlerConfig.Sync[0]= 0x00;
            RFIDlerConfig.Sync[0]= 0x00;
            break;

        case TAG_TYPE_HITAG2:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.Manchester= TRUE;
            RFIDlerConfig.Modulation= MOD_MODE_ASK_OOK;
            RFIDlerConfig.PotHigh= 160;
            RFIDlerConfig.DataRate= 32;
            RFIDlerConfig.DataBits= 37; // 5 bits leadin + 32 bits ID
            RFIDlerConfig.DataBlocks= HITAG2_DATABLOCKS;
            RFIDlerConfig.BlockSize= HITAG2_BLOCKSIZE;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.RWD_Gap_Period= 3; // 4 - 10 (we use 3 to allow for sloppiness in RWD timings)
            RFIDlerConfig.RWD_Sleep_Period= 2000;  // 2000;
            RFIDlerConfig.RWD_Wake_Period= 525; // (was 450) must be > 312.5 but less than 544 to allow reset of user modes
            RFIDlerConfig.RWD_Zero_Period= 18; // 18 - 22
            RFIDlerConfig.RWD_One_Period= 26; // 26 - 32
            RFIDlerConfig.RWD_Wait_Switch_TX_RX= 150; // docs say 199 - 206 but in practice it can be less
            RFIDlerConfig.RWD_Wait_Switch_RX_TX= 90;
            RFIDlerConfig.Sync[0]= 0xF8;
            RFIDlerConfig.Sync[1]= 0x00;
            RFIDlerConfig.Sync[2]= 0x00;
            RFIDlerConfig.Sync[3]= 0x00;
            RFIDlerConfig.SyncBits= 5;
            break;

        case TAG_TYPE_INDALA_64:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.Modulation= MOD_MODE_PSK1;
            RFIDlerConfig.PotLow= POTLOW_DEFAULT;
            RFIDlerConfig.PotHigh= 170;
            RFIDlerConfig.DataRate= 32;
            RFIDlerConfig.DataRateSub0= 2;
            RFIDlerConfig.DataBits= 64;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.PSK_Quality= 4L;
            RFIDlerConfig.Sync[0]= 0x00;
            RFIDlerConfig.Sync[1]= 0x00;
            RFIDlerConfig.Sync[2]= 0x00;
            RFIDlerConfig.Sync[3]= 0x00;
            RFIDlerConfig.SyncBits= 24;
            RFIDlerConfig.RWD_Wake_Period= 1000;
            break;

        case TAG_TYPE_INDALA_224:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.Modulation= MOD_MODE_PSK1;
            RFIDlerConfig.PotLow= POTLOW_DEFAULT;
            RFIDlerConfig.PotHigh= 170;
            RFIDlerConfig.DataRate= 32;
            RFIDlerConfig.DataRateSub0= 2;
            RFIDlerConfig.DataBits= 224;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.PSK_Quality= 4L;
            RFIDlerConfig.Sync[0]= 0x00;
            RFIDlerConfig.Sync[1]= 0x00;
            RFIDlerConfig.Sync[2]= 0x00;
            RFIDlerConfig.Sync[3]= 0x00;
            RFIDlerConfig.SyncBits= 24;
            RFIDlerConfig.RWD_Wake_Period= 1000;
            break;

        case TAG_TYPE_PSK1_RAW:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.Modulation= MOD_MODE_PSK1;
            RFIDlerConfig.PotLow= POTLOW_DEFAULT;
            RFIDlerConfig.PotHigh= POTHIGH_DEFAULT;
            RFIDlerConfig.DataRate= 32;
            RFIDlerConfig.DataRateSub0= 2;
            RFIDlerConfig.DataBits= RAW_TAGS_DATABITS;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.PSK_Quality= 4L;
            RFIDlerConfig.RWD_Wake_Period= 1000;
            break;

        case TAG_TYPE_Q5:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.Manchester= TRUE;
            RFIDlerConfig.Modulation= MOD_MODE_ASK_OOK;
            RFIDlerConfig.PotHigh= 160;
            RFIDlerConfig.DataRate= 64;
            RFIDlerConfig.DataBits= 64;
            RFIDlerConfig.DataBlocks= Q5_DATABLOCKS;
            RFIDlerConfig.BlockSize= Q5_BLOCKSIZE;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.Sync[0]= 0xFF;
            RFIDlerConfig.Sync[1]= 0xFF;
            RFIDlerConfig.Sync[2]= 0x00;
            RFIDlerConfig.Sync[3]= 0x00;
            RFIDlerConfig.SyncBits= 9;
            RFIDlerConfig.RWD_Sleep_Period= 13000;
            RFIDlerConfig.RWD_Wake_Period= 4000; // must be more than 3ms, but play it safe
            RFIDlerConfig.RWD_Gap_Period= 50; // 14 nominal, 8 - 50 normal, 8 - 25 fast write mode
            RFIDlerConfig.RWD_Zero_Period= 16; //24; // 24 nominal, 16 - 31 normal, 8 - 15 fast write mode
            RFIDlerConfig.RWD_One_Period= 48; //54; // 54 nominal, 48 - 63 normal, 24 - 31 fast write mode
            RFIDlerConfig.RWD_Wait_Switch_TX_RX= 48; //64; // q5 will exit downlink mode after 64 but may not yet be damped!
            RFIDlerConfig.RWD_Wait_Switch_RX_TX= 192; // the longer the better!
            PWD_Mode= FALSE;
            break;

        case TAG_TYPE_T55X7:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.Modulation= MOD_MODE_ASK_OOK;
            RFIDlerConfig.PotHigh= POTHIGH_DEFAULT;
            RFIDlerConfig.Manchester= TRUE;
            RFIDlerConfig.DataRate= 32;
            RFIDlerConfig.DataBits= 64;
            RFIDlerConfig.Sync[0]= 0xE0;
            RFIDlerConfig.Sync[1]= 0x15;
            RFIDlerConfig.Sync[2]= 0x00;
            RFIDlerConfig.Sync[3]= 0x00;
            RFIDlerConfig.SyncBits= 16;
            RFIDlerConfig.DataBlocks= T55X7_DATABLOCKS;
            RFIDlerConfig.BlockSize= T55X7_BLOCKSIZE;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.RWD_Sleep_Period= 13000; // small tags such as keyfobs need a long sleep to reset
            RFIDlerConfig.RWD_Wake_Period= 4000;
            RFIDlerConfig.RWD_Gap_Period= 23; // 14; // 14 nominal, 8 - 30 normal, 8 - 25 fast write mode
            RFIDlerConfig.RWD_Zero_Period= 16; // 24; // 24 nominal, 16 - 31 normal, 8 - 15 fast write mode
            RFIDlerConfig.RWD_One_Period= 48; // 54; // 54 nominal, 48 - 63 normal, 24 - 31 fast write mode
            RFIDlerConfig.RWD_Wait_Switch_TX_RX= 64; // t55x7 will exit downlink mode after 64 but we mustn't read until t55x7 switches damping on
            RFIDlerConfig.RWD_Wait_Switch_RX_TX= 192;
            break;
            
        // special case - TAMAGOTCHI do not do anything but PWM, so most settings are irrelevant
        case TAG_TYPE_TAMAGOTCHI:
            RFIDlerConfig.FrameClock= 800;
            RFIDlerConfig.TagType= tag;
            RFIDlerConfig.Repeat= 20;
            RFIDlerConfig.Timeout= 13000; // timeout in uS (note with prescaler of 16 max is 13107)
            RFIDlerConfig.RWD_Sleep_Period= 13000; // small tags such as keyfobs need a long sleep to reset
            RFIDlerConfig.RWD_Wake_Period= 4000;
            RFIDlerConfig.RWD_Gap_Period= 23; // 14; // 14 nominal, 8 - 30 normal, 8 - 25 fast write mode
            RFIDlerConfig.RWD_Zero_Period= 16; // 24; // 24 nominal, 16 - 31 normal, 8 - 15 fast write mode
            RFIDlerConfig.RWD_One_Period= 48; // 54; // 54 nominal, 48 - 63 normal, 24 - 31 fast write mode
            RFIDlerConfig.RWD_Wait_Switch_TX_RX= 64; // t55x7 will exit downlink mode after 64 but we mustn't read until t55x7 switches damping on
            RFIDlerConfig.RWD_Wait_Switch_RX_TX= 192;
            break;

        default:
            return FALSE;
    }

    // stop clocks
    stop_HW_clock();

    // configure potentiometers
    set_mcp414_wiper(WIPER_HIGH, VOLATILE, RFIDlerConfig.PotHigh, TmpBuff);
    set_mcp414_wiper(WIPER_LOW, VOLATILE, RFIDlerConfig.PotLow, TmpBuff);

    // delay to allow things to settle
    Delay_us(500000);

    // reset globals
    PWD_Mode= FALSE;
    memset(Password, '\0', sizeof(Password));
    
    return TRUE;
}
Esempio n. 15
0
display_M()
{
    //--------------col-1--------------
    P2 = ON;                           // Turn ON diodes on PORT2
    Delay_us(U_SEC);
    P2 = OFF;                          // Turn Off diodes on PORT2
    //--------------col-2--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-3--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-4--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-5--------------
    P2_0_bit = OFF;
    P2_1_bit = ON;
    Delay_us(U_SEC);
    //--------------col-6--------------
    P2_1_bit = ON;
    Delay_us(U_SEC);
    //--------------col-7--------------
    P2_1_bit = ON;
    Delay_us(U_SEC);
    //--------------col-8--------------
    P2_1_bit = OFF;
    P2_2_bit = ON;
    Delay_us(U_SEC);
    //--------------col-9--------------
    P2_2_bit = ON;
    Delay_us(U_SEC);
    //--------------col-10--------------
    P2_2_bit = ON;
    Delay_us(U_SEC);
    //--------------col-11--------------
    P2_2_bit = OFF;
    P2_3_bit = ON;
    Delay_us(U_SEC);
    //--------------col-12--------------
    P2_3_bit = ON;
    Delay_us(U_SEC);
    //--------------col-13--------------
    P2_3_bit = ON;
    Delay_us(U_SEC);
    //--------------col-14--------------
    P2_3_bit = OFF;
    P2_2_bit = ON;
    Delay_us(U_SEC);
    //--------------col-15--------------
    P2_2_bit = ON;
    Delay_us(U_SEC);
    //--------------col-16--------------
    P2_2_bit = ON;
    Delay_us(U_SEC);
    //--------------col-17--------------
    P2_2_bit = OFF;
    P2_1_bit = ON;
    Delay_us(U_SEC);
    //--------------col-18--------------
    P2_1_bit = ON;
    Delay_us(U_SEC);
    //--------------col-19--------------
    P2_1_bit = ON;
    Delay_us(U_SEC);
    //--------------col-20--------------
    P2_1_bit = OFF;
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-21--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-22--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-23--------------
    P2 = ON;                            // Turn ON diodes on PORT2
    Delay_us(U_SEC);
    P2 = OFF;                           // Turn Off diodes on PORT2
    //----------------------------------
}
Esempio n. 16
0
/*************************************************************************
  Initialize display
Input:    none
Returns:  none
 *************************************************************************/
void lcd_init(void)
{
	//Set All Pins as Output
	lcd_e_ddr_high();
	lcd_rs_ddr_high();
#if RW_LINE_IMPLEMENTED==1
	lcd_rw_ddr_high();
#endif
	lcd_db7_ddr_high();
	lcd_db6_ddr_high();
	lcd_db5_ddr_high();
	lcd_db4_ddr_high();
#if LCD_BITS==8
	lcd_db3_ddr_high();
	lcd_db2_ddr_high();
	lcd_db1_ddr_high();
	lcd_db0_ddr_high();
#endif

	//Set All Control Lines Low
	lcd_e_port_low();
	lcd_rs_port_low();
#if RW_LINE_IMPLEMENTED==1
	lcd_rw_port_low();
#endif

	//Set All Data Lines High
	lcd_db7_port_high();
	lcd_db6_port_high();
	lcd_db5_port_high();
	lcd_db4_port_high();
#if LCD_BITS==8
	lcd_db3_port_high();
	lcd_db2_port_high();
	lcd_db1_port_high();
	lcd_db0_port_high();
#endif

	//Startup Delay
	Delay_ms(DELAY_RESET);

	//Initialize Display
	lcd_db7_port_low();
	lcd_db6_port_low();
	Delay_ns(100);
	lcd_e_port_high();
	Delay_ns(500);
	lcd_e_port_low();

	Delay_us(4100);

	lcd_e_port_high();
	Delay_ns(500);
	lcd_e_port_low();

	Delay_us(100);

	lcd_e_port_high();
	Delay_ns(500);
	lcd_e_port_low();

	Delay_us(40);

	//Init differs between 4-bit and 8-bit from here
#if (LCD_BITS==4)
	lcd_db4_port_low();
	Delay_ns(100);
	lcd_e_port_high();
	Delay_ns(500);
	lcd_e_port_low();
	Delay_us(40);

	lcd_db4_port_low();
	Delay_ns(100);
	lcd_e_port_high();
	Delay_ns(500);
	lcd_e_port_low();
	Delay_ns(500);

#if (LCD_DISPLAYS==1)
	if (LCD_DISPLAY_LINES>1)
		lcd_db7_port_high();
#else
	unsigned char c;
	switch (ActiveDisplay)
	{
		case 1 : c=LCD_DISPLAY_LINES; break;
		case 2 : c=LCD_DISPLAY2_LINES; break;
#if (LCD_DISPLAYS>=3)
		case 3 : c=LCD_DISPLAY3_LINES; break;
#endif
#if (LCD_DISPLAYS==4)
		case 4 : c=LCD_DISPLAY4_LINES; break;
#endif
	}
	if (c>1)
		lcd_db7_port_high();
#endif

	Delay_ns(100);
	lcd_e_port_high();
	Delay_ns(500);
	lcd_e_port_low();
	Delay_us(40);
#else
#if (LCD_DISPLAYS==1)
	if (LCD_DISPLAY_LINES<2)
		lcd_db3_port_low();
#else
	unsigned char c;
	switch (ActiveDisplay)
	{
		case 1 : c=LCD_DISPLAY_LINES; break;
		case 2 : c=LCD_DISPLAY2_LINES; break;
#if (LCD_DISPLAYS>=3)
		case 3 : c=LCD_DISPLAY3_LINES; break;
#endif
#if (LCD_DISPLAYS==4)
		case 4 : c=LCD_DISPLAY4_LINES; break;
#endif
	}
	if (c<2)
		lcd_db3_port_low();
#endif

	lcd_db2_port_low();
	Delay_ns(100);
	lcd_e_port_high();
	Delay_ns(500);
	lcd_e_port_low();
	Delay_us(40);
#endif

	//Display Off
	lcd_command(_BV(LCD_DISPLAYMODE));

	//Display Clear
	lcd_clrscr();

	//Entry Mode Set
	lcd_command(_BV(LCD_ENTRY_MODE) | _BV(LCD_ENTRY_INC));

	//Display On
	lcd_command(_BV(LCD_DISPLAYMODE) | _BV(LCD_DISPLAYMODE_ON));
}
Esempio n. 17
0
display_T()
{
    //--------------col-1--------------
    P2_0_bit = ON;
    P2_1_bit = ON;
    Delay_us(U_SEC);
    P2_1_bit = OFF;
    //--------------col-2--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-3--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-4--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-5--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-6--------------
    P2_0_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-7--------------
    P2 = ON;
    Delay_us(U_SEC);
    P2 = OFF;
    //--------------col-8--------------
    P2_0_bit = ON;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-9--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-10--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-11--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-12--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-13--------------
    P2_0_bit = ON;
    Delay_us(U_SEC);
    //--------------col-14--------------
    P2_0_bit = ON;
    P2_1_bit = ON;
    Delay_us(U_SEC);
    P2_0_bit = OFF;
    P2_1_bit = OFF;
    //---------------------------------
}
Esempio n. 18
0
void main()
{
    int i;

    DDRA = 0xFF;
    DDRC = 0xFF;
    DDRD = 0xFF;

    Delay_us(2000);
    sendCommand(0x38) ;
    sendCommand(0x0C);
    sendCommand(0x01);
    Delay_us(2000) ;



    while(1)
    {

         PORTA = 0x06; //1
         Delay_ms(1000);


         PORTA = 0x00;
         Delay_ms(500);


         PORTA = 0x5B; //2
         Delay_ms(1000);


         PORTA = 0x00;
         Delay_ms(500);


         PORTA = 0x40;
         Delay_ms(1000);


         PORTA = 0x00;
         Delay_ms(500);


         PORTA = 0x5B;
         Delay_ms(1000);


         PORTA = 0x00;
         Delay_ms(500);


         PORTA = 0x06;
         Delay_ms(1000);


         PORTA = 0x00;
         Delay_ms(500);


         PORTA = 0x3F;
         Delay_ms(1000);


         PORTA = 0x00;
         Delay_ms(500);


         PORTA = 0x07;
         Delay_ms(1000);


         PORTA = 0x00;
         Delay_ms(500);


         PORTA = 0x5B; //2
         Delay_ms(1000);


         PORTA = 0x00;
         Delay_ms(500);


         PORTA = 0x40;
         Delay_ms(1000);


         PORTA = 0x00;
         Delay_ms(500);


         PORTA = 0x06; //1
         Delay_ms(1000);


         PORTA = 0x00;
         Delay_ms(500);
         
         sendString("Tasneem Ahmed Turash");
         sendCommand(0xC0);
         sendString("  12-21072-1");
         Delay_ms(2000);
         
         
         sendCommand(0x01);
         Delay_ms(500);
         
         sendString("    EEE");
         sendCommand(0xC0);
         sendString("    119");
         Delay_ms(2000);

         sendCommand(0x01);
         Delay_ms(500);
    }
}
Esempio n. 19
0
display_W()
{
    //--------------col-1--------------
    P2 = ON;                           // Turn ON diodes on PORT2
    Delay_us(U_SEC);
    P2 = OFF;                          // Turn Off diodes on PORT2 zz
    //--------------col-2--------------
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-3--------------
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-4--------------
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-5--------------
    P2_7_bit = OFF;
    P2_6_bit = ON;
    Delay_us(U_SEC);
    //--------------col-6--------------
    P2_6_bit = ON;
    Delay_us(U_SEC);
    //--------------col-7--------------
    P2_6_bit = ON;
    Delay_us(U_SEC);
    //--------------col-8--------------
    P2_6_bit = OFF;
    P2_5_bit = ON;
    Delay_us(U_SEC);
    //--------------col-9--------------
    P2_5_bit = ON;
    Delay_us(U_SEC);
    //--------------col-10--------------
    P2_5_bit = ON;
    Delay_us(U_SEC);
    //--------------col-11--------------
    P2_5_bit = OFF;
    P2_4_bit = ON;
    Delay_us(U_SEC);
    //--------------col-12--------------
    P2_4_bit = ON;
    Delay_us(U_SEC);
    //--------------col-13--------------
    P2_4_bit = ON;
    Delay_us(U_SEC);
    //--------------col-14--------------
    P2_4_bit = OFF;
    P2_5_bit = ON;
    Delay_us(U_SEC);
    //--------------col-15--------------
    P2_5_bit = ON;
    Delay_us(U_SEC);
    //--------------col-16--------------
    P2_5_bit = ON;
    Delay_us(U_SEC);
    //--------------col-17--------------
    P2_5_bit = OFF;
    P2_6_bit = ON;
    Delay_us(U_SEC);
    //--------------col-18--------------
    P2_6_bit = ON;
    Delay_us(U_SEC);
    //--------------col-19--------------
    P2_6_bit = ON;
    Delay_us(U_SEC);
    //--------------col-20--------------
    P2_6_bit = OFF;
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-21--------------
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-22--------------
    P2_7_bit = ON;
    Delay_us(U_SEC);
    //--------------col-23--------------
    P2 = ON;                            // Turn ON diodes on PORT2
    Delay_us(U_SEC);
    P2 = OFF;                           // Turn Off diodes on PORT2
    //----------------------------------
}
Esempio n. 20
0
// this routine accepts either binary arrays or binary strings
BOOL rwd_send2(unsigned char *command, unsigned int length, BOOL reset, BOOL block, BYTE initial_state, unsigned long fc, unsigned long sleep, unsigned int wake, unsigned int pw0, unsigned int pw1, unsigned int gap, unsigned int post_wait, BOOL diff, unsigned int ogap, unsigned int zgap, BOOL barrier, unsigned int ob, unsigned int zb)
{
    unsigned int i;

    RWD_Fc= fc;

    // convert FCs to system ticks
    RWD_Sleep_Period= CONVERT_TO_TICKS(sleep * fc);
    if (diff){
        RWD_One_Gap_Period = ogap * 2;
        RWD_Zero_Gap_Period = zgap * 2;	
    }else{
        RWD_One_Gap_Period = gap * 2;
        RWD_Zero_Gap_Period = gap * 2;
    }

    if(barrier){

        RWD_One_Barrier_Period = ob * 2;
        RWD_Zero_Barrier_Period = zb * 2;
	
    }
    RWD_Barrier = barrier;
    // convert FCs to OCM ticks
    RWD_Wake_Period= wake * 2;
    RWD_Zero_Period= pw0 * 2;
    RWD_One_Period= pw1 * 2;
    RWD_Post_Wait= post_wait * 2;
    
    if(!RWD_Zero_Period || !RWD_One_Period || (!RWD_Gap_Period && !diff))
        return FALSE;

    // convert ascii string to bin if required
    if(command[0] == '0' || command[0] == '1')
    {
        if(!binstringtobinarray(RWD_Command_Buff, command))
            return FALSE;
    }
    else
        memcpy(RWD_Command_Buff, command, length);

    RWD_Command_Buff[length]= '*';
    RWD_Command_ThisBit= RWD_Command_Buff;

    // start clock and wait for TAG to wake if not already running
    // this is needed in case a non-resetting RWD command is issued before any other action has woken tag
    if(mGetLED_Clock() == mLED_OFF)
    {
        RWD_State= RWD_STATE_INACTIVE;
        InitHWReaderClock(OC_TOGGLE_PULSE, RWD_Fc / 2L, RWD_Fc, RWD_State);
        if(!reset)
            Delay_us((RFIDlerConfig.FrameClock * RFIDlerConfig.RWD_Wake_Period) / 100);
    }

    if(reset)
        RWD_State= RWD_STATE_GO_TO_SLEEP;
    else
        RWD_State= initial_state;

    // see if ISR has flagged RWD command finished
   if(block)
       while(RWD_State != RWD_STATE_ACTIVE)
           ;

    return TRUE;
}
Esempio n. 21
0
int main(void)
{
    uint8_t i, x, y, xo, yo;
    uint8_t xaxis = 10, yaxis = 53;

    MCU_initialize();                           // initialize MCU and kit
    Delay_ms(50);                               // wait for system stabilization
    LCD_initialize();                           // initialize text LCD module
    Beep();

    LCD_string(0x80, "Graphic LCD Test");       // display title on text LCD
    LCD_string(0xC0, "  VR1 Voltage   ");

    TCCR1A = 0x00;                              // CTC mode(4), don't output OC1A
    TCCR1B = _BV(WGM12) | _BV(CS12);            // 16MHz/256/(1+6249) = 10Hz
    TCCR1C = 0x00;                              //  (100ms interrupt period)
    OCR1A = 6249;
    TCNT1 = 0x0000;                             // clear Timer/Counter1

    TIMSK = _BV(OCIE1A);                        // enable OC1A interrupt
    ETIMSK = 0x00;
    TIFR =_BV(ICF1) | _BV(OCF1A) | _BV(OCF1B) | _BV(TOV1);// clear all interrupt flags
    ETIFR = _BV(OCF1C);
    sei();                                      // global interrupt enable

    ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS0);   // ADC enable, 500kHz
    ADMUX = _BV(REFS0) | _BV(MUX1) | _BV(MUX0); // select ADC3 with AVCC
    Delay_us(150);

    n = 0;                                      // initial interrupt count
    AD_flag = 0;

    while (1) {
        Clear_screen();                         // initialize GLCD screen

        Line(yaxis, xaxis - 1, yaxis, 125);     // draw X axis
        Line(yaxis - 2, 123, yaxis, 125);
        Line(yaxis + 2, 123, yaxis, 125);
        for (y = xaxis + 10; y <= xaxis + 110; y += 10)
            Line(yaxis - 1, y, yaxis + 1, y);
        for (y = xaxis, i = 0; y <= xaxis + 80; y += 20, i += 2) {
            GLCD_xy(7, y - 2);
            GLCD_character(i + '0');
        }
        GLCD_string(7, 108, "sec");

        Line(0, xaxis, yaxis + 1, xaxis);       // draw Y axis
        Line(2, xaxis - 2, 0, xaxis);
        Line(2, xaxis + 2, 0, xaxis);
        for (x = 3; x <= 43; x += 10)
            Line(x, xaxis - 1, x, xaxis + 1);

        GLCD_xy(6, 2);
        GLCD_character('0');
        GLCD_xy(0, 2);
        GLCD_character('V');

        yo = xaxis;                             // initial point of old data
        xo = yaxis;

        while (n) {
            while (!AD_flag) ;                  // wait until new A/D data
            AD_flag = 0;

            y = xaxis + n;                      // draw line from old point
            x = yaxis - AD_data;                //           to new point
            Line(xo, yo, x, y);

            yo = y;                             // old point <-- new point
            xo = x;
        }
    }

    return 0;
}
Esempio n. 22
0
void Delay_ms(uint32_t n)
{
	Delay_us(1000*n); 
	//return;
	
}