void Analog_scan(void) { StartADC(); adc[0] += (REG_AD_CH0_BUF - adc[0] + 4) / 8; adc[1] += (REG_AD_CH1_BUF - adc[1] + 4) / 8; adc[2] += (REG_AD_CH2_BUF - adc[2] + 4) / 8; StopADC(); }
void Analog_initialise(void) { static bool initialised = false; if (!initialised) { initialised = true; StartADC(); adc[0] = REG_AD_CH0_BUF; adc[1] = REG_AD_CH1_BUF; adc[2] = REG_AD_CH2_BUF; StopADC(); } int i; for (i = 0; i < 12; ++i) { Analog_scan(); } }
char output_logic(void) { char error = 0; switch (present_state) { case STATE_Idle: PORTC = 0b00000111; // Reset all Flip-Flops at PORTB if (postscalerflag30s == 1) { postscalerflag30s =0; Trigger = 1; } break; case STATE_Setup_Pot: T3CON = 0; ADON = 0; CloseI2C(); InitializeTimer3(); //interrupt every second InitADC(); postscaler = 0; postscalerflag = 0; SendStringUSART("Analog Mode Acquiring"); PORTC = 0b00000101; // Reset all Flip-Flops at PORTB SelectChannelADC(0);//select AN0 break; case STATE_Pot: if (postscalerflag == 1) { Value_AN0=0; Value_AN0 = GetSampleADC(); sprintf(CharTX, "DATA ANALOG :Humedad TIERRA = %d",Value_AN0); SendStringUSART(CharTX); postscalerflag = 0; Trigger =1; } break; case STATE_Stop_Pot: break; case STATE_Setup_TEMP: SendStringUSART("I2C Mode Acquiring"); PORTC = 0b00000100; // Reset all Flip-Flops at PORTB SelectChannelADC(1);//select AN1 break; case STATE_TEMP: if (postscalerflag == 1) { Value_AN1=0; Value_AN1 = GetSampleADC(); ////Value_temp = (float) ((((Value_AN1 / 1023.0) * Vdd - Vo)) / sensibilidad); /// Sensor Placa XLP Value_temp = (float)(log(10000.0 * ((1024.0 / Value_AN1 - 1)))); Value_temp = (float)(1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Value_temp * Value_temp )) * Value_temp )); Value_temp = (float)(Value_temp - 273.15); // Convert Kelvin to Celcius //Temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit if(Value_pot < 50){ PORTBbits.RB5 =1; } else{ PORTBbits.RB5 =0; } sprintf(CharTX, "DATA ANALOG :Temperature = %.1f C", Value_temp); SendStringUSART(CharTX); postscalerflag = 0; Trigger = 1; } break; case STATE_Stop_TEMP: break; case STATE_Setup_ONEWIRE: PORTC = 0b00000111; // Reset all Flip-Flops at PORTB TRISBbits.TRISB4 = 0; PORTBbits.RB4 = 1; TMR2IE = 1; // Enable Timer2 interrupt T2CON = 0; // Prescaler 1:1, and Timer2 is off initially TMR2IF = 0; // Clear TMR INT Flag bit TMR2 = 0; T2CONbits.T2CKPS = 0b01; break; case STATE_ONEWIRE: GetDataSensorDHT22(); if (CheckSum == ((RH_Byte1 + RH_Byte2 + T_Byte1 + T_Byte2) & 0xFF)) { if (sign) { sprintf(CharTX, "DATA DHT22 :Temperature = -%.1f C", Value_tempdht22); SendStringUSART(CharTX); } else { sprintf(CharTX, "DATA DHT22 :Temperature = %.1f C", Value_tempdht22); SendStringUSART(CharTX); } sprintf(CharTX, "DATA DHT22 :Humidity = %.1f %%", Value_rhdht22); SendStringUSART(CharTX); } else { SendStringUSART("Checksum Error! Trying Again ... "); } Trigger = 1; break; case STATE_Stop_ONEWIRE: break; case STATE_Setup_I2C: Open_I2C1(); break; case STATE_I2C: if (postscalerflag == 1) { // I2C_dev = WriteDEVICE_I2C(AddressByteMCP, 0x07); // I2C_manu = WriteMANU_I2C(AddressByteMCP, 0x06); I2C_TemFormula = ReadByte_I2C(AddressByteMCP, 0x05); //temperature sprintf(CharTX2, "DATA I2C :Temperature = %.1f C", I2C_TemFormula); SendStringUSART(CharTX2); postscalerflag = 0; Trigger = 1; } break; case STATE_Stop_I2C: SendStringUSART("LDR mode ON"); break; case STATE_Setup_LDR: //InitializeTimer3(); //interrupt every second SelectChannelADC(9);//select AN9 break; case STATE_LDR: if (postscalerflag == 1) { Value_AN9 = 0; Value_AN9 = GetSampleADC(); sprintf(CharTX, "DATA LDR :Valor Analog = %d",Value_AN9); SendStringUSART(CharTX); postscalerflag = 0; Trigger = 1; } break; case STATE_Stop_LDR: SendStringUSART("Sleep 8s"); CloseI2C(); T2CON = 0; StopADC(); SendStringUSART("Idle mode ON"); break; default: error = 1; } return (error); }
/********************************************************************* * * MainTask * ********************************************************************** */ void MainTask(void) { GUI_Init(); WM_SetCreateFlags(WM_CF_MEMDEV); /* Use memory devices on all windows to avoid flicker */ WM_EnableMemdev(WM_HBKWIN); WM_SetCallback(WM_HBKWIN, &_cbBkWin); GUI_SetBkColor(GUI_BLUE); GUI_SetFont(&GUI_Font16B_1); GUI_Clear(); ahButton[0] = BUTTON_Create(318-52,152,75-21, 20, GUI_ID_ADC, BUTTON_CF_SHOW ); BUTTON_SetTextColor(ahButton[0],BUTTON_CI_UNPRESSED,GUI_GREEN); BUTTON_SetFont(ahButton[0],&GUI_Font16B_1); BUTTON_SetText(ahButton[0],"Inc"); ahButton[1] = BUTTON_Create(318-52,174,75-21, 20, GUI_ID_DAC, BUTTON_CF_SHOW ); BUTTON_SetTextColor(ahButton[1],BUTTON_CI_UNPRESSED,GUI_GREEN); BUTTON_SetFont(ahButton[1],&GUI_Font16B_1); BUTTON_SetText(ahButton[1],"Dec"); ahButton[2] = BUTTON_Create(318-52,196,75-21, 20, GUI_ID_FFT, BUTTON_CF_SHOW ); BUTTON_SetTextColor(ahButton[2],BUTTON_CI_UNPRESSED,GUI_GREEN); BUTTON_SetFont(ahButton[2],&GUI_Font16B_1); BUTTON_SetText(ahButton[2],"Switch"); ahButton[3] = BUTTON_Create(318-52,218,75-21, 20, GUI_ID_Spectrum, BUTTON_CF_SHOW ); BUTTON_SetTextColor(ahButton[3],BUTTON_CI_UNPRESSED,GUI_GREEN); BUTTON_SetFont(ahButton[3],&GUI_Font16B_1); BUTTON_SetText(ahButton[3],"Spectr"); ahProgbar[0]=PROGBAR_Create(318-52,2,75-21,20,WM_CF_SHOW); PROGBAR_SetBarColor(ahProgbar[0],0,GUI_MAGENTA); PROGBAR_SetBarColor(ahProgbar[0],1,GUI_RED); PROGBAR_SetFont(ahProgbar[0],&GUI_Font16B_1); PROGBAR_SetMinMax(ahProgbar[0],0,100); WIDGET_SetEffect(ahProgbar[0], &WIDGET_Effect_3D); ahScrollbar[0]=SCROLLBAR_Create(0,11,12,217,0,GUI_ID_OSCLevel,WM_CF_SHOW,SCROLLBAR_CF_VERTICAL); SCROLLBAR_SetNumItems(ahScrollbar[0],200); SCROLLBAR_SetValue(ahScrollbar[0],100); DispButton(); DispChInfo(); ConfigRefresh=0; fRefresh =1; while(1) { if(ConfigRefresh == 0) { if (fRefresh) { fRefresh = 0; if(g_DSO.HoldEn == 1) { DispChInfo(); } } if (g_DSO.HoldEn == 0) { StopADC(); /* 暂停采样 */ DispFrame(); DispChInfo(); DispCh1Wave(); FFT_Convert(); StartADC(); /* 开始采样 */ } PROGBAR_SetValue(ahProgbar[0],OSCPUUsage); } GUI_Delay(50); } }