Exemple #1
0
/**
 * Verifie et attend si l'afficheur a fini d'effectuer ses op�rations interne.
 */
void busyFlag(void) {

    TRIS_D7_LCD = 1;
    TRIS_D6_LCD = 1;
    TRIS_D5_LCD = 1;
    TRIS_D4_LCD = 1;

    // do {
    E_LCD = 0;
    RS_LCD = 0;
    RW_LCD = 1;

    delay100us(5);
    E_LCD = 1;

    delay100us(5);

    E_LCD = 0;
    // Provoque des blocages en mode normal => supprim� par SV
    // }
    //while (D7_LCD);

    E_LCD = 0;

    /////////////adresse � enregistrer//////////////

    TRIS_D7_LCD = 0;
    TRIS_D6_LCD = 0;
    TRIS_D5_LCD = 0;
    TRIS_D4_LCD = 0;
}
Exemple #2
0
static void rk30_hdmi_set_pwr_mode(int mode)
{
	if(hdmi->pwr_mode == mode)
		return;
	hdmi_dbg(hdmi->dev, "[%s] mode %d\n", __FUNCTION__, mode);	
	switch(mode)
	{
		case PWR_SAVE_MODE_A:
			HDMIWrReg(SYS_CTRL, 0x10);
			break;
		case PWR_SAVE_MODE_B:
			HDMIWrReg(SYS_CTRL, 0x20);
			break;
		case PWR_SAVE_MODE_D:
			// reset PLL A&B
			HDMIWrReg(SYS_CTRL, 0x4C);
			delay100us();
			// release PLL A reset
			HDMIWrReg(SYS_CTRL, 0x48);
			delay100us();
			// release PLL B reset
			HDMIWrReg(SYS_CTRL, 0x40);
			break;
		case PWR_SAVE_MODE_E:
			HDMIWrReg(SYS_CTRL, 0x80);
			break;
	}
	hdmi->pwr_mode = mode;
	if(mode != PWR_SAVE_MODE_A)
		msleep(10);
	hdmi_dbg(hdmi->dev, "[%s] curmode %02x\n", __FUNCTION__, HDMIRdReg(SYS_CTRL));
}
Exemple #3
0
/**
 * Implementation of the write Function of the 24C512 chip.
 * @see eeprom.h
 * @private
 */
void _writeEeprom24C512Char(Eeprom* eeprom_, unsigned long index, unsigned char value) {
    /*
    OutputStream* outputStream = getDebugOutputStreamLogger();
    appendStringAndDec(outputStream, "write Eeprom index=", index);
    appendStringAndDec(outputStream, ", value=", value);
    appendCRLF(outputStream);
    */

    I2cBusConnection* i2cBusConnection = _24c512GetI2cBusConnection(eeprom_);
    I2cBus* i2cBus = i2cBusConnection->i2cBus;

    portableMasterWaitSendI2C(i2cBusConnection);
    portableMasterStartI2C(i2cBusConnection);
    WaitI2C(i2cBus);
    unsigned int blockAddress = get24C512BlockAddress(index);
    portableMasterWriteI2C(i2cBusConnection, blockAddress);
    WaitI2C(i2cBus);

    unsigned int msbaddress = index >> 8;
    unsigned int lsbaddress = index & 0xFFFF;

    portableMasterWriteI2C(i2cBusConnection, msbaddress);
    WaitI2C(i2cBus);
    portableMasterWriteI2C(i2cBusConnection, lsbaddress);
    WaitI2C(i2cBus);

    portableMasterWriteI2C(i2cBusConnection, value);
    WaitI2C(i2cBus);
    portableMasterStopI2C(i2cBusConnection);
    WaitI2C(i2cBus);
    delay100us(20);  // delay <=3 don't write correctly if we write several times
}
Exemple #4
0
static inline void rk30_hdmi_config_phy_reg(int reg, int value)
{
	HDMIWrReg(reg, value);
	HDMIWrReg(SYS_CTRL, 0x2C);
	delay100us();
	HDMIWrReg(SYS_CTRL, 0x20);
	msleep(1);
}
Exemple #5
0
/*--------------
18b20初始化
返回1则初始化成功
返回0则初始化失败
----------------*/
bit initDS18B20(void)
{
	bit returnData;
	
	DS18B20 = 1;    //DQ复位
	delay10us();   //稍做延时
	
	DS18B20 = 0;    //单片机将DQ拉低
	delay100us(6); //精确延时 大于 480us 小于960us
	DS18B20 = 1;     //拉高总线
	delay100us(1);  //15~60us 后 接收60-240us的存在脉冲
	returnData=~DS18B20; //如果x=1则初始化成功, x=0则初始化失败
	
	delay10us();  //稍作延时返回
	delay10us();
	delay10us();
	
	return returnData;
}
Exemple #6
0
// 读取DHT11传送的5个字节,但只返回湿度值
unsigned char getAllBytes(void)
{
	unsigned char temp, loopCount;
	unsigned char tempHHigh, tempHLow, tempTHigh, tempTLow, tempCheckSum;
	unsigned char returnData;
	
	//如果读取湿度不成功,则返回0xff,否则返回相对湿度值
	returnData = 0xff;
	
	//主机拉低20ms (要求大于18ms)
	DHT11=0;
	delay100us(200);
	DHT11=1;
	//总线由上拉电阻拉高 主机延时20us
	delay10us();
	delay10us();
	delay10us();
	delay10us();
	//主机设为输入 判断从机响应信号 
	DHT11=1;
	//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行	  
	if(!DHT11)
	{
		loopCount = 200;
		//判断从机是否发出 80us 的低电平响应信号是否结束,或是否超时	 
		while( !DHT11 && loopCount-- );
		
		loopCount = 200;
		//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态,或是否超时
		while( DHT11 && loopCount--  );
		//数据接收状态		 

		tempHHigh    = getOneByte();
		tempHLow     = getOneByte();
		tempTHigh    = getOneByte();
		tempTLow     = getOneByte();
		tempCheckSum = getOneByte();
		DHT11=1;
		
		//数据校验 
		
		temp = tempHHigh + tempHLow + tempTHigh + tempTLow;
		if( temp == tempCheckSum && temp>0 )
		{
			// 数据有效 返回湿度
			returnData = tempHHigh;
		}

	}// end if
	
	return returnData;

}
/**
 * 30F Implementation of ANX conversion.
 */
