Пример #1
0
/************************************************************************
 * 功能:  读取温度,精度是0.01摄氏度
 */
unsigned int ReadTemperatureXX_XC(void)
{
	unsigned long TP_temp;
	Convert_T();
	TP_temp = Read_Temperature();
	TP_temp *= 100;
	TP_temp /= 16;
	return (unsigned int)TP_temp;
}
Пример #2
0
/************************************************************************
 * 功能:  读取温度,精度是0.01摄氏度
 */
unsigned int ReadTemperatureChannel(unsigned char index)
{
	unsigned long TP_temp;
	set_temp_channel(index);
	TP_temp = Read_Temperature();
	Convert_T();
	TP_temp *= 100;
	TP_temp /= 16;
	return (unsigned int)TP_temp;
}
uint16_t Read_Temp_Filter()
{
    uint16_t  Temp_Data[Temp_N]; 
    uint8_t sign;
    uint8_t i;
    uint16_t temp;
    uint32_t Sum = 0;
    for(i=0; i<Temp_N; i++){
        Read_Temperature(&sign,&temp);
        Temp_Data[i] = sign*temp;
    }
    
    L_From_B(Temp_Data,Temp_N);
    //去掉最大最小值求平均
    for(i=1; i<Temp_N-1; i++){
        Sum += Temp_Data[i];
    }
    temp = Sum/(Temp_N-2);
    return temp;   
}
Пример #4
0
/**
 * @brief  Main program.
 * @param  None
 * @retval None
 */
int main(void)
{
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);

  Redbull_Init();

  char buff[128] = { 0 };

  LCD_DisplayStringLine(LINE(10), (uint8_t*) " Analog ..............................");
  Analog_Config();
  printRight(10, "ok");

  LCD_DisplayStringLine(LINE(11), (uint8_t*) " DAC .................................");
  DAC_Config();
  printRight(11, "ok");

  f_mount(0, &fatfs);

  LCD_DisplayStringLine(LINE(12), (uint8_t*) " TEMP ................................");
  OneWireInit();
  float c = Read_Temperature();
  sprintf(buff, "%.1f", c);
  printRight(12, buff);
  printf("%s\n", buff);

  RGBLED_GPIO_Config(0xff);

  RGBLED_Update(0xff,0xff,0xff);
  Delay(200);
  RGBLED_Update(0xff,0,0);
  Delay(200);
  RGBLED_Update(0,0xff,0);
  Delay(200);
  RGBLED_Update(0,0,0xff);
  Delay(200);
  RGBLED_Update(0,0,0);

  //static char path[1024] = "0:";
  //LCD_Clear(LCD_COLOR_BLUE);
  //LCD_DisplayStringLine(0, (uint8_t*) "Loading...");
  Delay(1000);

  //int i = 10;

  LCD_Clear(LCD_COLOR_BLACK);

  LCD_SetDisplayWindow(0, 0, 239, 319);
  LCD_WriteReg(3, 0x1000);
  LCD_WriteRAM_Prepare();


  TIM_Cmd(TIM7, ENABLE);

  DMARead();

  //float h = 0, s = 1, v = 1;

  while (1)
  {
    while (DMA_GetFlagStatus(DMA1_FLAG_TE1) == SET)
    {
      printf("DMA error\n");
      Delay(100);
    }

    //uint32_t ms = millis();

    uint16_t rem = DMA_GetCurrDataCounter(DMA1_Channel1);
    uint16_t cnt = 0xffff - rem;

    if (cnt >= 80 && cnt < 512)
    {
      continue;
    }

    uint32_t buff[160] = { 0 };

    uint16_t tillend = cnt > 160 ? 160 : cnt;
    uint16_t fromstart = 160 - tillend;

    uint16_t bcnt = cnt - 160;

    // before
    SRAM_ReadBuffer((uint16_t*) &buff[0], bcnt * 4, tillend * 2);
    // after
    if (fromstart)
    {
      SRAM_ReadBuffer((uint16_t*) &buff[tillend], 0, fromstart * 2);
    }

    uint8_t prevsv = 0;

    for (uint16_t i = 0; i < 320; i++)
    {
      uint16_t val = 0;
      if (i & 1)
      {
        val = buff[i >> 1] & 0x0fff;
      }
      else
      {
        val = (buff[i >> 1] >> 16) & 0x0fff;
      }

#define MAXV (17 * 238)

      val = val > MAXV ? MAXV : val;

      uint8_t sv = val / 17;

      sv = sv > 238 ? 238 : sv;

      sv++;

      if (!prevsv)
      {
        prevsv = sv;
      }

      uint16_t pbuf[240];

      uint8_t minv = sv > prevsv ? prevsv : sv;
      uint8_t maxv = sv < prevsv ? prevsv : sv;

      for (uint8_t y = 0; y < 240; y++)
      {
        if (y >= minv && y <= maxv)
        {
          pbuf[y] = LCD_COLOR_YELLOW;
        }
        else
        {
          pbuf[y] = LCD_COLOR_BLACK;
        }
      }

      prevsv = sv;

      DMA_InitTypeDef DMA_InitStructure;

      DMA_DeInit(DMA2_Channel5);
      DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) pbuf;
      DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) &LCD->LCD_RAM; // FSMC
      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
      DMA_InitStructure.DMA_BufferSize = 240;
      DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
      DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
      DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
      DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
      DMA_InitStructure.DMA_Priority = DMA_Priority_Low;
      DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;

      DMA_Init(DMA2_Channel5, &DMA_InitStructure);

      DMA_Cmd(DMA2_Channel5, ENABLE);

      RTC_t rtc;
      RTC_GetTime(&rtc);

      //RGBLED_Update((rtc.min & 1) ? 0 : (rtc.hour * 10), ((rtc.sec >> 2) & 1) ? 0 : (rtc.min * 4), rtc.sec * 4);

      while (!DMA_GetFlagStatus(DMA2_FLAG_TC5))
        ;

      DMA_ClearFlag(DMA2_FLAG_TC5);

      while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) == RESET)
        ;

    }
