Example #1
0
void readHumidTimerHandler(void *T)
{
	I2C001_DataType data1;
	data1.Data1.TDF_Type = I2C_TDF_MRStart;
	data1.Data1.Data = ((HTDU21D_ADDRESS << 1) | I2C_READ);
	I2C001_WriteData(&I2C001_Handle1,&data1);

	delay11(DELAY);

	if(I2C001_GetFlagStatus(&I2C001_Handle1,I2C001_FLAG_NACK_RECEIVED) == I2C001_SET)
	{
		I2C001_ClearFlag(&I2C001_Handle1,I2C001_FLAG_NACK_RECEIVED);
		errorCounter++;
	}
	else
	{
		uint8_t msb = 0x00;
		uint8_t lsb = 0x00;
		uint8_t checksum = 0x00;

		USIC_CH_TypeDef* I2CRegs = I2C001_Handle1.I2CRegs;

		I2C001_DataType data2;
		data2.Data1.TDF_Type = I2C_TDF_MRxAck0;
		data2.Data1.Data = ubyteFF;
		I2C001_WriteData(&I2C001_Handle1,&data2);

		delay11(DELAY);

		if(!USIC_ubIsRxFIFOempty(I2CRegs))
		{
			msb = (uint8_t)I2CRegs->OUTR;
			//Result = (bool)TRUE;
		}

		I2C001_DataType data3;
		data3.Data1.TDF_Type = I2C_TDF_MRxAck0;
		data3.Data1.Data = ubyteFF;
		I2C001_WriteData(&I2C001_Handle1,&data3);

		delay11(DELAY);

		if(!USIC_ubIsRxFIFOempty(I2CRegs))
		{
			lsb = (uint8_t)I2CRegs->OUTR;
			//Result = (bool)TRUE;
		}

		I2C001_DataType data4;
		data4.Data1.TDF_Type = I2C_TDF_MRxAck1;
		data4.Data1.Data = ubyteFF;
		I2C001_WriteData(&I2C001_Handle1,&data4);

		delay11(DELAY);

		I2C001_DataType data5;
		data5.Data1.TDF_Type = I2C_TDF_MStop;
		data5.Data1.Data = ubyteFF;
		I2C001_WriteData(&I2C001_Handle1,&data5);

		delay11(DELAY);



		int d = USIC_GetRxFIFOFillingLevel(I2CRegs);
		// Read receive buffer, put the data in DataReceive1


		if(!USIC_ubIsRxFIFOempty(I2CRegs))
		{
			checksum = (uint8_t)I2CRegs->OUTR;
			//Result = (bool)TRUE;
		}


		unsigned int rawHumid = ((unsigned int) msb << 8) | (unsigned int) lsb;

		if(check_crc(rawHumid, checksum) != 0)
		{
			wrong_checksum = 1;
		}

		rawHumid &= 0xFFFC; //Zero out the status bits but keep them in place

		//Given the raw temperature data, calculate the actual temperature
		float tempRH = rawHumid / (float)65536; //2^16 = 65536
		rh = -6 + (125 * tempRH); //From page 14

		readHumid = 1;
	}
}
Example #2
0
//#pragma vector=RESET_VECTOR
//#define PROGRAMDEBUG  1
int main(void)
{
  INT16U i,temp,second;
  INT16U count,oldDI;
  INT8U RUN;
  //RUNRECORD runlog;
  unsigned char old__second;
	unsigned char old__minute;
	unsigned char old__hour;
	unsigned char old__day;
	unsigned char minute_counter=0;
	//unsigned char hour_counter=0;
  unsigned int DI_Convert=0;

  char checkcode[6]="vh11+\0";
	char DI_C[4]="DI=\0";
	char d[5];

	unsigned int Prog_Circle=0;
	//unsigned char cps[]="DataTime=\0";
	INT8U DI_Alter=0;
  INT8U Save_Hourdata=0;
  INT8U Save_Daydata=0;

  //INT8U a[16]="123456789ABCDEF";
  //INT8U b[17];
   // INT8U c[3]={0xf8,0x10,0x10};
  INT8U checknum[7];
  /***********************************************
                     device initializing
  ************************************************/
  CPU_init();
  P4OUT |=BIT0;   //flash rst
  GPRS_POWERON;
  RealData.R_D.DO=0;
  DIInput();
	DOOutput(RealData.R_D.DO);
   init_lcd ();
   clrram();
   LCD_light_ON;
   disp_img(0x01e0+960,30,64,zimo240128);
   //MemoryClear(Modbustore,sizeof(Modbustore));
   Modbustore =0;
   MemoryClear(local_mma_H,sizeof(local_mma_H));
   MemoryClear(local_mma_D,sizeof(local_mma_D));
   MemoryClear(local_mma_M,sizeof(local_mma_M));//100504
   MemoryClear(dev_mma_D,sizeof(dev_mma_D));
   MemoryClear(dev_mma_H,sizeof(dev_mma_H));
   MemoryClear(dev_mma_M,sizeof(dev_mma_M));  //100504
   MemoryClear(Hour_COD_avg,sizeof(Hour_COD_avg));
   MemoryClear(Hour_B01_avg,sizeof(Hour_B01_avg));
	delay11(3200);
  //GPRS_POWEROFF;
 //test

#ifdef PROGRAMDEBUG
 char c[3]={0x00,0,0};
 char aa='A';
 FlashBufferWrite(c,"abcdefg",7,0);
 //c[0]=0xf0;
 //FlashBuffertoMemory(c,0);
 Delay_N_mS(20000);
 c[0]=0;
 FlashBufferRead(c,checknum,5,0);
 checknum[0]=0;

 c[0]=0xf0;
 FlashMemorytoBuffer(c,0);
 c[0]=0;
 FlashBufferRead(c,checknum,5,0);
 checknum[0]=0;
 c[0]=0xf0;
 FlashMemoryRead(c,checknum,5);
 //FlashMemoryWrite(c,checkcode,5,0);
 Delay_N_mS(20000);
   //c[2]=0x05;
 //FlashMemoryWrite(c,&aa,1,0);
 Delay_N_mS(20000);
 c[2]=0;
 FlashMemoryRead(c,checknum,5);
#endif
 //---------------------------
 /****************************************************
                  system initializing
 ****************************************************/
 AT24C64_RS(checknum,0x00,6);
 Delay_N_mS(2000);
 AT24C64_RS(checknum,0x00,6);
 if(strcmp(checknum,checkcode)!=0)
	{
    v_charge1302();
		v_Set1302();
		
		for(count=0;count<6;count++)
			SPARA.pw[count]=(count+1)|0x30;  //初始密码123456
		
		for(count=0;count<9;count++)
		{
			SPARA.mn[count]=(count+1)|0x30;  //mn 12345678901234
			ml_mn[count]=parameter.sys_parameter.mn[count];
		}
			
		for(count=0;count<5;count++)
		{
			SPARA.mn[count+9]=count|0x30;
			ml_mn[count+9]=parameter.sys_parameter.mn[count+9];
		}
		
		SPARA.st[0]='3';             //st 32
		SPARA.st[1]='2';
		ml_st[0]='3';
		ml_st[1]='2';
		for(count=0;count<9;count++)
			SPARA.sim[count]=(count+1)|0x30;  //sim 123456789
		
		SPARA.rd_interval[0]='3';     //实时数据上报时间 60秒
		SPARA.rd_interval[1]='0';
		SPARA.rd_interval[2]='0';
		
		for(count=0;count<5;count++)
			SPARA.overtime[count]='0';    //超时时间 5秒
		SPARA.overtime[4]='5';
		SPARA.resendtime[0]='0';		//重发次数 3次
		SPARA.resendtime[1]='3';
		for(count=0;count<5;count++)
			SPARA.warntime[count]='0';    //报警时间 5
		SPARA.warntime[4]='5';
		
		for(count=0;count<4;count++)
			SPARA.reporttime[count]='0';	//上报时间 5
		SPARA.reporttime[3]='5';
		for(count=0;count<2;count++)
			SPARA.alarmtarge[count]=0x30+count;		//仪表污染物编号
		SPARA.alarmtarge[2]='\0';
		SPARA.alarmtarge[3]='\0';
							
		for(count=0;count<8;count++)
		{
			//ADPARA(count).po_id[0]='P';
			//ADPARA(count).po_id[1]=0x31+count;
			//ADPARA(count).po_id[2]='\0';
                        ADPARA(count).po_id[0]='0';
			ADPARA(count).po_id[1]='0';
			ADPARA(count).po_id[2]='0';
			ADPARA(count).ADUV.b=16.0;
			ADPARA(count).ADLV.b=0.0;
			ADPARA(count).U_Alarmlimt.b=10.0;
			ADPARA(count).L_Alarmlimt.b=0.0;
			ADPARA(count).rate.b=(16.0-0.0)/0x666;
					
			ADPARA(count).AI_Type=2;
			
		}
    for(count=0;count<6;count++)
    SPARA.Serial_Baud[count]=0;
		//LCD_Baud=0;
		for(checknum[0]=0;checknum[0]<6;checknum[0]++)
			for(count=0;count<16;count++)
				SPARA.PO_SerialNum[checknum[0]][count]=0xff;		

    SPARA.PO_SerialNum[0][0]=0x05;
		
    for(count=0;count<6;count++)
		{
			SPARA.PO_Type[count]=0;
			Channel_Num[count]=0;
		}
    SPARA.PO_Type[0]=1; //水,哈希
			Channel_Num[0]=1;
		SPARA.alarmtarge[10]=0;//baud rate
    SPARA.LCD_Backtime=1;
		
		AT24C64_W(parameter.sys_setting,0x10,sizeof(PARAMETER));	
                /*初始化历史数据标志组结构体,存储于Flash第一页(页地址0x00)*/
                INT8U  Rdaddr[3]={0,0,0};
                INT16U pageaddr=0;
                HISDATAFLAGS Sighisdata;
                MemoryClear(&Sighisdata,sizeof(Sighisdata));
                for(count=0;count<7;)
                {
                  Sighisdata.page =0x10+count*31*24;
                  Rdaddr[1]=(INT8U)(pageaddr>>8);
                  Rdaddr[2]=(INT8U)(pageaddr);
                  FlashBufferWrite(Rdaddr,&Sighisdata,sizeof(Sighisdata),FLASHBUFFER1);
                  FlashBufferWrite(Rdaddr,&Sighisdata,sizeof(Sighisdata),FLASHBUFFER1);
                  count++;
                  pageaddr=count*120;
                }
                Rdaddr[0]=0;
                Rdaddr[1]=0;
                Rdaddr[2]=0;
                FlashBuffertoMemory(Rdaddr,FLASHBUFFER1);

                HISDATAFLAGS_D sig_d;
                pageaddr=0;
                MemoryClear(&sig_d,sizeof(sig_d));
                for(count=0;count<13;)
                {
                  sig_d.page =5400+count*31;
                  Rdaddr[0]=0;
                  Rdaddr[1]=((INT8U)(pageaddr>>8))|0x28;  //page 5
                  Rdaddr[2]=(INT8U)(pageaddr);
                  FlashBufferWrite(Rdaddr,&sig_d,sizeof(sig_d),FLASHBUFFER1);
                  count++;
                  pageaddr=count*80;
                }
                Rdaddr[0]=0;
                Rdaddr[1]=0x28;
                Rdaddr[2]=0;
                FlashBuffertoMemory(Rdaddr,FLASHBUFFER1);

                HISDATAFLAGS_R sig_r;
                MemoryClear(&sig_r,sizeof(sig_r));
                pageaddr=0;
                for(count=0;count<3;)
                {
                  sig_r.page =6000+count*24*12;
                  Rdaddr[0]=0;
                  Rdaddr[1]=((INT8U)(pageaddr>>8))|0x50;
                  Rdaddr[2]=(INT8U)(pageaddr);
                  FlashBufferWrite(Rdaddr,&sig_r,sizeof(sig_r),FLASHBUFFER1);
                  count++;
                  pageaddr=count*200;
                }
                Rdaddr[0]=0;
                Rdaddr[1]=0x50; // page 10
                Rdaddr[2]=0;
                FlashBuffertoMemory(Rdaddr,FLASHBUFFER1);
                
                //运行日志存储于8190页(1FFE)
                RUNRECORD runlog;
                MemoryClear(&runlog,sizeof(runlog));
                pageaddr=0; 
                for(count=0;count<10;count++)
                {
                  pageaddr=count*64;
                  Rdaddr[0]=0xff;
                  Rdaddr[1]=((INT8U)(pageaddr>>8))|0xf0;
                  Rdaddr[2]=(INT8U)(pageaddr);
                  FlashBufferWrite(Rdaddr,&runlog,sizeof(runlog),FLASHBUFFER1);
                }
                Rdaddr[0]=0xff;
                Rdaddr[1]=0xf0;
                Rdaddr[2]=0;
                FlashBuffertoMemory(Rdaddr,FLASHBUFFER1);
                
                //Sighisdata.page =0;
                //FlashBufferWrite(Rdaddr,&Sighisdata,sizeof(Sighisdata),FLASHBUFFER1);
		AT24C64_W(checkcode,0x00,6);


	}
Example #3
0
float readHumidity(void)
{
	if(canH)
	{
		canH = 0;
		I2C001_DataType data1;
		data1.Data1.TDF_Type = I2C_TDF_MStart;
		data1.Data1.Data = ((HTDU21D_ADDRESS << 1) | I2C_WRITE);
		I2C001_WriteData(&I2C001_Handle1,&data1);

		delay11(DELAY);

		I2C001_DataType data2;
		data2.Data1.TDF_Type = I2C_TDF_MTxData;
		data2.Data1.Data = TRIGGER_HUMD_MEASURE_NOHOLD;
		I2C001_WriteData(&I2C001_Handle1,&data2);

		delay11(DELAY);

		if(timerHumidOn == 0)
		{
			TimerRdHumid = SYSTM001_CreateTimer(55, SYSTM001_PERIODIC, readHumidTimerHandler, NULL);
			SYSTM001_StartTimer(TimerRdHumid);
			timerHumidOn = 1;
		}

		while(TRUE)
		{
			if(errorCounter > 3)
			{
				errorCounter = 0;
				SYSTM001_StopTimer(TimerRdHumid);
				SYSTM001_DeleteTimer(TimerRdHumid);
				TimerRdHumid = 0;
				timerHumidOn = 0;
				canH = 1;
				return 998;
			}
			else if(1 == wrong_checksum)
			{
				wrong_checksum = 0;
				SYSTM001_StopTimer(TimerRdHumid);
				SYSTM001_DeleteTimer(TimerRdHumid);
				TimerRdHumid = 0;
				timerHumidOn = 0;
				canH = 1;
				return 999;
			}
			else if(1 == readHumid)
			{
				readHumid = 0;
				SYSTM001_StopTimer(TimerRdHumid);
				SYSTM001_DeleteTimer(TimerRdHumid);
				TimerRdHumid = 0;
				timerHumidOn = 0;
				canH = 1;
				break;
			}
		}
	}
	return rh;
}