Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   Problem with TIMER ON DELAY (http://www.go4expert.com/forums/timer-delay-t4622/)

boschow 11Jun2007 15:38

Problem with TIMER ON DELAY
 
Hi all,
i am programing a microprocessor. The system part of the application is already done, so i have to write the logic for all the inputs and the outputs ...

In the system part of the the application there si a function UINT32 CSS_GetTime (UINT16 *ms) that gets the time in seconds and miliseconds since last reboot.

ms - is the pointer that holds the number of miliseconds (0 ..999). Can be NULL if miliseconds are not needed.

So i wrote the code something like this:
Code:


UINT32 get_time;
UINT32 delay_time = 3;

if input1 {
      get_time = CSS_GetTime(NULL);
      if get_time > delay_time {
                        output1 = 1;
    } else output1 = 0;
}

This part of the program only works after the reset, because the get_time is never set to zero. Any ideas how can i do this?

I also tryed with miliseconds. Code:
Code:

UINT16 get_mili_sec=0;
UINT32 get_time;
UINT32 time_increment;
UINT32 delay_time = 3;
UINT32 curr_time;

if input1 {
      get_time = CSS_GetTime (&get_mili_sec);
          if (get_time == 999) {
                  time_increment = 1;
          } else time_increment = 0;
          curr_time += time_increment;
          if (curr_time > delay_time) {
                output = 1;
                curr_time = 0;
          } else output = 0;
                    curr_time = 0;
}

This part of the program also dosent work. Can somebody tell me what am i doing wrong?

Thx for your time and help,
Best regards,
BoSCHoW.

boschow 15Jun2007 19:00

Re: Problem with TIMER ON DELAY
 
The timer, is working now. But once the output is set i cannot put it to 0 even if the input is pressed for a shorter time then 3000 ms. I dont know what i did wrong, can somebody help me. Below is the code that i used ...
Code:

if (contactor == 1) output1=1;
else output1=0;

// RS FLIP FLOP SETS FINAL OUTPUT
 (!key_not_pressed
    && (time_key_active== 0))      contactor = 0;
else if (!key_not_pressed
        && (time_key_active == 1)) contactor = 1;
else if (key_not_pressed
        && (time_key_active == 0)) contactor = 0;
else if (key_not_pressed
        && (time_key_active == 1)) contactor = 0;

//    LOGIC AND - chaks the status of the key
if ((key_check_status ==0)    // check key status failed
    && input1) // key pressed
                key_not_pressed = 0;
else if ((key_check_status ==0)  // check key status failed
    && !input1) // key not pressed
                key_not_pressed  = 0;
else if ((key_check_status ==1) // check key status success
    && !input1)  // key not presset
                key_not_pressed  = 1;
else if ((preverjanje_stanja_tipke==1)        // check key stats success
    &&  input1) // key pressed
                key_not_pressed  = 0;

// FLIP FLOP - CHECK KEY STATUS
if (input1  // key pressed
    && (time_key_active == 0))        // key not active
                preverjanje_stanja_tipke = 1;
else if (input1 // key pressed
    && (time_key_active == 1)) // key active
    key_check_status = 0;
else if (!input1 // key not pressed
    && (time_key_active == 0)) // key not active
    key_check_status = 0;
else if (!input1 // key not pressed
    && (time_key_active== 1)) // key active
    key_check_status = 0;

 //                TIMER STARTER
if (input1) {
    begin_s = CSS_GetTime(&begin_ms);
      do {
        time_key_active= 0;
        now_ms = 0;
        now_s = CSS_GetTime(&now_ms);
        passed_time = (now_s - begin_s) * 1000 + (now_ms - begin_ms);
     
      }
      while (passed_time < 3000);
      time_key_active= 1;
}

Thanks for your time and help,
best regards,
BoSCHoW.


All times are GMT +5.5. The time now is 03:15.