Пример #5
0
//===========================================
void EXTI1_IRQHandler(void)
{
	if(EXTI_GetFlagStatus(EXTI_Line1) == SET)
	{
		u8 i = 0,j = 0;
		static u8 sec_count = 0;
		static u16 bat_count = 0;
		static u8 current_sec = 0;
		
		sec_count ++;
		if(networkStatus != NETWORK_LOST)
		{
			connTimeout ++;
			if(connTimeout == CONNECTION_TIMEOUT)
			{
				networkStatus = NETWORK_LOST;
				event = EVENT_NETWORK_LOST;
				sysStatus |= SYSTEM_ERR_NETWORK;
				displayStatus(sysStatus);
				sendResponse(CMD_REQUEST_RECONNECT,CMD_REQUEST_RECONNECT);
				connTimeout = 0;
			}
		}
		else //network lost
		{
			if(!fEthernetHardReseted)
				{
					u32 i = 0;
					
					GPIO_InitTypeDef GPIO_InitStructure;
					GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
					GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
					GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
					GPIO_Init(GPIOB, &GPIO_InitStructure);
					GPIO_WriteBit(ETHERNET_RESET_PORT, ETHERNET_RESET_PIN,Bit_SET); 
					
					for(i=0;i<10000;i++) __NOP;
					
					GPIO_WriteBit(ETHERNET_RESET_PORT, ETHERNET_RESET_PIN,Bit_RESET);
					fEthernetHardReseted = true;
				}
		}
		

		// Check if SDC error in running time
		if(sysStatus & SYSTEM_ERR_SDC)
		{
			// Try to reinit SDC
			initSDC();
			// If SDC still not avaiable then reset system
			if(sysStatus & SYSTEM_ERR_SDC)
			{
				if(!fSdcErr)
					NVIC_SystemReset();
			}
			else
			{
				fSdcErr = false;
				displayStatus(sysStatus);
			}	
		}
		
		
		if(sec_count == 60)
		{
			sec_count = 0;
			bat_count ++;
			if(bat_count == 5)
			{
				u16 adc_value = 0;
				u32 battery_volt = 0;
				u32 power_volt = 0;
				
				adc_value = ADC_GetConversionValue(ADC1);
				battery_volt = ((adc_value*33*62/4096)/15);
				if(battery_volt < BATTERY_VOLT_EMPTY)
				{
					GPIO_WriteBit(CHARGE_PORT,CHARGE_PIN,Bit_RESET);
				}
				else if(battery_volt >= BATTERY_VOLT_FULL)
				{
					GPIO_WriteBit(CHARGE_PORT,CHARGE_PIN,Bit_SET);
				}
				adc_value = ADC_GetConversionValue(ADC2);
				power_volt = ((adc_value*33*62/4096)/15);
				if(power_volt < BATTERY_VOLT_FULL)
				{
					//sendWarning(WARNING_OUT_OF_POWER);
//					fWarning = true;
//					warning = WARNING_OUT_OF_POWER;
				}
				bat_count = 0;
			}
			rtS = DS1307_GetTime();
			for(i = 0;i<page->header.itemCount;i++)
			{
				PLAYLIST_ITEM* playlist = (PLAYLIST_ITEM*)page->popup[i].Info.data;
				
				if((playlist[0].header.dataType == PLAYLIST_CLOCK)||(playlist[0].header.dataType == PLAYLIST_TEMP))
					page->popup[i].Info.header.isUpdate = false;
			}
			
			sysTemp = Read_Temperature();
			if(sysTemp > wnConfig.maxTemp)
			{
				//sendWarning(WARNING_TOO_HOT);
				//fWarning = true;
				//warning = WARNING_TOO_HOT;
			}			
		}
		for(i = 0;i<page->header.itemCount;i++)
		{
			if(page->popup[i].Info.header.dataType == POPUP_PLAYLIST)
			{
				PLAYLIST_ITEM* playlist = (PLAYLIST_ITEM*)page->popup[i].Info.data;
				
				if((page->popup[i].Info.header.isUpdate)&&(page->popup[i].Info.header.countDown))
				{
					page->popup[i].Info.header.countDown --;
					if(!page->popup[i].Info.header.countDown)
						page->popup[i].Info.header.isUpdate = false;
				}
				for(j = 0;j<page->popup[i].Info.header.itemCount;j++)
				{
					if((playlist[j].TTL_count < 0xFFFF)&&(playlist[j].TTL_count>0))
						playlist[j].TTL_count --;					
				}
			}
		}
		EXTI_ClearFlag(EXTI_Line1);
	}
}