int getANX (char channel) {
    ADCON1bits.ADON = 0; //Stop ADC
    // ADCON1 Register
    ADCON1bits.SSRC = 0; //manual convert option
    ADCON1bits.ASAM = 0; //manual sample
    ADCON1bits.FORM = 0b00; //integer
    // ADCON2 Register
    ADCON2bits.VCFG = 0; //ADD - AGND
    // ADCON3 Register
    ADCON3bits.SAMC = 1;            // ????
    ADCON3bits.ADCS = 0b101010;     // ????

    // ADCHS Register
    // Set up A/D Channel Select Register to convert ANX on Mux A input
    // of CH0 and CH1 S/H amplifiers
    ADCHS = channel;

    // ADCSSL Register
    // Channel Scanning is disabled. All bits left to their default state
    ADCSSL = 0x0000;

    // ADPCFG Register
    // Set up channels ANX as analog input and configure rest as digital
    // Recall that we configured all A/D pins as digital when code execution
    // entered main() out of reset
    unsigned int configport = 1 << channel;
    configport = configport ^ 0b1111111111111111; //inverse configport
    
    ADPCFG = configport;
    // DAC ON
    ADCON1bits.ADON = 1;  
    // start acquisition
    ADCON1bits.SAMP =  1; 

    // Delay of 0.1 ms
    delay100us(1);
    // stop acquisition
    ADCON1bits.SAMP =  0; 
    // wait end of conversion
    while(!ADCON1bits.DONE){
    
    } 
          
    unsigned int result;
    result = ADCBUF0;

    // stop ADC
    ADCON1bits.ADON = 0;    
    
    return result;
}
Exemple #8
0
void hd44780_sendComLcd(char comLcd) {
    // Transfer du MSB pr�paration des signaux de commande
    delay100us(5);
    E_LCD = 0;
    delay100us(5);
    RS_LCD = 0;
    delay100us(5);
    RW_LCD = 0;
    delay100us(5);

    // transfer des 4 bits de poid fort
    D7_LCD = (comLcd & 0b10000000) >> 7;
    D6_LCD = (comLcd & 0b01000000) >> 6;
    D5_LCD = (comLcd & 0b00100000) >> 5;
    D4_LCD = (comLcd & 0b00010000) >> 4;

    //validation des 4 bits
    delay100us(5);
    E_LCD = 1;
    delay100us(5);
    E_LCD = 0;
    delay100us(5);

    // Transfer du LSB pr�paration des signaux de commande

    // transfer des 4 bits de poid faible
    D7_LCD = (comLcd & 0b00001000) >> 3;
    D6_LCD = (comLcd & 0b00000100) >> 2;
    D5_LCD = (comLcd & 0b00000010) >> 1;
    D4_LCD = (comLcd & 0b00000001);

    //validation des 4 bits
    delay100us(5);
    E_LCD = 1;
    delay100us(5);
    E_LCD = 0;
}
Exemple #9
0
void hd44780_sendIniComLcd(char D7, char D6, char D5, char D4) {
    delay100us(5);
    E_LCD = 0;
    delay100us(5);
    RS_LCD = 0;
    delay100us(5);
    RW_LCD = 0;
    delay100us(5);
    D7_LCD = D7;
    D6_LCD = D6;
    D5_LCD = D5;
    D4_LCD = D4;
    delay100us(5);
    E_LCD = 1;
    delay100us(5);
    E_LCD = 0;
    delay100us(5);
}
Exemple #10
0
void rk2928_hdmi_control_output(int enable)
{
	char mutestatus = 0;
	
	if(enable) {
		mutestatus = HDMIRdReg(AV_MUTE);
		if(mutestatus && (m_AUDIO_MUTE | m_VIDEO_BLACK)) {
			HDMIWrReg(AV_MUTE, v_AUDIO_MUTE(0) | v_VIDEO_MUTE(0));
    		rk2928_hdmi_sys_power_up();
    		rk2928_hdmi_sys_power_down();
     		rk2928_hdmi_sys_power_up();
			if(analog_sync){
				HDMIWrReg(0xce, 0x00);
				delay100us();
				HDMIWrReg(0xce, 0x01);
				analog_sync = 0;
			}
		}
	}
	else {
		HDMIWrReg(AV_MUTE, v_AUDIO_MUTE(1) | v_VIDEO_MUTE(1));
	}
}
int receiverZigbeeTest(void) {
    /*
    char *macAdresse = "1";
    char *panId = "1620";
    char *channel = "100000";
    char *function = "0";
    char *adresse = "0";
    char *data;
    char receiveChar;
    char valide;
    int toto;
    */
    
    TRISB = 0;
    TRISB = 0;

    // Configure serialBuffer
    Buffer zigbeeBuffer;
    initBuffer(&zigbeeBuffer, SERIAL_PORT_ZIGBEE);
    setAndOpenSerialBuffer(&zigbeeBuffer);

    Buffer debugBuffer;
    initBuffer(&debugBuffer, SERIAL_PORT_DEBUG);
    setAndOpenSerialBuffer(&debugBuffer);

    setSerialBuffer(&debugBuffer);
    putString("Beacon Receiver start rs232\n");

    initPwmForServo(1500);    

    // Initialization of laserDetector
    // Laser 1
    initLaserDetectorStruct(
            LASER_INDEX_1,
            LASER_SERVO_INDEX_1,
            &getLaserPin1,
            SERVO_LASER_1_MAX_LEFT_POSITION_DEFAULT_VALUE, 
            SERVO_LASER_1_MAX_RIGHT_POSITION_DEFAULT_VALUE,
            SHORT_TRACKING_INTERVAL,
            BEACON_SERVO_1_FACTOR,
            BEACON_SERVO_1_INIT_COMPUTE_VALUE,
            BEACON_SERVO_1_ANGLE_DEGREE
    );
    // Laser 2
    initLaserDetectorStruct(
            LASER_INDEX_2,
            LASER_SERVO_INDEX_2,
            &getLaserPin2,
            SERVO_LASER_2_MAX_LEFT_POSITION_DEFAULT_VALUE,
            SERVO_LASER_2_MAX_RIGHT_POSITION_DEFAULT_VALUE,
            SHORT_TRACKING_INTERVAL,
            BEACON_SERVO_2_FACTOR,
            BEACON_SERVO_2_INIT_COMPUTE_VALUE,
            BEACON_SERVO_2_ANGLE_DEGREE
    );

    while (1) {
        int laserIndex;
        for (laserIndex = 0; laserIndex < LASER_COUNT; laserIndex++) {
            detectsLaser(laserIndex);
        }
        delay100us(5);

        char c = handleChar(&debugBuffer, false);
        if (c != 0) {
            putString("---------\n");
            Laser* laser1 = getLaser(LASER_INDEX_1);
            Laser* laser2 = getLaser(LASER_INDEX_2);
    
            printLaserStruct(&debugBuffer, laser1);
            println();
            printLaserStruct(&debugBuffer, laser2);
            clearBuffer(&debugBuffer);

            Point p = getPosition(DISTANCE_BETWEEN_BEACON);
            if (p.x != 0 && p.y != 0) {
                sendDec(p.x);
                putString(", ");
                sendDec(p.y);
                println();
            }    
        }
    }

    /*
    valide = 0;
    while (1) {
        if (U2STAbits.URXDA == 1){
                valide = getc();
                putc1 (valide);
        }
        if (U1STAbits.URXDA == 1){
                valide = getc1();
                putc (valide);
        }
    }
    */
}