Exemplo n.º 1
0
        private void checkTuningState(double phase)
        {
            if (Math.Abs(phase) < 50 * Math.Pow(10, -9)) //Uslov za fino podesenje da je faza 100 sekundi manja od 5*2.5ns
            {
                counter++;
                if (counter == 150)
                {
                    tuningState = TuningState.MEDIUM;

                    label9.Text = "Medium Tuning ON";
                }
            }
            else
            {
                counter = 0;
            }
        }
Exemplo n.º 2
0
        private Int32 calculateNewDACValue(string input, double lastPhase, int nTime)
        {
            // "phase" nije u ns nego broj imupulsa counter-a (2.5 ili 5ns)
            double phase = Phase.calculatePhaseFromInputString_B(input);

            if (Math.Abs(lastPhase) < 0.8)             // fail safe (ako ima suma koji ima vrlo visoku fazu)
            {
                if (tuningState == TuningState.CROASE) // Grubo podesavanje
                {
                    double tmp = coarseTuneDAC(phase, nTime);
                    regulator.dACOffset = tmp;

                    checkTuningState(lastPhase);  // change state to MEDIUM if phase low in last 100 measurements

                    return(Convert.ToInt32(tmp));
                }
                else if (tuningState == TuningState.MEDIUM) // Srednje podesavanje
                {
                    /*TuningResult result = mediumTuning.calculateMediumTuning(dac_value, lastPhase, nTime);
                     * if (result.stateResult == TuningResult.Result.FINISHED)
                     * {
                     *  writeServiceFile("Medium tuning finished. Time: " + nTime + ". Setting new DAC value before starting fine tuning: " + result.newDAC);
                     *  tuningState = TuningState.FINE;
                     * }
                     * return Convert.ToInt32(result.newDAC);*/
                    counter1++;
                    Int32 dacReg = Convert.ToInt32(regulator.nextValue(dac_value, lastPhase, nTime));
                    tempReg += dacReg;
                    if (counter1 == 5)
                    {
                        counter1 = 0;
                        Int32 returnVal = tempReg / 5;
                        tempReg = 0;
                        return(returnVal);
                    }
                    // OVO VRATI AKO HOCES DA PROBAS STARU FUNKCIJU
                    // Faza se dodaje u listu i svako deset sekundo se poziva funkcija calculateMediumtuning

                    /*phaseArr.Add(Convert.ToInt32(phaseExpAvg.calculateExpAvg(phase))); //calculateAvg(phase)));
                     * if (phaseArr.Count == 10)
                     * {
                     *  Int32 retval = Convert.ToInt32(calculateMediumTuning());
                     *  phaseArr.Clear();
                     *  return retval;
                     * }*/
                }
                else if (tuningState == TuningState.FINE) // fino podesavanje
                {
                    TuningResult result = fineTuning.tune(dac_value, lastPhase, nTime);
                    if (result.stateResult == TuningResult.Result.FINISHED)// GO TO "AGING" state
                    {
                        tuningState = TuningState.AGEING;
                    }
                    return(Convert.ToInt32(result.newDAC));
                }
                else if (tuningState == TuningState.AGEING)
                {
                    TuningResult result = ageing.ageing(dac_value, lastPhase);
                    return(Convert.ToInt32(result.newDAC));
                }
            }

            return(Convert.ToInt32(dac_value)); // return previous value if lastPhase > 0.8
        }